Stm32停止模式的问题

Stm32f103c8t6从停止模式通过中断唤醒后,怎么让他继续执行程序?进入停止模式之前oled显示,进入停止模式后下载不了程序,oled也不亮,然后用中断唤醒,但oled怎么都不亮,但是能下载程序,说明stm32应该已经被唤醒

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7451160
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:用stm32f103c8t6点亮0.96寸oled屏(附带百度云例程)
  • 除此之外, 这篇博客: stm32项目_stm32f103c8t6项目_循迹避障小车完整制作过程_智能小车设计_STM32智能小车教程-循迹-避障-蓝牙遥控-跟随中的 OLED模块 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 使用:OLED显示屏模块 0.96寸 IIC/SPI

    选择原因:价格较低、使用方便

    注意:

    这里使用 四管脚 顺序为 GND VCC SCL SDA,绘制PCB要注意顺序

    供电为3.3V

    image-20220113214310617
  • 以下回答由chatgpt基于相关博客总结生成:

    对于Stm32f103c8t6停止模式的问题,可能是由于停止模式下主频被关闭,需要在唤醒后重新配置时钟。具体解决方案如下:

    1. 在进入停止模式之前,记录当前系统时钟,以在唤醒后重新配置时钟。可以使用如下代码:

    RCC_ClocksTypeDef RCC_Clocks; RCC_GetClocksFreq(&RCC_Clocks); uint32_t HCLK_Frequency = RCC_Clocks.HCLK_Frequency;

    1. 进入停止模式之前,关闭所有用于唤醒的外部中断,避免唤醒时意外触发外部中断。可以使用如下代码:

    NVIC_DisableIRQ(EXTI0_IRQn); // 关闭外部中断0 NVIC_DisableIRQ(EXTI1_IRQn); // 关闭外部中断1 // ...

    1. 配置唤醒源,以便能够在需要时唤醒系统。可以使用如下代码:

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); PWR_WakeUpPinCmd(ENABLE); PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);

    1. 唤醒后,重新配置时钟。可以使用如下代码:

    RCC_DeInit(); RCC_HSEConfig(RCC_HSE_ON); while (RCC_WaitForHSEStartUp() != SUCCESS); RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); RCC_PLLCmd(ENABLE); while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); FLASH_SetLatency(FLASH_Latency_2); RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); while (RCC_GetSYSCLKSource() != 0x08);

    1. 重新开启外部中断,使得系统能够响应外部中断。可以使用如下代码:

    NVIC_EnableIRQ(EXTI0_IRQn); // 开启外部中断0 NVIC_EnableIRQ(EXTI1_IRQn); // 开启外部中断1 // ...

    1. 然后再次配置 OLED,并恢复显示内容。具体操作可以参考原代码中的初始化和显示函数。