本帖最后由 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
请问各位这是什么个情况?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
有试过,照样跑飞,在中断服务函数最后加了USART1->SR &= 0x00;
一周热门 更多>