STM32用串口重定向printf函数的问题
用串口重定向printf函数,在main函数里串口打印数据显示没问题,但是开了一个1s定时更新中断的定时器以后串口打印就乱码了,这是什么情况?STM32用串口重定向printf函数的问题
定时器中断优先级高于串口中断,导致串口传输被定时器中断打断。串口数据发送过程中若被高优先级中断抢占,可能引发数据不完整或乱码;还有就是建议你把代码附上来,看看你的代码逻辑怎么写的,这样能更好的针对你的问题来解答
STM32用串口重定向printf函数的问题
用串口DMA方式,可以不用中断,批量传输STM32用串口重定向printf函数的问题
用DMA方式也一样有问题的。这是2个程序访问一个资源的问题。一般是通过锁解决(信号量)先检测信号量可用,不可用,等待
可用,占用信号量,使用资源
资源使用完成,释放信号量
定时器中断优先级过高,导致主程序长时间无法执行串口发送。 中断优先级冲突?定时器中断优先级高于串口中断(如果使用了)。 printf函数和中断服务程序同时访问串口外设导致的? 可能是缓冲区溢出导致的。 检查重定向实现是否正确实现了_write或fputc。 检查时钟配置是否正确,特别是在启用定时器后没有影响串口时钟。 检查中断优先级配置,串口中断(如果使用)的优先级高于或等于定时器中断。 用示波器观察串口波形,确认波特率、信号幅度是否符合要求。 用环形缓冲区,实现一个发送缓冲区,在中断外填充数据,在中断内发送数据。 电源不稳导致串口通信异常。 必要时添加电阻匹配或电容滤波。 临时禁用中断发送关键数据。 在STM32中,可以通过设置中断优先级组和中断优先级来调整中断的优先级。 波特率、数据位、停止位等参数不一致。 可能重定向函数没有正确处理中断环境。 未正确配置串口
页:
[1]
2