GD32F303VET6裸板调试遇到问题

文章讲述了在嵌入式开发中遇到的一系列问题,包括中断处理、RTOS初始化中的printf冲突、任务栈大小调整、时钟管理、RTC精度、晶振切换、电源管理、串口通信异常、数据类型处理以及上电初始化错误。作者提供了相应的解决方案。
摘要由CSDN通过智能技术生成

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的中断初始化设置之后,默认会开启一次。清中断必须放在使能中断之前才能生效。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值