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 */
- }
复制代码
————————————————
版权声明:Logan Li
|