STM32L051上手记录

LPTIM Source MUX更换时钟源要重新全部断电再上电才会生效,坑了我2个小时

LPTIM1不能在standby模式下唤醒,坑了我一天,要用闹钟AlarmA唤醒

HAL_LPTIM_TimeOut_Start_IT(&hlptim1, Period, Timeout);

Period 每隔多久执行一次 实际的值应该填写   

Timeout 第一次什么时候执行

这两个值的计算公示如下

外部时钟LSE的话     时钟源频率(32768)  / 分频值 (LPTIM_PRESCALER_DIV16) * 秒数

内部时钟LSI的话     时钟源频率(37000)  / 分频值 (LPTIM_PRESCALER_DIV16) * 秒数


系统唤醒之后要重新配置系统时钟,否则默认使用HSI时钟信号,会变慢

void reInitSystem(){
    //重新配置系统时钟
    SystemClock_Config();
    
    //初始化串口
    MX_USART1_UART_Init();
    MX_USART2_UART_Init();
    
    //清楚唤醒标记
    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
    __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG();
    //禁用
    HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);
}

休眠之前需要操作

void prepareLowPowerMode(){
    //进入低功耗模式
    HAL_PWREx_EnableUltraLowPower();
    HAL_PWREx_EnableFastWakeUp();
    //关掉led灯
    HAL_GPIO_WritePin(LED_RUN_GPIO_Port, LED_RUN_Pin, GPIO_PIN_SET);
    //等串口的信息发完再关闭串口
    osDelay(1);
    //串口关闭
    HAL_UART_DeInit(&huart2);
    HAL_UART_DeInit(&huart2);
}

窗口看门狗wwdg的操作

在时钟图上增加分频,否则看门狗最大的8分频,时间范围也仅仅是0ms~12ms(试出来的),每增加一倍分频,这个时间扩大一倍,最大可以达到16分频,也就是说0ms~192ms,我还是不懂怎么算

HAL_RTC_AlarmAEventCallback 关于Alarm跨天的问题,真奇葩到家了,必须设置时间的时候加上这两行,才能设置跨天的闹钟

        time.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
        time.StoreOperation = RTC_STOREOPERATION_RESET;
        HAL_RTC_SetTime(&hrtc, &time, RTC_DATA_FORMAT);

否则跨天的Alarm执行不执行是随机的,有人能解释一下吗?

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值