首先总结一下串口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[]中的消息进行处理了,这样就解决了消息覆盖,消息出错无法纠正的问题,至于消息怎么处理就是依据不同的需求不同的处理,另外注意,握手信号好用定时器中断。
上一篇:如何使用STM32实现systick的精确延时
下一篇:stm32定时器优先级
推荐阅读最新更新时间:2024-11-03 11:08
设计资源 培训 开发板 精华推荐
- 使用 Analog Devices 的 LTC3602EFE 的参考设计
- AM2G-4807SZ 7.2V 2 瓦 DC-DC 转换器的典型应用
- STM32F030最小系统测试板
- 带有 PTN5100 Type-C 插座的 USB PD 消费/提供商应用
- 使用 Analog Devices 的 LT3091ER 的参考设计
- 典型应用显示 14 引脚封装部件的所有补偿和感应元件,具有 NCV4299 150mA 低压降稳压器的抑制功能
- NCL30073LED4GEVB:NCL30073LED4GEVB评估板
- 使用 Analog Devices 的 LTC1321 的参考设计
- UG233,基于EFM8BB3 MCU的EFM8 USB Type-C参考设计板
- 恩智浦基于MCU的EdgeReady人脸识别解决方案
- Keysight 有奖直播 | 基于数字孪生的软件工具,助力射频子系统验证
- 下载送好礼|人工智能物联网时代即将来临,您准备好了吗?
- 春暖花开,我为TI C2000 LaunchPad“画”外围!
- 免费申请测评 | Sipeed MAix BiT AIoT 开发套件,搭载K210、屏幕和摄像头
- 2020年ST MEMS传感器创意设计大赛
- 提出你的电源问题&技术解答,提升自我电源知识,赢取好礼
- Digi-Key KOL视频来袭~资深算法工程师畅聊图像处理秘诀
- 硬核拆解|看看千元智能电表内部如何连接
- 看视频赢京东卡 | 泰享实测之水哥秘籍第三期
- 【已结束】TE 直播|如何有效应对当下测试测量领域的挑战