OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2149|回复: 0

正点原子串口中断实验中发送不带回车的数据后再发送带回车的数据返回会将不带回车的数据也返回 程序改进

[复制链接]

2

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2014-2-18
在线时间
4 小时
发表于 2019-3-25 22:36:00 | 显示全部楼层 |阅读模式
本帖最后由 lyq1211 于 2019-3-25 22:42 编辑

正点原子串口接收中断例程中,发送的数据必须以0x0d和0x0a结尾,才会返回发送的数据;
否则会将发送的数据存储在USART_RX_BUF[]中,直到超过数据存储最大长度(#define USART_REC_LEN     200)后清空缓存。
若发送的数据未超过最大长度且未以0x0d和0x0a结尾,下次发送数据以0x0d和0x0a结尾,则会将两次发送的数据都显示出来。
这里对程序稍加修改,实现不回显未0x0d和0x0a结尾的数据。核心思想是空闲中断的运用。
1.在串口初始化中开启空闲中断。

[mw_shl_code=c,true]USART_ITConfig(USART1,USART_IT_IDLE,ENABLE); [/mw_shl_code]

2.串口中断函数里增加空闲中断函数;再定义一个标志位,一帧数据接收完成后,标志位置位。

[mw_shl_code=c,true]                if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)
                {
                        Clear = USART1->SR;
                        Clear = USART1->DR;
                        Flag_Once = 1;
               
                }[/mw_shl_code]
3.主函数中,将原while(1)中程序包含在刚才标志位置位的条件中。即接收完一帧数据后,对数据进行判断:若收到以0x0d和0x0a结尾的数据,
则回显发送的数据,否则接收状态标记USART_RX_STA清零。

[mw_shl_code=c,true]                if(Flag_Once == 1)
                {
                        Flag_Once = 0;
                        if(USART_RX_STA&0x8000)
                        {                                          
                                len=USART_RX_STA&0X3FFF;//此次接收到的数据长度
                        
                                printf("\r\n您发送的消息为:\r\n\r\n");
                                for(t=0;t<len;t++)
                                {
                                        USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据
                                        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
                                }
                                USART_RX_STA=0;
                        }
                        else
                                USART_RX_STA = 0;
                }[/mw_shl_code]
这样就能实现改进目的,经反复测试,效果良好。





正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-24 04:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表