stm32单片机实现多个闹钟_STM32实现对RTC闹钟唤醒的设计
工程中用到低功耗的控制,本来想使用待机模式,后来发现待机后所有IO口为高阻态,这样对于一些IO口控制的外设有些不妥,想过外部上拉一个电阻可是功耗不好控制放弃该方案选用停止模式。停止模式后IO口保持停止前的状态,但是不像待机模式那样可以轻松通过闹钟唤醒,只能通过中断线实现唤醒。为了实现RTC闹钟唤醒搜得一段代码,现贴过来分析一下
void RTC_EXTI_INITIAL(FuncTIonalState interrupt_en_or_dis)
{
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
//------------EXTI17 配置 -------------------
EXTI_InitStructure.EXTI_Line = EXTI_Line17;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = interrupt_en_or_dis;
EXTI_Init(&EXTI_InitStructure);
//------------设置 中断-------------------
NVIC_InitStructure.NVIC_IRQChannel = RTCAlarm_IRQn;//防拆
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = interrupt_en_or_dis;
NVIC_Init(&NVIC_InitStructure);
//-------------------------------------------
}
void RTC_SET_ALARM(u32 sec)
{
//DEBUG_COM_STREAM(“-闹钟-”,NULL);
RTC_SetAlarm(RTC_GetCounter()+sec);
//DEBUG_COM_STREAM(“-闹钟1-”,NULL);
RTC_WaitForLastTask();
//DEBUG_COM_STREAM(“-闹钟2-”,NULL);
RTC_ITConfig(RTC_FLAG_ALR,ENABLE);
}
void RTC_AWU_SET(void)
{
//启用PWR和BKP的时钟(from APB1)
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
//后备域解锁
PWR_BackupAccessCmd(ENABLE);
RTC_ITConfig(RTC_IT_SEC, DISABLE);
RTC_SET_ALARM(5);
//PWR_BackupAccessCmd(DISABLE);
RTC_EXTI_INITIAL(ENABLE);
}
void RTCAlarm_IRQHandler(void)
{
EXTI_ClearITPendingBit(EXTI_Line17);
//SYS.wake_id|=1《《17;
}
void RTC_IRQHandler(void)
{
if (RTC_GetITStatus(RTC_IT_SEC) != RESET)
{
RTC_ClearITPendingBit(RTC_IT_SEC);
RTC_WaitForLastTask();
//TIME_COUNT=RTC_GetCounter();
//RTC_WaitForLastTask();
}
if (RTC_GetITStatus(RTC_FLAG_ALR) != RESET)
{
RTC_ClearITPendingBit(RTC_FLAG_ALR);
RTC_WaitForLastTask();
//SYS.wake_id|=1《《1;
}
}
对于上述代码说明3点问题:
(1)为什么设置中断线17
STM32F10x有20条中断线,其中16条用于IO口中断使用,还有4条用于内部中断事件。EXTI17就是用于内部RTC闹钟唤醒中断事件时使用,所以初始化中除了打开RTC闹钟中断同时打开了EXTI17中断线。
(2)为什么RTC闹钟中断服务程序清除EXTI17中断标志位?
因为中断线17接到了RTC闹钟上,RTC闹钟中断后会触发中断线17产生中断事件,所以在RTC中断内清除标志位,这同时是RTC闹钟唤醒停止模式的原因。具体看下图手册描述
(3)唤醒后程序在哪执行?
通过实验得到当系统唤醒后程序是在原停止位置顺序向下执行。
PS:唤醒后时钟源默认切换到内部高速时钟(HSI)所以使用外部晶振的需要重新配置时钟系统
stm32单片机实现多个闹钟_STM32实现对RTC闹钟唤醒的设计相关推荐
- 81、基于STM32单片机智能台灯 PWM调光坐姿矫正 灯光控制定时台灯设计
毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.硬件框图 七.流程图 八.程序源码 九.资料包括 摘要 随着社会在不断进 ...
- 78、基于STM32单片机学习型搬运机器人四自由度机械臂机械手遥感控制设计
毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.程序源码 七.资料包括 摘要 在当今大规模制造业中,企业为提高生产效率, ...
- 单片机搭建环境烧录方法_万物互联-stm32单片机简介、烧录、编程及其项目环境搭建...
万物互联-stm32单片机简介.烧录.编程 前言:stm32单片机这里给出简单介绍,给不了解的朋友普及下硬件端的基本知识,叙述的较为简单,想深入研究的朋友可以去一些官方网站.论坛.博客汲取知识.最下端 ...
- 基于STM32单片机的温湿度检测报警器(数码管)(Proteus仿真+程序)
编号:27 基于STM32单片机的温湿度检测报警器(数码管) 功能描述: 本设计由STM32F103单片机最小系统+DHT11温湿度传感器+数码管显示模块+声光报警模块+独立按键组成. 1.主控制器是 ...
- 基于STM32单片机的出租车计价器
本设计是基于单片机的出租车计价器,主要实现以下功能: 时间显示,且可设置时间 收费标准显示功能以及乘车速度.公里数等信息显示功能 语音提示乘客"欢迎光临"."欢迎下次乘坐 ...
- 《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.9 TIM---输入捕获(脉冲频率测量)实验
写在前面-- <STM32单片机开发应用教程(HAL库版)-基于国信长天嵌入式竞赛实训平台(CT117E-M4)>第四章4.9 TIM-输入捕获(脉冲频率测量)实验,讲解TIM输入捕获的原 ...
- STM32单片机开发应用教程 (HAL库版) ---基于国信长天嵌入式竞赛实训平台(CT117E-M4)教程汇总 与第一章 硬件平台简介
写在前面-- 作为<STM32单片机开发应用教程(HAL库版)-基于国信长天嵌入式竞赛实训平台(CT117E-M4)>教程汇总,第一章将介绍国信长天嵌入式竞赛实训平台(CT117E-M4) ...
- 《STM32单片机开发应用教程(HAL库版)---基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第二章 软件安装与使用
写在前面-- 作为<STM32单片机开发应用教程(HAL库版)-基于国信长天嵌入式竞赛实训平台(CT117E-M4)>系列之第二章,本章节将介绍开发软件STM32CubeMX和KEIL5的 ...
- 《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.3 按键控制实验
写在前面-- <STM32单片机开发应用教程(HAL库版)-基于国信长天嵌入式竞赛实训平台(CT117E-M4)>第四章4.3 按键控制实验,讲述按键控制的编程方法 官方例程下载:http ...
最新文章
- 开源自动化机器学习框架
- ai字体素材网站_4个网站,涵盖几乎所有素材,字体、设计、图片各种资源管够...
- 【原创】RabbitMQ 之 TTL 详解(翻译)
- DM368开发 -- Bootloader 开发(转毕设)
- Swift--数组和字典(一)
- [LeetCode] Add Two Numbers
- c语言科学计数法输出1_e10,北航13年机试--十进制数字的科学计数法表示的C语言实现...
- 想在原有的基础上,再次添加一些阿里图标的进坑
- P2P网贷黎明前夕的黑夜---P2P是否要被封杀呢
- 计算机作业实验报告dw感想,Dreamweaver实验报告.doc
- 什么是IPFS - BlockChain Storage 区块链存储 (1)
- JavaScript if...else 语句
- 红外光电测速传感器电路设计
- maikr博客备份工具 3.0.0.0 详细介绍
- 安恒2020-四月春季战-reverse-sm
- 微信小程序----地理围栏实现员工防作弊地图打卡功能
- Mask R-CNN 训练自己的数据集—踩坑与填坑
- 第一章 概率论基本概念(a)
- require(): open_basedir restriction in effect. File(/www/wwwroot/wei/files/vendor/autoload.php)
- 数据库数据采集利器FlinkCDC