本帖最后由 电子星辰 于 2018-6-1 11:33 编辑 % g3 |0 G; H- d9 Z& U' r' K5 y 6 \* b" _6 F; ~5 I 这是一个基于STM32F103RCT6的串口DMA+定时计数接收不定长数据和发送定长数据的串口程序。- m: e. |, X1 e9 I8 v* v$ n (直接把主循环当定时器用了,如果要用定时器,直接把9 V: N8 @* A: [ if(USART_RX_STA > 0) {1 ^' b/ A T5 O/ w Q% J timer_count++;, Q* V" L# O; ^ if(timer_count == 255) timer_count = 0;//定时器计数,防止变量溢出 } 放定时器中断里就可以了( t) I4 G9 |- b )) c6 C( U+ Q3 n* j3 M2 I1 i 因项目需要做一个在定时发送定长数据的同时,随时准备接收不定长数据命令的串口功能。 发送部分一直都是用的HAL_UART_Transmit重定向printf。 接收部分一开始用的串口轮询接收,效率不高,放弃了。然后改用串口中断+定时器接收,结果出现了当接收频率稍高时就可能会进不了HAL_UART_Receive_IT函数的现象,发现是与HAL_UART_Transmit冲突,死锁了。现在把串口中断改用DMA解决了死锁的问题。 7 W% c$ \ ` J% a7 j9 c L7 a6 @ 将这个串口程序做一个展示吧。' w: t3 ?2 l/ ^) Y7 H- T, Y |
RS232.rar
2018-6-21 11:00 上传
点击文件名下载附件
1.71 KB, 下载次数: 143
æ件åä»»æï¼å°±æ¯ä¸ä¸ªä¸²å£æ¶åï¼å æ¬.c/.h两个æ件
点评
谢谢支持!
STM32CubeMX