|
本帖最后由 dongwang_fl 于 2020-3-19 17:03 编辑
最近在学习STM32,使用的芯片是STM32L051C8T6,串口输出使用printf函数,以前的fputc是拷贝的STM32F051C8U6芯片项目的,如下:
int fputc(int ch, FILE *f)
{
while((USART1->ISR & 0X40)==0);
USART1->TDR = (uint8_t)ch;
return ch;
}
原来在STM32F051上运行稳定,这几天换到STM32L051上经常就不稳定,一下可以稳定运行几十分钟,或者只能运行几秒钟(这里说稳定,是指向电脑发数据正常),通过CH340C连到电脑上,用串口调试助手无法接收到数据,即使复位也不输出信息,要拔一下USB口,能正常输出几条数据,就又不行了。这时即使将RX TX和CH340断开,将CH340的RX TX短接也无法自发自收,很奇怪。感觉是单片机发数据将CH340给跑死了。必须断开重新插上USB,此时CH340可以自发自收。但是再把芯片的RX TX接上,立马还是无法通信。
因为以上原因,一直以为程序是没有问题的,今天换了个简单的程序只是500MS输出信息,还是用上面的代码,运行是稳定的,感觉正常。后来换成以下代码,
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,40);
return ch;
}
就正常了。请大神介绍下一可能是什么原因造成这样的问题呢?因为板子有时可以正常运行很久,有时时间又很短,出问题后即使复位也没有输出信息,就让人感觉不是软件的问题。 |
|