问题出现时的系统状态或环境描述:
1、在RT-thread studio中加入了MicroPython组件,该组件解释器放在某个线程运行(这里是线程名称“thread9”)。该线程的静态栈是15kB,MicroPython组件的堆空间开辟了50KB。
2、自己原来写过的STM32L496的低功耗进入程序(其实是调用了RT-Thread的低功耗组件),在SHELL(也是msh\)下进入低功耗正常,恢复到正常工作模式也正常。(注:这个时候是使用exit()命令退出了MicroPython的REPL模式后的SHELL模式)。
3、进入MicroPython的REPL模式下,使用MicroPython的C扩展功能将上述进入低功耗程序封装成Python模块后并调用,可以正常进入低功耗模式,但恢复到正常模式时出现异常报错并死机。(注:在恢复到正常模式时其他线程已经恢复,只有“thread9”线程也是MicroPython解释器所在的线程导致了死机)
现把死机时截图如下:
上述图片出现了“hard fault on thread: thread9”的提示,也就是MicroPython组件所在的线程报错。自己也反复测试了,当从低功耗恢复到正常模式时,其他线程基本没问题,只要恢复到执行MicroPython解释器所在的线程时就出问题了。
想请教各位大神:
为什么恢复到MicroPython解释器线程时就出现硬件报错?
我要怎么修改?
或是进入低功耗前,要对MicroPython解释器做什么特殊处理?
STM32 的低功耗模式有 3种: 1)睡眠模式(CM3内核停止,外设仍然运行) 2)停止模式(所有时钟都停止) 3)待机(standby)模式(1.8V内核电源关闭) 从待机模式唤醒后的代码执行等同于复位后的执行 进入Standby模式后,只能有Wake-up脚和RTC唤醒,特别是唤醒后,程序将从最开始运行,也就是相当于软件复位。
STM32教 程上有呀 ,如野火的教程,,配置好中断,只要一条语句即进入睡眠模式,然后由中断唤醒,执行指示灯闪烁程序:主程序如下:
int main(void)
{
/* 配置 led */
LED_GPIO_Config();
/* 配置exti中断 */
EXTI_Key_Config();
/* 配置串口为中断模式 */
USART1_Config();
printf("\r\n 野火ISO-MINI开发板,睡眠实验 \r\n");
while(1)
{
/* wait interrupt */
LED1( ON ); // 亮
Delay(0xFFFFF);
LED1( OFF ); // 灭
LED2( ON ); // 亮
Delay(0xFFFFF);
LED2( OFF ); // 灭
LED3( ON ); // 亮
Delay(0xFFFFF);
LED3( OFF ); // 灭
__WFI(); //进入睡眠模式,等待中断唤醒
}
}
static void Delay(__IO uint32_t nCount) //简单的延时函数
{
for(; nCount != 0; nCount--);
}
本文标签:stm32l431低功耗代码