打印
[应用相关]

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

[复制链接]
3039|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Garen2|  楼主 | 2017-9-28 16:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在下最近在做一个项目,需要用串口调试助手向板子发送如: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);
        }
}
沙发
Ryze| | 2017-9-28 16:29 | 只看该作者
void USART3_IRQHandler(void)这个函数是接收到一个字节就进入一次的

使用特权

评论回复
板凳
Varus| | 2017-9-28 16:45 | 只看该作者
在中断里边运行

for(CmdIndex = 0;CmdIndex < 10;CmdIndex++)
{
   CmdCode[CmdIndex] = USART_ReceiveData(USART3);
      
}
应该是不行的

使用特权

评论回复
地板
Snow7| | 2017-9-28 17:07 | 只看该作者
要想实现这个功能,该怎么写程序

使用特权

评论回复
5
android2| | 2017-9-28 17:20 | 只看该作者

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

使用特权

评论回复
6
拉克丝| | 2017-9-28 17:30 | 只看该作者
请问你弄好了吗,怎么实现这样子取数据

使用特权

评论回复
7
309030| | 2017-9-28 18:05 | 只看该作者
void USART1_IRQHandler(void)                        //串口1中断服务程序
        {
          uint8_t Res;
        
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断
        {


                Res=USART_ReceiveData(USART1);
               
                buffer[size]=Res;
                size++;
                save++;
        
                if(save>=31)                        
                {
                        save=0;
                        
                        count=1;
                    USART_SendData(USART2, buffer[7]);

                }

                 USART_ClearFlag(USART1,USART_FLAG_TC);
                                
     }         
        
        }

使用特权

评论回复
8
lefeng| | 2017-9-28 18:15 | 只看该作者
验证过了吗?也想试试这段程序

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

153

主题

734

帖子

3

粉丝