1、开始串口中断的时候会死机:nvic_irq_enable(USART0_IRQn, 3, 0);
解决:要设置中断优先级分组:
nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0);
2、初始化的时候多几次使用 printf 会HardFault_Handler:
解决:因为RTOS中断相关没有初始化好,调用printf 会出问题。
3、任务栈设太大了,会导致初始化不成功 MAIN_TASK_SIZE
解决:要考虑好任务栈大小分配,太大,太小都会了会出问题。
4、初始化的时候,不能修改时钟,不然会导致任务调度的 vTaskDelay(10);不准,修改的函数是delay_init(SystemCoreClock / 500U);
5、RTC不准问题,要加上分频函数:rtc_prescaler_set(32767);
6、外部晶振 8M改成12M,代码要修改的地方:
(1) 修改晶振参数
(2) 修改外部晶振配置
system_clock_120m_hxtal();
7、接着 jlink或者串口线关机的时候,会一直给MCU供电,导致没有完成正常掉电逻辑,重新上电的时候,程序没有重新开始运行,所以一直是黑屏,而且无法出现待机界面;
8、串口初始化死机问题:由于串口中断数组越界导致的,以后使用数组,索引++或者--的时候,一定要注意做限制,不能超出范围,不然会引发异常,甚至死机;
9、用消息队列传输数组,数组里面有负数时,不能直接给数组成员赋值,要注意要多一位去区分负数和正数;注意负数操作(赋值,取整,取余等)的时候,如果操作不当,也有能引发死机问题。
10、压力传感器校准参数读出有问题:
解决:(1) 浮点数扩大成整数之后再保存;(2)读出flash数据之后判断限定范围,如果超出范围赋默认值。
11、氧浓度传感器串口偶发接收到数据,导致逻辑判断出问题:
解决:接收信号线要设置成 上拉输入,不能设置成浮空输入,不然会偶发误接收到数据。不可用。
无法避免接收到误发,只能修改代码逻辑,接收到完整包的时候才判断氧浓度传感器接入。
12、上电语音误报问题:
初始化的时候,开启了中断,默认会进入一次中断处理函数;GD32的中断初始化设置之后,默认会开启一次。清中断必须放在使能中断之前才能生效。