OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4688|回复: 6

hal库怎么在STOP模式唤醒后,关闭RTC闹钟A及其中断

[复制链接]

31

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
金钱
294
注册时间
2018-5-3
在线时间
69 小时
发表于 2021-1-8 16:03:34 | 显示全部楼层 |阅读模式
1金钱
  试了一下,用下面的方法,RTC还是有在计时,并进入中断、
  __HAL_RTC_ALARMA_DISABLE(&hrtc);
  __HAL_RTC_ALARM_DISABLE_IT(&hrtc, RTC_IT_ALRA);



/* Process Locked */
  __HAL_LOCK(&hrtc);
  __HAL_RTC_ALARMA_DISABLE(&hrtc);
  __HAL_RTC_ALARM_DISABLE_IT(&hrtc, RTC_IT_ALRA);
    /* Process Unlocked */
  __HAL_UNLOCK(&hrtc);

最佳答案

查看完整内容[请看2#楼]

为防止 RTC 寄存器在复位后受到可能的寄生写访问, RTC 寄存器会自动锁定。要更新当前 日历时间和日期,必须将这些寄存器解锁。 通过在写保护寄存器 (RTC_WPR) 中编程一个密钥来允许对 RTC 寄存器进行写操作。 要解锁 RTC 寄存器的写保护,需要执行以下步骤: 1. 将 0xCA 写入 RTC_WPR 寄存器。 2. 将 0x53 写入 RTC_WPR 寄存器。 写入不正确的密钥会自动重新激活 RTC 寄存器写访问保护。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
金钱
294
注册时间
2018-5-3
在线时间
69 小时
 楼主| 发表于 2021-1-8 16:03:35 | 显示全部楼层

为防止 RTC 寄存器在复位后受到可能的寄生写访问, RTC 寄存器会自动锁定。要更新当前
日历时间和日期,必须将这些寄存器解锁。
通过在写保护寄存器 (RTC_WPR) 中编程一个密钥来允许对 RTC 寄存器进行写操作。
要解锁 RTC 寄存器的写保护,需要执行以下步骤:
1. 将 0xCA 写入 RTC_WPR 寄存器。
2. 将 0x53 写入 RTC_WPR 寄存器。
写入不正确的密钥会自动重新激活 RTC 寄存器写访问保护。
回复

使用道具 举报

31

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
金钱
294
注册时间
2018-5-3
在线时间
69 小时
 楼主| 发表于 2021-1-8 16:05:10 | 显示全部楼层
void system_entry_sleep(void)
{
       
                HAL_TIM_Base_Stop_IT(&htim16);
                HAL_TIM_Base_Stop_IT(&htim14);
                HAL_TIM_Base_Stop_IT(&htim3);
       
          /*Configure GPIO pin Output Level */
//                HAL_GPIO_WritePin(STATUS_LED_GPIO_Port, STATUS_LED_Pin, GPIO_PIN_SET);
       
                HAL_GPIO_WritePin(EN_ADC_GPIO_Port, EN_ADC_Pin, GPIO_PIN_RESET);
                __HAL_RCC_PWR_CLK_ENABLE(); //使能 PWR 时钟
//                __HAL_RCC_BACKUPRESET_FORCE(); //复位备份区域
//                HAL_PWR_EnableBkUpAccess(); //后备区域访问使能
                        MX_RTC_Init();
                __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
                HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,PWR_STOPENTRY_WFI); //进入STOP模式
//                HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERREGULATOR_ON,PWR_STOPENTRY_WFI); //进入sleep模式
                //HAL_PWR_EnterSTANDBYMode(); //进入待机模式
//                HAL_RTC_MspDeInit
                SystemClock_Config();
//                __HAL_RTC_ALARMA_DISABLE(&hrtc);
//                __HAL_RTC_ALARM_DISABLE_IT(&hrtc,RTC_IT_ALRA);
                MX_USART1_UART_Init();
                HAL_UART_Receive_IT(&huart1, (uint8_t*)&aRxBuffer, 1);//串口接收中断开启
                HAL_GPIO_WritePin(EN_ADC_GPIO_Port, EN_ADC_Pin, GPIO_PIN_SET);
               
}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2021-1-9 02:14:47 | 显示全部楼层
直接操作寄存器 即可
回复

使用道具 举报

31

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
金钱
294
注册时间
2018-5-3
在线时间
69 小时
 楼主| 发表于 2021-1-11 13:54:26 | 显示全部楼层
正点原子 发表于 2021-1-9 02:14
直接操作寄存器 即可

        RTC->CR &=~(RTC_CR_ALRAIE | RTC_CR_ALRAE );
直接这样也不可以啊
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2021-1-12 02:26:55 | 显示全部楼层
chen312aa 发表于 2021-1-11 13:54
RTC->CR &=~(RTC_CR_ALRAIE | RTC_CR_ALRAE );
直接这样也不可以啊

把CR寄存器的值打印出来看看,看你到底操作成功了没有哦
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

31

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
金钱
294
注册时间
2018-5-3
在线时间
69 小时
 楼主| 发表于 2021-1-12 08:53:47 | 显示全部楼层
正点原子 发表于 2021-1-12 02:26
把CR寄存器的值打印出来看看,看你到底操作成功了没有哦

这个是寄存器状态,就是没清掉相应位
QQ截图20210112084752.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-25 15:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表