野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18419|回复: 3

串口缓存USART_RX_BUF清零的问题

[复制链接]
发表于 2020-7-17 10:49:36 | 显示全部楼层 |阅读模式
1火花
如题,我想要当单片机接收到三个字节的数组,判断第三个字节是否为0X01,假如判断为真,LED闪烁。我用串口调试助手发送{0X12 0X34 0X01}和{0X12 0X34 0X02}结果LED均闪烁,代码如下,求指教~
PS:我这个里面没有对USART_RX_BUF里面的i进行清零的处理,不知道是不是这个问题,如果是的话,应该在什么位置清零呢?
  1. u8 i=0;
  2. u8 USART_RX_BUF[USART_REC_LEN];     //接收缓冲,最大USART_REC_LEN个字节 200字节.
  3. void USART1_IRQHandler(void)    //中断服务函数                           
  4.     {
  5.                 if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断
  6.                 {
  7.                         USART_ClearITPendingBit(USART1,USART_IT_RXNE);       //清除标志位
  8.                         USART_RX_BUF[i]=USART_ReceiveData(USART1);      //读取接收到的数据
  9.                         i++;
  10.                 if(USART_RX_BUF[2]==0X01)
  11.                 {        
  12.                         LED0=~LED0;
  13.                         delay_ms(200);        
  14.                         LED0=~LED0;
  15.                 }
  16.                 else{}
  17.                 }
  18.     }
复制代码


最佳答案

查看完整内容

在i++;下方增加if (i>2)i=0;
回复

使用道具 举报

发表于 2020-7-17 10:49:37 | 显示全部楼层
在i++;下方增加if (i>2)i=0;
回复

使用道具 举报

 楼主| 发表于 2020-7-17 14:08:23 | 显示全部楼层
还有梦与你 发表于 2020-7-17 13:58
在i++;下方增加if (i>2)i=0;

我按照你说的加了判断,还是不行
回复

使用道具 举报

 楼主| 发表于 2020-7-17 14:32:35 | 显示全部楼层
将心明月 发表于 2020-7-17 14:08
我按照你说的加了判断,还是不行

优化后的代码如下
  1. void USART1_IRQHandler(void)    //中断服务函数                           
  2.     {
  3.     int m;
  4.                 if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断
  5.                 {
  6.                         USART_ClearITPendingBit(USART1,USART_IT_RXNE);       //清除标志位
  7.                         USART_RX_BUF[j]=USART_ReceiveData(USART1);      //读取接收到的数据
  8.                         j++;
  9.                         if (j>2)j=0;                       
  10.                 if(USART_RX_BUF[2]==0X01)
  11.                 {       
  12.                         USART_SendData(USART1,USART_RX_BUF[2]);
  13.                         for(  m=0;m<3;m++)
  14.                         {
  15.                                 USART_RX_BUF[m]=0;
  16.                         }
  17.                 }
  18.                 else{}
  19.                 }
  20.     }
  21.        
复制代码
回复

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-4 19:21 , Processed in 0.042730 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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