工程中用到低功耗的控制,本来想使用待机模式,后来发现待机后所有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闹钟唤醒的设计相关推荐

  1. 81、基于STM32单片机智能台灯 PWM调光坐姿矫正 灯光控制定时台灯设计

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.硬件框图 七.流程图 八.程序源码 九.资料包括 摘要 随着社会在不断进 ...

  2. 78、基于STM32单片机学习型搬运机器人四自由度机械臂机械手遥感控制设计

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.程序源码 七.资料包括 摘要 在当今大规模制造业中,企业为提高生产效率, ...

  3. 单片机搭建环境烧录方法_万物互联-stm32单片机简介、烧录、编程及其项目环境搭建...

    万物互联-stm32单片机简介.烧录.编程 前言:stm32单片机这里给出简单介绍,给不了解的朋友普及下硬件端的基本知识,叙述的较为简单,想深入研究的朋友可以去一些官方网站.论坛.博客汲取知识.最下端 ...

  4. 基于STM32单片机的温湿度检测报警器(数码管)(Proteus仿真+程序)

    编号:27 基于STM32单片机的温湿度检测报警器(数码管) 功能描述: 本设计由STM32F103单片机最小系统+DHT11温湿度传感器+数码管显示模块+声光报警模块+独立按键组成. 1.主控制器是 ...

  5. 基于STM32单片机的出租车计价器

    本设计是基于单片机的出租车计价器,主要实现以下功能: 时间显示,且可设置时间 收费标准显示功能以及乘车速度.公里数等信息显示功能 语音提示乘客"欢迎光临"."欢迎下次乘坐 ...

  6. 《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.9 TIM---输入捕获(脉冲频率测量)实验

    写在前面-- <STM32单片机开发应用教程(HAL库版)-基于国信长天嵌入式竞赛实训平台(CT117E-M4)>第四章4.9 TIM-输入捕获(脉冲频率测量)实验,讲解TIM输入捕获的原 ...

  7. STM32单片机开发应用教程 (HAL库版) ---基于国信长天嵌入式竞赛实训平台(CT117E-M4)教程汇总 与第一章 硬件平台简介

    写在前面-- 作为<STM32单片机开发应用教程(HAL库版)-基于国信长天嵌入式竞赛实训平台(CT117E-M4)>教程汇总,第一章将介绍国信长天嵌入式竞赛实训平台(CT117E-M4) ...

  8. 《STM32单片机开发应用教程(HAL库版)---基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第二章 软件安装与使用

    写在前面-- 作为<STM32单片机开发应用教程(HAL库版)-基于国信长天嵌入式竞赛实训平台(CT117E-M4)>系列之第二章,本章节将介绍开发软件STM32CubeMX和KEIL5的 ...

  9. 《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.3 按键控制实验

    写在前面-- <STM32单片机开发应用教程(HAL库版)-基于国信长天嵌入式竞赛实训平台(CT117E-M4)>第四章4.3 按键控制实验,讲述按键控制的编程方法 官方例程下载:http ...

最新文章

  1. 开源自动化机器学习框架
  2. ai字体素材网站_4个网站,涵盖几乎所有素材,字体、设计、图片各种资源管够...
  3. 【原创】RabbitMQ 之 TTL 详解(翻译)
  4. DM368开发 -- Bootloader 开发(转毕设)
  5. Swift--数组和字典(一)
  6. [LeetCode] Add Two Numbers
  7. c语言科学计数法输出1_e10,北航13年机试--十进制数字的科学计数法表示的C语言实现...
  8. 想在原有的基础上,再次添加一些阿里图标的进坑
  9. P2P网贷黎明前夕的黑夜---P2P是否要被封杀呢
  10. 计算机作业实验报告dw感想,Dreamweaver实验报告.doc
  11. 什么是IPFS - BlockChain Storage 区块链存储 (1)
  12. JavaScript if...else 语句
  13. 红外光电测速传感器电路设计
  14. maikr博客备份工具 3.0.0.0 详细介绍
  15. 安恒2020-四月春季战-reverse-sm
  16. 微信小程序----地理围栏实现员工防作弊地图打卡功能
  17. Mask R-CNN 训练自己的数据集—踩坑与填坑
  18. 第一章 概率论基本概念(a)
  19. require(): open_basedir restriction in effect. File(/www/wwwroot/wei/files/vendor/autoload.php)
  20. 数据库数据采集利器FlinkCDC

热门文章

  1. K8S实战基础篇:一文带你深入了解K8S实战部署SpringBoot项目
  2. Android 时间转换
  3. 因为喜欢德国的严谨,所以我主动找到SAP上云
  4. 郑莉C++教程速成笔记——基础语法
  5. 2022国赛D题气象报文信息卫星通信传输参考代码及思路
  6. PYTHON SELENIUM的学习笔记
  7. TF-IDF算法:用 Python 提炼财经新闻
  8. 关于openlayers图层的放大缩小以及中心坐标
  9. matlab验潮站,[转载]matlab批量从NOAA网站下载验潮站数据
  10. Verilog HDL错误总结