Betty996 发表于 2025-4-18 11:44

STM32用串口重定向printf函数的问题

用串口重定向printf函数,在main函数里串口打印数据显示没问题,但是开了一个1s定时更新中断的定时器以后串口打印就乱码了,这是什么情况?

yangjiaxu 发表于 2025-4-18 11:45

STM32用串口重定向printf函数的问题

定时器中断优先级高于串口中断,导致串口传输被定时器中断打断。串口数据发送过程中若被高优先级中断抢占,可能引发数据不完整或乱码;
还有就是建议你把代码附上来,看看你的代码逻辑怎么写的,这样能更好的针对你的问题来解答

GlenX 发表于 2025-4-23 08:23

STM32用串口重定向printf函数的问题

用串口DMA方式,可以不用中断,批量传输

steelen 发表于 2025-5-20 12:00

STM32用串口重定向printf函数的问题

用DMA方式也一样有问题的。这是2个程序访问一个资源的问题。一般是通过锁解决(信号量)
先检测信号量可用,不可用,等待
可用,占用信号量,使用资源
资源使用完成,释放信号量

albertaabbot 发表于 2025-5-21 15:24

定时器中断优先级过高,导致主程序长时间无法执行串口发送。

stormwind123 发表于 2025-5-21 15:49

中断优先级冲突?定时器中断优先级高于串口中断(如果使用了)。

probedog 发表于 2025-5-21 15:50

printf函数和中断服务程序同时访问串口外设导致的?

classroom 发表于 2025-5-21 15:50

可能是缓冲区溢出导致的。

cr315 发表于 2025-5-21 15:54

检查重定向实现是否正确实现了_write或fputc。

elephant00 发表于 2025-5-21 15:55

检查时钟配置是否正确,特别是在启用定时器后没有影响串口时钟。

flycamelaaa 发表于 2025-5-21 16:23

检查中断优先级配置,串口中断(如果使用)的优先级高于或等于定时器中断。

updownq 发表于 2025-5-21 16:32

用示波器观察串口波形,确认波特率、信号幅度是否符合要求。

powerantone 发表于 2025-5-21 17:20

用环形缓冲区,实现一个发送缓冲区,在中断外填充数据,在中断内发送数据。

hilahope 发表于 2025-5-21 17:20

电源不稳导致串口通信异常。            

timfordlare 发表于 2025-5-21 18:00

必要时添加电阻匹配或电容滤波。            

jcky001 发表于 2025-5-21 18:20

临时禁用中断发送关键数据。

beacherblack 发表于 2025-5-21 18:27

在STM32中,可以通过设置中断优先级组和中断优先级来调整中断的优先级。

usysm 发表于 2025-5-21 19:12

波特率、数据位、停止位等参数不一致。

probedog 发表于 2025-5-21 21:00

可能重定向函数没有正确处理中断环境。

pentruman 发表于 2025-5-21 21:46

未正确配置串口            
页: [1] 2
查看完整版本: STM32用串口重定向printf函数的问题