问题现象:
软件设置使能HAL_SLEEP功能, 并且在初始化时使能了GPIO唤醒功能,GPIO开启下降沿中断功能。当GPIO有中断产生时,有时软件会复位,有时不会。如果不使能HAL_SLEEP功能, GPIO中断不会导致软件复位。
芯片型号:CH582
软件版本:
CH58x_BLE_LIB_V1.30
MESH_LIB_V1.5
问题现象:
软件设置使能HAL_SLEEP功能, 并且在初始化时使能了GPIO唤醒功能,GPIO开启下降沿中断功能。当GPIO有中断产生时,有时软件会复位,有时不会。如果不使能HAL_SLEEP功能, GPIO中断不会导致软件复位。
芯片型号:CH582
软件版本:
CH58x_BLE_LIB_V1.30
MESH_LIB_V1.5
理论上不会出现这个问题,开启HAL_SLEEP功能时,芯片会被唤醒。默认使用的是sleep模式,shutdown模式唤醒后芯片会复位。
1、下载官方最新的EVT例程;
2、PM例程有完整的GPIO唤醒,可以参考一下。同时使用PM的例程开启相应的睡眠模式,看看是否会唤醒;
3、可以打印一下复位状态寄存器,看看相应的值为多少。
这个问题我遇到过,而且可以复现:
产生脉冲的源码
以下是我的记录
-------------------------------------------------------------------------------------------------------------
## 中断IO测试工程
用于产生一个负脉冲给中断IO,测试单片机是否复位
### 问题现象
IO配置成中断模式,并在BLE peripheral例程中开启HAL_SLEEP,给中断IO一个us级的负脉冲,MCU立即复位
### 处理方法
关机前再配置IO中断(正常工作时关闭中断)。
我的也是使用的蓝牙从机,PA10作为IO下降沿唤醒,不开睡眠的时候,正常,开睡眠的时候,会出现重启现象,重启的寄存器R8_RESET_STATUS为0x01,上电复位。
检查代码是否为最新的,目前官网更新的最新为1.9版本。
先使用PM例程,配置SLEEP模式,其他睡眠模式屏蔽,并验证。
在peripheral例程测试的时候,只需要加上GPIO的配置函数即可,并开启HAL_SLEEP。GPIO触发的时候,注意唤醒后再将GPIO置为浮空的状态。
我目前也遇到了按键芯片重启这个问题,用ch592 peripheral例程测试的时候,加上GPIO的配置函数即可,并开启HAL_SLEEP。
如果是作为遥控器使用,唤醒后gpio设置为浮空状态,还怎么检测下降沿呢?
并且,这个重启现象不一定什么时候出现,随机的。
我的意思是,按键的gpio如果设置为浮空状态,还如何进入中断呢?需要外部增加上拉电阻么?
目前我的遥控按键是设置为内部上拉,下降沿中断,在中断中设置按键标志位。
现在蓝牙遥控器的基本功能都可以了,功耗也降下来了,就剩下这个按键复位的问题了。如果按键按的比较慢,芯片复位的机会小,因为按键有双击功能,会有多次快速按的时候,就很容易出现芯片复位。
您好,按键的GPIO设置为浮空输入,是要实现什么样的功能。作为按键,一般来讲需要低电平表示按下,就内部上拉;需要高电平表示按下,就内部下拉,二选一。浮空输入一般在采集ADC时使用。
如果一定要配置为浮空输入,需要在休眠前固定电平为接近外部电平的状态,以减小漏电。唤醒后,在TMOS事件中重新配置为浮空输入。EVT例程里悬空引脚一般固定为内部上拉。
该按键有没有被用作为休眠唤醒按键?
若使用了CH582,检查代码里有没有启用看门狗,按下按键复位时,可能是由于IO不具备唤醒的条件,MCU无法进入sleep休眠,导致进入idle休眠,此时若启用了看门狗,会引起看门狗复位。解决方法是在休眠前,判断IO状态,比如说配置为下降沿唤醒,就在休眠前判断IO是否已处于高电平的状态,若是则继续休眠,若否则打断休眠重新配置IO为内部上拉再读IO。
若使用了CH592,上述问题可以在配置R8_SLP_WAKE_CTRL I= RB_GPIO_WAKE_MODE后解决。
若该按键只是被用作按键中断,检查是否有代码跑飞进hard fault后复位的情况。可以按下篇博客排查:CH57x/CH58x/CH32V wch risc-v 芯片hardfault问题追踪&程序卡死追踪 - iot-fan - 博客园 (cnblogs.com)