1. 现象
波特率115200
时,串口接收丢数据,但是不是乱码。波特率9600
时,接收正常。
//正确数据
1234567890
//接收数据
123457890
123890
23456790
2.原因
- 中断优先级的问题。
- 程序中有两个中断(定时器中断1ms进一次中断,串口接收中断)
- 串口接收中断的优先级低于定时器中断,所以丢失数据了
- STM8主频太低,只有16M
3. 解决方法
调整优先级,设置串口优先级高于定时器优先级
//定时器
void tim_init()
{
//初始化定时器
...
//设置优先级
ITC_SetSoftwarePriority(TIM1_UPD_OVF_TRG_IRQn, ITC_PriorityLevel_2);
enableInterrupts();
}
//串口
void uart_init()
{
//初始化定时器
...
//设置优先级
ITC_SetSoftwarePriority(USART1_RX_TIM5_CC_IRQn, ITC_PriorityLevel_3);
enableInterrupts();
}