微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > STM32串口中断接收数据到数组遇到的问题

STM32串口中断接收数据到数组遇到的问题

时间:10-02 整理:3721RD 点击:

在下最近在做一个项目,需要用串口调试助手向板子发送如:112233445566778899AA(10对16进制数)的数字串。
想在串口3中断程序中得到CmdCode[0]=11,CmdCode[1]=22.……CmdCode[8]=99,CmdCode[9]=AA。
也就是说想把这112233445566778899AA(10对16进制数)的数字串分配到一个10个元素的数组中。

为了验证能否达到此目的,我将此10个元素中任意一个元素,如第7个元素USART_SendData(USART3,CmdCode[6]);发送到电脑,如“USART_SendData(USART3,CmdCode[6]);”,
结果发送上来的在串口调试助手中得到的是00000000000000000000,也就是说并没有将这一串16进制数分到每个数组的元素中。
我写的程序如下所示,我百思不得其解,请高手指点我一下。谢谢了
u8 CmdCode[10] ;
void USART3_IRQHandler(void)
{
u8 CmdIndex;//i;
        if(USART_GetITStatus(USART3, USART_IT_RXNE)==SET)
        {
                USART_ClearITPendingBit(USART3, USART_IT_RXNE);
                                   for(CmdIndex = 0;CmdIndex < 10;CmdIndex++)
                {
                    CmdCode[CmdIndex] = USART_ReceiveData(USART3);
      
                }

                USART_SendData(USART3,CmdCode[6]);//我为了验证是否分配成功,把数组的任意一位元素发到串口中,看是否能成功
                    }
                 if(USART_GetITStatus(USART3, USART_IT_TXE)==SET)
        {
                USART_ClearITPendingBit(USART3, USART_IT_TXE);
        }
}

我顶啊,大家看看啊

void USART3_IRQHandler(void)这个函数是接收到一个字节就进入一次的
所以你在中断里边运行
for(CmdIndex = 0;CmdIndex < 10;CmdIndex++)
{
   CmdCode[CmdIndex] = USART_ReceiveData(USART3);
      
}
应该是不行的

谢谢你的指点,我就是想实现这个功能,你能指点我该怎么写这个程序吗

if( CmdIndex <= MAX )
{
    CmdCode[CmdIndex++] = USART_ReceiveData(USART3);
}

请问你弄好了吗,我现在也需要这样子 取数据,求教一下

                                 

  1. void USART1_IRQHandler(void)                        //串口1中断服务程序
  2.         {
  3.           uint8_t Res;
  4.        
  5.         if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断
  6.         {


  7.                 Res=USART_ReceiveData(USART1);
  8.                
  9.                 buffer[size]=Res;
  10.                 size++;
  11.                 save++;
  12.        
  13.                 if(save>=31)                       
  14.                 {
  15.                         save=0;
  16.                        
  17.                         count=1;
  18.                     USART_SendData(USART2, buffer[7]);

  19.                 }

  20.                  USART_ClearFlag(USART1,USART_FLAG_TC);
  21.                                
  22.      }        
  23.        
  24.         }

复制代码

学习啊   看起来不错

验证过了吗?目前也需要这段程序。

你好!我现在也遇到这个问题,可否指点一下。

请问这个问题是怎么解决的?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top