STM32L0系列
测试基于L053
初始化
void MX_RTC_Init(void)
{
LL_RTC_InitTypeDef RTC_InitStruct = {0};
/* Peripheral clock enable */
LL_RCC_EnableRTC();
/* RTC interrupt Init */
NVIC_SetPriority(RTC_IRQn, 0);
NVIC_EnableIRQ(RTC_IRQn);
/** Initialize RTC and set the Time and Date
*/
RTC_InitStruct.HourFormat = LL_RTC_HOURFORMAT_24HOUR;
RTC_InitStruct.AsynchPrescaler = 127;
RTC_InitStruct.SynchPrescaler = 255;
LL_RTC_Init(RTC, &RTC_InitStruct);
/** Initialize RTC and set the Time and Date
*/
/** Enable the WakeUp
*/
LL_RTC_DisableWriteProtection(RTC);
LL_RTC_WAKEUP_SetClock(RTC, LL_RTC_WAKEUPCLOCK_CKSPRE);
LL_EXTI_EnableIT_0_31(LL_EXTI_LINE_20);
LL_EXTI_EnableRisingTrig_0_31(LL_EXTI_LINE_20);
LL_RTC_WAKEUP_Enable(RTC);
LL_RTC_EnableWriteProtection(RTC);
}
中断回调
void RTC_IRQHandler(void)
{
/* USER CODE BEGIN RTC_IRQn 0 */
HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
/* USER CODE END RTC_IRQn 0 */
/* USER CODE BEGIN RTC_IRQn 1 */
LL_RTC_ClearFlag_WUT(RTC);//清除秒中断事件
LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_20);//清除中断线标志位
/* USER CODE END RTC_IRQn 1 */
}
话外篇
维护老项目的时候调试半天,就是不能触发RTC秒钟断,最终经过查找,发现是HAL的MSP Init被删掉了。。。
在stm32l0xx_hal_msp.c
中添加如下代码,RTC功能实现:
void HAL_MspInit(void)
{
/* USER CODE BEGIN MspInit 0 */
/* USER CODE END MspInit 0 */
__HAL_RCC_SYSCFG_CLK_ENABLE();
__HAL_RCC_PWR_CLK_ENABLE();
/* System interrupt init*/
/* USER CODE BEGIN MspInit 1 */
/* USER CODE END MspInit 1 */
}