|
本帖最后由 电子星辰 于 2018-6-1 11:33 编辑 $ ^; F+ {" [0 p8 }0 N1 J : H+ l; ]/ n8 D' B5 z$ R 这是一个基于STM32F103RCT6的串口DMA+定时计数接收不定长数据和发送定长数据的串口程序。; G, i) Y4 B; X6 i" R+ A (直接把主循环当定时器用了,如果要用定时器,直接把: t% a) n% r: E/ \' _) s if(USART_RX_STA > 0) { timer_count++;4 G+ \4 ]2 u9 _, y4 `& P6 d if(timer_count == 255) timer_count = 0;//定时器计数,防止变量溢出. f; v! X9 [# M/ D* T& u$ p } 放定时器中断里就可以了% g: a2 d4 o: R: p" o )( V1 m$ j' u7 y2 j1 e. p ' o% \5 o, v" n7 I( ^ 因项目需要做一个在定时发送定长数据的同时,随时准备接收不定长数据命令的串口功能。1 N" \; O8 U9 @2 x6 m! {, B( B 发送部分一直都是用的HAL_UART_Transmit重定向printf。0 s0 m9 c8 p7 F+ R; c+ l 接收部分一开始用的串口轮询接收,效率不高,放弃了。然后改用串口中断+定时器接收,结果出现了当接收频率稍高时就可能会进不了HAL_UART_Receive_IT函数的现象,发现是与HAL_UART_Transmit冲突,死锁了。现在把串口中断改用DMA解决了死锁的问题。 将这个串口程序做一个展示吧。 |
微信公众号
手机版
RS232.rar
2018-6-21 11:00 上传
点击文件名下载附件
1.71 KB, 下载次数: 144
æä»¶åä»»æï¼å°±æ¯ä¸ä¸ªä¸²å£æ¶åï¼å æ¬.c/.h两个æä»¶
点评
谢谢支持!
STM32CubeMX