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

发布时间:2024-02-27  

首先总结一下串口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的消息队列,进入中断服务函数之后,关闭中断,接收数据,如果没有数据接收,等待一段时间(时间和波特率有关)后开中断,出中断,然后在对接收到的数据进行处理,下面看代码:

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

消息队列及其初始化函数:

/*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[]中的消息进行处理了,这样就解决了消息覆盖,消息出错无法纠正的问题,至于消息怎么处理就是依据不同的需求不同的处理,另外注意,握手信号好用定时器中断。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    功放机怎么连接电视_功放机怎么连接电脑;  功放机怎么连接电视   功放机连接电视的操作方法如下:   1、需要有一根同轴线或者一条光纤线。将同轴线(或光纤线)接到......
    知道程序运行到哪里,为什么会出错,到什么地方陷入了死循环。 方法二:串口打印法,串口打印法可以知道函数输出的东西是什么,程序中只需要使用串口中断就可以了,关于串口怎么样使用,我觉......
    车载功放辐射发射案例分析;车载功放辐射发射案例 本文引用地址: 评论:此案例应该指出PCB板与金属外壳的连接方式(是否连接怎么连接)。以分析骚扰路径。 ......
    hifi音响和普通音响有什么区别 hifi音响怎么连接电视;  hifi音响和普通音响有什么区别   HiFi(High Fidelity)音响和普通音响之间有几个主要区别:   1. 音质......
    利用4个二极管做一个整流电路呢? 这个是的电路图,我们看一下这四个二极管是怎么连接的?根据图形符号连接实物图应该是这样的。 实物连接 连接技巧:4个二极管分两组,两个两个串一起,即一......
    音单元采用黄金锥与蜂巢盆一体化单元技术,中低频强劲有力,声音指向性特别好,更凝聚、更清晰、更浑厚,准确的音相与紧凑的包围感,让听者体会到美妙的音场效果。   多媒体音箱怎么连手机   多媒体有源音箱是否能够连接手机,主要......
    hifi音响入门知识:hifi音响怎么连接;连接 Hi-Fi 音响系统的具体方法取决于你使用的音频组件和设备。以下是一般常见的连接方法: 1. 信号源连接:将音频信号源(如CD播放器、网络......
    建议使用淘宝提供的烧录程序。 包括它的原理图还有哪些功能具体用来做什么,线路怎么连的,这些东西非常的重要,如果这些你都不知道的话那么你的程序就没办法编写了。 三 那么下节课我们来讲解这个51......
    , (uint8_t *)buff, BUFF_SIZE,0xffff); 知道串口怎么用了,我们就可以想办法hello world。重定向printf的方法百度一搜一大片,fputc这个......
    示波器探头怎么连接示波器?;你知道示波器探头是如何连接到示波器上的吗?由于示波器和探头种类很多,我们以混合信号示波器(MSO) 的为例,来介绍下示波器探头的连接。 1 如果需要,可关......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>