初级会员

- 积分
- 185
- 金钱
- 185
- 注册时间
- 2017-6-19
- 在线时间
- 90 小时
|
10金钱
如题,printf(……)和USART_SendData(……),可是我在实际操作过程中,发现printf在运行过一段时间之后,不能输出到串口调试助手上。USART_SendData(……)却可以,后来重新定义了fputc函数 ,问题解决了,原因不详,代码如下,求解~- int main(void)
- {
- delay_init(); //延时函数初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
- uart_init(115200); //串口初始化为115200
- while(1)
- {
- printf("\r\n我是谁\r\n");
- delay_ms(300);
-
- USART_SendData(USART3, 0X12);
- while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);
- delay_ms(3000);
- }
- }
复制代码 之前printf(……)运行一段时间,不能打印到串口调试助手的fputc函数
- //重定义fputc函数
- int fputc(int ch, FILE *f)
- {
- while((USART3->SR&0X40)==0)//循环发送,直到发送完毕
- USART3->DR = (u8) ch;
- return ch;
- }
复制代码 更改后的fputc函数
- int fputc(int ch, FILE *f)
- {
- while( !(USART3->SR & (1 << 7)) );
- USART_SendData(USART3,(uint8_t)ch);
- return ch;
- }
复制代码
PS:网上的其它重定义fputc函数 ,供自己学习(未验证)~
- //重映射fputc函数,此函数为多个输出函数的基础函数
- int fputc(int ch, FILE *f)
- {
- while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
- USART_SendData(USART1, (uint8_t) ch);
- return ch;
- }
复制代码 PPS:一般打印的话要注意Target->Code Generation,勾选Use MicroLIB
|
最佳答案
查看完整内容[请看2#楼]
这个是原子历程,应该不存在你说的没结合起来的情况,但在我实际应用的过程中发现,似乎不太稳定,原因还没找到
|