佚名通过本文主要向大家介绍了stm32 printf串口,stm32printf,stm32 printf重定向,stm32 printf函数,stm32 printf用法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:[stm32]无法使用printf 进行串口输出
描述:
main.h
usart.h
usart.c
以上是代码 进入模拟后 会卡在 POP {r3,pc}这一行
USART_SendData(USART1,'a'); 如果用这个函数输出 就正常 可以正常的发送 但是用printf 就不行了,都进入不到while(1)里面
描述:
main.c
#include <main.h>
int main(){
System_Init();
while(1){
printf("a");
delay_ms(1000);
//USART_SendData(USART1,'a');
}
// return 0;
}
main.h
#include <stm32f10x.h>
#include <delay.h>
#include <usart.h>
void System_Init(void){
SystemInit();
Usart_Config();
}
usart.h
#ifndef _USART_H
#define _USART_H
#include "stm32f10x.h"
#include <stdio.h>
void Usart_Config(void);
int fputc(int ch, FILE *f);
//void USART1_printf(USART_TypeDef* USARTx, uint8_t *Data,...);
#endif
usart.c
#include "usart.h"
int fputc(int ch, FILE *f)
{
USART_SendData(USART1, (uint8_t) ch);
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
return ch;
}
void Usart_Config(){
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1/*|RCC_APB2Periph_AFIO*/,ENABLE);
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽式输出
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//模拟输入
GPIO_Init(GPIOA,&GPIO_InitStructure);
USART_InitStructure.USART_BaudRate=9600;/*设置波特率*/
USART_InitStructure.USART_WordLength=USART_WordLength_8b;/*设置传送数据长度*/
USART_InitStructure.USART_StopBits=USART_StopBits_1;/*设置停止位的长度*/
USART_InitStructure.USART_Parity=USART_Parity_No;/*设置是否需要检验*/
USART_InitStructure.USART_HardwareFlowC/*设置硬件流*/
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;/*设置串口模式*/
USART_Init(USART1,&USART_InitStructure);
USART_Cmd(USART1,ENABLE);
}
以上是代码 进入模拟后 会卡在 POP {r3,pc}这一行
USART_SendData(USART1,'a'); 如果用这个函数输出 就正常 可以正常的发送 但是用printf 就不行了,都进入不到while(1)里面