[求助] STM32中断接收的数据

forisigang   2015-3-2 20:36 楼主
STM32中断接收数据放到数组里面,再对数组进行分段处理,把不同的字符串发到串口屏的相应位置去,为何数据无法更新呢??

回复评论 (9)

代码都没贴上来...怎么分析?自己仿真看看
点赞  2015-3-2 20:42
引用: yl20084784 发表于 2015-3-2 20:42
代码都没贴上来...怎么分析?自己仿真看看

void USART2_IRQHandler(void)
{                  
        if(USART_GetITStatus(USART2,USART_IT_RXNE) != RESET)
        {
                uint8_t data_2=USART_ReceiveData(USART2);
                Rx_Buffer[Rx_Counter++]=data_2;
             if(Rx_Counter>=Len)
                {
                Rx_Counter=0;
                }
        }
}
void UpDate(void)
{       
    uint8_t *dest[4];
    uint16 i,num=0;
        uint8_t src[Len];
                                   //判断第一个字符是否正确
        for(i=0;i         {
    if(Rx_Buffer[0]=='T')
        src=Rx_Buffer;
        }
    split(src,"\n",dest,&num);           //分割字符串src
        GetScreen();                         //获取文本ID                                                                                                                                                                                                                                                                                                                                                  
    if(current_screen_id ==1)      //文本
    {   
         SetTextValue(1,1,dest[0]);  //发送到屏上
//         SetTextValue(1,2,dest[1]);
//         SetTextValue(1,6,dest[2]);
//       SetTextValue(1,7,dest[3]);
    }
}

void split(uint8_t *src,const uint8_t *separator,uint8_t **dest,uint16 *num)
{
    uint8_t *pNext;
    uint16 count = 0;
    pNext =strtok(src,separator);

    while(pNext!=NULL)
    {
       *dest++ = pNext;
        count++;
        pNext =strtok(NULL,separator);
    }

    *num = count;
}

SetTextValue(1,1,dest[0]);  //发送到屏上这个可以正常更新数据,过以后就屏上数据就不动了,要是同时发         SetTextValue(1,1,dest[0]);  
SetTextValue(1,2,dest[1]);SetTextValue(1,6,dest[2]);
   SetTextValue(1,7,dest[3]);//发送到屏上,数据在屏上不更新,这是为何呢,大神帮忙看下啊???
点赞  2015-3-2 22:00
首先,你要确认,可以进入中断。看看接收数组的长度是多少。隔一段时间,就在主循环里,打印出接收数组的数据。看看有没有变化。
点赞  2015-3-2 22:04
引用: ienglgge 发表于 2015-3-2 22:04
首先,你要确认,可以进入中断。看看接收数组的长度是多少。隔一段时间,就在主循环里,打印出接收数组的数据。看看有没有变化。


可以进入中断的,因为发的81个字符,接收的长度我就弄81了,接收的第一串字符发到屏上数据是更新的,再同时多发几串字符到屏上数据就不更新了,

点赞  2015-3-2 22:09
真正让你贴代码的人是不会看代码的。也帮你解决不了问题。
有的时候要求软硬件必须并排走,哪个走的稍快一些都会被另外一个拖住的。 业务联系: QQ:3265386825 e-Mail: yichunscp@163.com
点赞  2015-3-3 07:23

看代码是个头痛的问题,你这个问题可以分为两个部分检查:

1. 检查串口通信,通过多次,多数据发送判断串口能否正常接收

2. 检查屏更新问题,分多次,多数据更新判断是否可以正常更新

这两个问题都非常容易解决,知道问题所在就可以很好的解决了
我的博客
点赞  2015-3-3 09:18
2. 检查屏更新问题,分多次,多数据更新判断是否可以正常更新

自动刷新是不是太频繁了,你手动刷新试试
点赞  2015-3-3 09:21
遇到这种问题,基本上最有效的方法就是设置断点仿真排查
点赞  2015-3-4 23:53
问题解决了没得?
点赞  2015-3-7 09:45
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复