|
本帖最后由 电子星辰 于 2018-6-1 11:33 编辑 x* W/ p+ _7 H* o+ I5 _% _: v 这是一个基于STM32F103RCT6的串口DMA+定时计数接收不定长数据和发送定长数据的串口程序。 (直接把主循环当定时器用了,如果要用定时器,直接把# ]! H( ], }- F& J if(USART_RX_STA > 0) 6 I Q# k! d+ N F" m2 A/ m { timer_count++; if(timer_count == 255) timer_count = 0;//定时器计数,防止变量溢出0 l# C7 y/ m' \% l& |! ] }( b& N, G. r; H 放定时器中断里就可以了) C" `3 D F4 ^; d; n- u* ? )8 Q1 @8 u1 f f! M7 H- { 因项目需要做一个在定时发送定长数据的同时,随时准备接收不定长数据命令的串口功能。 发送部分一直都是用的HAL_UART_Transmit重定向printf。" }) i6 L1 [8 @* O 接收部分一开始用的串口轮询接收,效率不高,放弃了。然后改用串口中断+定时器接收,结果出现了当接收频率稍高时就可能会进不了HAL_UART_Receive_IT函数的现象,发现是与HAL_UART_Transmit冲突,死锁了。现在把串口中断改用DMA解决了死锁的问题。8 I" T% Q `3 e r" c+ \! E9 i 将这个串口程序做一个展示吧。( ^* k+ v+ s. I# u# K# l$ q |
微信公众号
手机版
RS232.rar
2018-6-21 11:00 上传
点击文件名下载附件
1.71 KB, 下载次数: 144
æä»¶åä»»æï¼å°±æ¯ä¸ä¸ªä¸²å£æ¶åï¼å æ¬.c/.h两个æä»¶
点评
谢谢支持!
STM32CubeMX