stm32 L0 +433(sx1212模块)低功耗
- 作者: 多遗憾我错过你
- 来源: 51数据库
- 2021-08-17
1. 为什么选择stop模式?
.?停止模式唤醒是从进入睡眠的那个地方开始的,或直接进入中断,SRAM和寄存器内容被保留
standby 待机模式 ,唤醒后会复位,相当于重新上电
2. stm32 的gpio复位后是什么状态?
stm32单片机是一个低功耗的处理器,当复位以后,gpio默认是高阻状态,也就是浮空输入
?
参考链接:?http://www.all.com/files/Articles/416/0/205/205501_20210629145114379.jpg? stop低功耗模式
stm32单片机的3种模式??https://www.sohu.com/a/338305750_467791
?mcu? io 配置参考?https://blog.csdn.net/jiangjunjie_2005/article/details/50628279
http://www.all.com/files/Articles/416/0/205/205501_20210629145114958.jpg? 这个文章 只参考了? 当有下拉电阻的时候,改为输出下拉低电平
| MCU输入:输入,浮动 | Input floating, no external interrupt | |
|
| MCU输出:输入,上拉 | Input pull-up, no external interrupt |
|
| 3.3V引脚:输出,上拉,高电平 | Output push-pull, high level, 2MHz |
|
| 未接引脚:输出,上拉,低电平 | Output push-pull, low level,2MHz |
|
| MCU电源与地引脚 | / |
?
void SystemPower_Config(void)
{
? GPIO_InitTypeDef GPIO_InitStructure = {0};
? /* Enable Power Control clock */
? __HAL_RCC_PWR_CLK_ENABLE();
? /* Enable Ultra low power mode */
? HAL_PWREx_EnableUltraLowPower();
? /* Enable the fast wake up from Ultra low power mode */
? HAL_PWREx_EnableFastWakeUp();
?? ?#if ? 1
?? ?//spi?? ??
?? ?HAL_SPI_DeInit(&SpiHandle);? ?必须这样 先deinit设备
?? ?__HAL_RCC_SPI1_CLK_DISABLE();? ??
?? ?//uart
?? ?HAL_UART_DeInit(&UartHandle);
?? ?__HAL_RCC_USART2_CLK_DISABLE() ;
?? ?//dma1?? ???
?? ??? ?HAL_DMA_DeInit(&hdma_adc);
?? ?__HAL_RCC_DMA1_CLK_DISABLE();
?? ?//adc ?? ?
?? ??? ??? ?HAL_ADC_DeInit(&hadc);
?? ?__HAL_RCC_ADC1_CLK_DISABLE();
?? ?#endif
?? ?//pb -----------
? GPIO_InitStructure.Pin = GPIO_PIN_0; ? ? ? ? //floating? 浮空
? GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;?
? GPIO_InitStructure.Pull = GPIO_PULLDOWN;
?? ?HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
?? ?HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);?
?? ?
?? ?
? GPIO_InitStructure.Pin = GPIO_PIN_1 |GPIO_PIN_9; ? ? ? ? // has pulldown??resistance
? GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; ?//GPIO_MODE_ANALOG;
? GPIO_InitStructure.Pull = GPIO_PULLDOWN;
?? ?HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
?? ?HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);?
?? ?HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);?
?? ?
? ?GPIO_InitStructure.Pin = GPIO_PIN_3 |GPIO_PIN_5 ; ? ? ? ? //mcu? output
? GPIO_InitStructure.Mode = GPIO_MODE_INPUT; ?
? GPIO_InitStructure.Pull = GPIO_PULLUP;
?? ?HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
?? ?
???GPIO_InitStructure.Pin = GPIO_PIN_4 |GPIO_PIN_6 |GPIO_PIN_7; ? ? ? ? //mcu input
? GPIO_InitStructure.Mode = GPIO_MODE_ANALOG; ?
? GPIO_InitStructure.Pull = GPIO_NOPULL;
?? ?HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
?? ?
?
?? ?//pc -------------
? GPIO_InitStructure.Pin = GPIO_PIN_All;
? GPIO_InitStructure.Mode = GPIO_MODE_ANALOG; ?
? GPIO_InitStructure.Pull = GPIO_NOPULL;
?? ?HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);?? ?
? /* Disable GPIOs clock */
? __HAL_RCC_GPIOA_CLK_DISABLE();
? __HAL_RCC_GPIOB_CLK_DISABLE();
? __HAL_RCC_GPIOC_CLK_DISABLE();
?? ?? ? ??
}
rtc 时钟
http://www.51sjk.com/Upload/Articles/1/0/267/267679_20210708022149192.html ?rtc 时钟设置?
37k的来历
在进行低功耗设计时,使用外部中断唤醒CPU是一个非常有用而且有效的方法,但是在某些特定的应用中,我们还希望
CPU能够自己醒来去完成一些特定的操作,这就需要用到RTC模块,因为RTC模块在CPU进入低功耗状态后,是还可以工
作的。使用RTC,也需要得到一个最小时间间隔,一般我们将其设置为1秒,本文介绍如何设置RTC的这个最小时间间
隔。
? ? 先来看一下时钟图,RTC可以采用两个时钟模块,1个是外部的低频晶振,一般我们选择32.768KHz,这个比较精
准;另一个则是内部的RC振荡器,是37KHz。
? ? STM32L0的预分频器被分成两个预分频器。一个7位的异步预分频器(AsynchPrediv),一个13位同步预分频器
(SynchPrediv)。
? ? RTC频率的计算公式:RTCclk=(LSE或LSI)/[(AsynchPrediv+1)*(SynchPrediv+1)]。
? ? 给出2组经典值: ? ?LSE ? ?RTCclk = 32768/(127+1)*(255+1)=1Hz ? ?AsynchPrediv = 127 ? ?
SynchPrediv = 255
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? LSI ? ? RTCclk = 37000/(124+1)*(295+1)=1Hz ? ?AsynchPrediv = 124
? ?SynchPrediv = 295
?
?
