接收串口无故跑飞

2019-07-20 04:59发布

本帖最后由 ZDawn 于 2018-7-27 17:57 编辑

我在串口中断服务函数使用数组存储接收到的数据,结果程序竟然跑飞了。下面直接上程序

//串口1中断服务函数
u8 USART_RX_BUF[512]={0};
u16 num=0;
void USART1_IRQHandler(void)
{
        u8 res = 0;
        u16 UART_SR = 0;
        UART_SR = USART1->SR;                      //获得SR寄存器值
        res=USART1->DR;                                  //获得DR寄存器值
        if(UART_SR&0x20)     //判断为接收中断
        {
               
                if( num<500 )
                {
                        USART_RX_BUF[num] = 1;      //这两行一起运行就会跑飞,其中一行单独运行的话程序不会跑飞
                        num++;                                   //这两行一起运行就会跑飞,其中一行单独运行的话程序不会跑飞
                }
        }
}


在线调试的时候,在程序跑飞之后,看到num的值为493,但是数组USART_RX_BUF只有前面463个元素的值为1,其它元素的值不为1而是乱码。
但是如果设置  u8 USART_RX_BUF[1024]={0};  的话,程序不跑飞,num的值也为
500,并且数组USART_RX_BUF前500元素的值全部为1
请问各位这是什么个情况?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
ZDawn
1楼-- · 2019-07-20 08:07
 精彩回答 2  元偷偷看……
ZDawn
2楼-- · 2019-07-20 10:10
接收的数据量要比USART_RX_BUF数组的容量小很多才不会跑飞
ZDawn
3楼-- · 2019-07-20 15:29
 精彩回答 2  元偷偷看……
遗忘12352
4楼-- · 2019-07-20 21:22
有没有清除中断标志
ZDawn
5楼-- · 2019-07-21 02:59
遗忘12352 发表于 2018-7-27 18:01
有没有清除中断标志

有试过,照样跑飞,在中断服务函数最后加了USART1->SR &= 0x00;

一周热门 更多>