用的是MKE02Z32VLD2型号的单片机,外部20Mhz晶振,串口波特率为57600,开了UART1串口接收中断,禁用了发送中断,采用查询的方式发数据。
问题是:做了几块板子,发现串口通信不正常,有的跑了十几分钟就没通信了,有的几个小时后才没通信,可以确定没通信后单片机没死机,按按键有反应,能进定时器中断闪个灯什么的,没开看门狗。
发现问题后,在串口中断里不做任何串口数据处理,只是亮个灯,空读数据,然后在main主循环里熄灭在串口中断里亮起的那个灯。单片机跑起来后开始那个灯会闪,不一定的时间后就不闪了,单片机也没死机。
可以确定是进不了串口接收中断了,非常郁闷啊!
串口配置:
- void UART_Config( void )
- {
- UART_ConfigType sUART_Config;
-
- sUART_Config.u32SysClkHz = BUS_CLK_HZ; //总线时钟20MHz
- sUART_Config.u32Baudrate = UART1_BAUD_RATE; //波特率57600
-
- UART_Init(UART1,&sUART_Config);
-
- UART_EnableInterrupt(UART1,UART_RxBuffFullInt); //使能串口接收中断
-
- //关闭发送完成中断
- UART_DisableInterrupt(UART1,UART_TxBuffEmptyInt);
- UART_DisableInterrupt(UART1,UART_TxCompleteInt);
-
-
- UART_SetCallback(&UART_ReceiveTask);
- /* enable UART1 interrupts */
- NVIC_EnableIRQ(UART1_IRQn);
- }
复制代码
串口接收中断函数里的内容:
- void UART_ReceiveTask( UART_Type *pUART )
- {
- volatile unsigned char temp = 0;
-
- Light_FaultLED(0); //亮个指示灯
-
- if( UART_IsRxBuffFull(pUART) )
- {
- temp = UART_ReadDataReg(pUART);
- }
- }
复制代码
main主循环里就是按键检测,AD采样,清那个指示灯。还开了KBI和PIT中断,没开看门狗。
各位大神帮忙分析一下可能的原因吧,我已经无计可施了~
你有没有设置嵌套中断优先级?
现在确定是ADC中断影响了串口接收中断吗?
一周热门 更多>