本帖最后由 电子星辰 于 2018-6-1 11:33 编辑 0 K% _) h& ~. t, I+ A6 t 3 z! o) h& c5 Q: C( v) c: L3 [ 这是一个基于STM32F103RCT6的串口DMA+定时计数接收不定长数据和发送定长数据的串口程序。. a# L& A7 t3 f# W (直接把主循环当定时器用了,如果要用定时器,直接把 if(USART_RX_STA > 0) {& v1 n3 _5 c' I6 _" z0 n timer_count++; if(timer_count == 255) timer_count = 0;//定时器计数,防止变量溢出. ?* V6 Q6 K# t } 放定时器中断里就可以了) {" U* F1 M3 s" q9 w ) 8 i1 n9 X: o" k, a 因项目需要做一个在定时发送定长数据的同时,随时准备接收不定长数据命令的串口功能。 发送部分一直都是用的HAL_UART_Transmit重定向printf。( F/ K, A" v0 {# w2 r0 {* C 接收部分一开始用的串口轮询接收,效率不高,放弃了。然后改用串口中断+定时器接收,结果出现了当接收频率稍高时就可能会进不了HAL_UART_Receive_IT函数的现象,发现是与HAL_UART_Transmit冲突,死锁了。现在把串口中断改用DMA解决了死锁的问题。, p3 n5 k* o8 h; w* f" z 将这个串口程序做一个展示吧。/ y+ R0 h$ F: Y, D2 V1 j % g, y. c! N, h" [* G% R& h( Z |
RS232.rar
2018-6-21 11:00 上传
点击文件名下载附件
1.71 KB, 下载次数: 143
æ件åä»»æï¼å°±æ¯ä¸ä¸ªä¸²å£æ¶åï¼å æ¬.c/.h两个æ件
点评
谢谢支持!
STM32CubeMX