串口中断接收函数

一、代码

        u16  count=0;

        u16 buff[max];

        void USART1_IRQHandler(void)

{

        if(USART_GetITStatus(USART1,USART_IT_RXNE)!=0)

{

        Res=USART_ReceiveData(USART1);

        if((count&0x8000)==0)//接收未完成

{

        if(count&0x4000)//接收到了0x0d

{

        if(res!=0x0a)   count=0;

        else count|=0x8000;

}

else

{

        if(res==0x0d) count|=0x4000;

        else{

                buff[count&0x3fff]=Res;

                count++;

                if(count>max)  count=0;        

}

}

}

}

}

二、设计思想

        当接收到电脑发送过来的数据,从上述程序可以看出,只要一开始发送过来的数据不是0x0d或者换行,那么我们就将数据保存在一个数组里边,并且进行计数,当检测到有回车时,停止计数。此时等待OXOA的到来,如果没有等到,就认定此次接收失败,需要重新开始接收。如果等到,代表接收成功,将标志位count标记成接收成功状态。

        如果迟迟没有检测到回车,那么就将收到的数据存在数组buff里边,直到累计的计数值超过规定的最大数都没有检测到回车,那么会放弃之前接收到的数据,重新开始接收。

总结:当接收到的数据以后,一开始就放在数组里边,但是每一次接收数据放在数组中之前都会去检测一下当前收到的数据是否为回车和换行符,如果是,就会停止保存数据到数组中,认定接收完成。但是一直都没有检测到,那么当数组达到它的最大容量以后,全部清除掉,再重新开始。

引用

正点原子stm32f103最小系统板开发指南(库函数版本);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值