基于STM32实现串口的两个分案解析

首先总结一下串口232,422,485
串口232:可双向传输,全双工,最大速率20kbps,负逻辑电平,-15v~-3v逻辑“1”,+3v~+15v逻辑“0”。
串口422:可双向传输,4线全双工,2线单工。
串口485:可双向传输,4线全双工,2线单工,最大速率10mb/s,差分信号,发送端:+2v~+6v逻辑“1”,-2v~-6v逻辑“0”,接收端:+200mv逻辑“1”,-200mv逻辑“0”。
对于串口的实现有以两个方案:
方案一,和原子的《例说stm32》一样,首先接收,然后处理,没有消息验证处理,这样就会出现消息覆盖,消息出错后死机,无法明确区分命令,无法及时应答握手信号。方案二,借鉴uc/osii的消息队列,进入中断服务函数之后,关闭中断,接收数据,如果没有数据接收,等待一段时间(时间和波特率有关)后开中断,出中断,然后在对接收到的数据进行处理,下面看代码:
消息队列及其初始化函数:
/*osq结构体来管理消息队列*/
typedefstructos_q{/*queuecontrolblock*/
u8*osqstart;/*pointertostartofqueuedata*/
u8*osqend;/*pointertoendofqueuedata*/
u8*osqin;/*pointertowherenextmessagewillbeinsertedintheq*/
u8*osqout;/*pointertowherenextmessagewillbeextractedfromtheq*/
u8osqsize;/*sizeofqueue(maximumnumberofentries)*/
u8osqentries;/*currentnumberofentriesinthequeue*/
}os_q;
os_q*posq,osq;
u8usart_rx_buf[length_buff];//循环队列,存储接受的信息。
voidos_qinit()//初始化结构体
{
posq=&osq;
posq-》osqstart=usart_rx_buf;
posq-》osqend=&usart_rx_buf[length_buff];
posq-》osqin=usart_rx_buf;
posq-》osqout=usart_rx_buf;
posq-》osqsize=length_buff;
posq-》osqentries=0;
}
///*在中断函数中将一条消息的所有字节一次性得保存在消息队列中*/
u8message_buff[20];
voidusart1_irqhandler(void)
{
u8num=0;
//u8i;
u8time=0;//接受超时技术
usart1-》cr1&=0xffdf;
led=!led;
while(1)
{
if(usart1-》sr&(1《《5))//如果有数据收到的话,将消息存在消息队列中
{
message_buff[num]=(u8)usart1-》dr;
num++;
*posq-》osqin++=(u8)usart1-》dr;
posq-》osqentries++;
if(posq-》osqin==posq-》osqend)
{
posq-》osqin=posq-》osqstart;
}
time=0;
}
else
{
delay_us(10);
time++;
if(time》=50)break;
}
}
usart1-》cr1|=0x0020;
}
这样就把数据一次性全部存储下来了,剩下的就是对消息缓冲器message_buff[]中的消息进行处理了,这样就解决了消息覆盖,消息出错无法纠正的问题,至于消息怎么处理就是依据不同的需求不同的处理,另外注意,握手信号好用定时器中断。

泰克:2019做好准备,2020充满期待
宇凡微YE09合封芯片,集成高性能32位mcu和2.4G芯片
低成本无绳式单相BLDC手持式搅拌机方案
简介SMT是怎样的东西
维信诺AMOLED柔性屏概念车载应用成“打卡”地
基于STM32实现串口的两个分案解析
大功率高频直流电源如何选合适?
如何使用以太网IP核的1588功能?
618完美厨房,超值好价带走佳歌高品质厨房八件套!
详解5G的六大关键技术
利用云存储的优点来帮助用户解决常见IT问题
国产手机CIS开启新时代,转型Fab-Lite的格科微发布单芯片5000万像素CIS
Spring Boot如何实现异步任务
视觉系统检测机对比检验员,它的优势是什么
直流电子负载的四种工作模式
电机起停/水塔水位/正反转/星三角减压四大PLC项目案例
罗德与施瓦茨NRX功率计介绍
紫光集团发布全新的品牌标识及定义(内附紫光展锐图说发展史)
食品制造业机器人应用场景越来越广 食品制造业开始进行变革
传特斯拉重启上海三期汽车工厂建设项目