本帖最后由 电子星辰 于 2018-6-1 11:33 编辑 这是一个基于STM32F103RCT6的串口DMA+定时计数接收不定长数据和发送定长数据的串口程序。 (直接把主循环当定时器用了,如果要用定时器,直接把 if(USART_RX_STA > 0) { timer_count++;0 u+ C v+ Q2 q3 Q. {0 ~ if(timer_count == 255) timer_count = 0;//定时器计数,防止变量溢出 } 放定时器中断里就可以了 )2 Y# ]* g6 z' l$ B% z 2 r' o6 @2 U4 y* q2 i 因项目需要做一个在定时发送定长数据的同时,随时准备接收不定长数据命令的串口功能。 发送部分一直都是用的HAL_UART_Transmit重定向printf。- s# S& p4 x5 ~& K 接收部分一开始用的串口轮询接收,效率不高,放弃了。然后改用串口中断+定时器接收,结果出现了当接收频率稍高时就可能会进不了HAL_UART_Receive_IT函数的现象,发现是与HAL_UART_Transmit冲突,死锁了。现在把串口中断改用DMA解决了死锁的问题。& J2 X9 } o1 R5 ^3 k ^. d, f) @0 _7 T+ m4 l 将这个串口程序做一个展示吧。" {) q0 z7 z* C3 Z( b/ w1 Z ! P* ?# r9 `, b9 | * P9 } |5 \ V; C5 U |
RS232.rar
2018-6-21 11:00 上传
点击文件名下载附件
1.71 KB, 下载次数: 143
æ件åä»»æï¼å°±æ¯ä¸ä¸ªä¸²å£æ¶åï¼å æ¬.c/.h两个æ件
点评
谢谢支持!
STM32CubeMX