你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32L431RC Standby和RTC中断唤醒经验分享

[复制链接]
攻城狮Melo 发布时间:2023-3-21 18:44
一、Standby模式是什么?
Standby模式是指进入待机模式,系统的功耗比立即睡眠模式会达到一个新低的情况。(由于我的是开发板实测电流会降很多,但是还是在mA以上)

二、代码使用步骤
1.使用STM32CUBEMX创建工程
挑选MCU:

f4a209e560c6486799b6bdb083c4b447.png

配置时钟:

4a0a176a3db641dbafc204a3d9bffa8e.png

使能并配置RTC时钟:

b5f54d9ee0ab419088f29461b4d609cf.png
646822957cb54b8eab3b01147ec47218.png

使能并配置RTC时钟:

5ba19984f0874bb3afcaf6d884e8948c.png

abf351801a1b4922857cf765e5145d90.png

这里是5s唤醒一次

e3fbeb816e6c478cb262f79a2566f479.png


使能中断
配置显示串口:

818c0943e43a4181b10c49d21b1e4628.png


配置串口无中断

304763e805ec471292ff0bd4879b7fb6.png

配置下载口:



111e52739da74b16819ac05cff75ebe6.png


配置下载引脚,具体你要选那个视情况而定
配置工程编译环境:

6983153a56894ec2bffaa7ccf152740a.png


2.代码分析
主函数代码如下:
  1. int main(void)
  2. {
  3.   /* 方便观察的两行log */
  4.   uint8_t temp[30]="***Enter STANDBY Mode***\r\n";
  5.   uint8_t rtc_temp[40]="******RTC SET OK******\r\n";
  6.   
  7.   HAL_Init();
  8.   SystemClock_Config();
  9.   MX_GPIO_Init();
  10.   
  11.   /* RTC的初始化 后面说 */
  12.   MX_RTC_Init();
  13.   MX_USART1_UART_Init();
  14.   printf("----STM32L431RCT6 STANDBY TEST----\r\n");
  15.   RTC_TimeShow();

  16.   while (1)
  17.   {                       
  18.         HAL_Delay(500);
  19.         /* 判断按键是否按下,按下后发送两条log,设置唤醒时间
  20.     * 进入STANDBYMode
  21.     */
  22.         if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,GPIO_PIN_2) == RESET)
  23.         {
  24.           HAL_UART_Transmit(&huart1,rtc_temp,sizeof(rtc_temp),2);
  25.           HAL_UART_Transmit(&huart1,temp,sizeof(temp),2);
  26.           /* 这句话尤为重要,因为你创建工程的时候这句话系统不会写出来,自己要写*/
  27.           HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 5, RTC_WAKEUPCLOCK_CK_SPRE_16BITS);
  28.           HAL_PWR_EnterSTANDBYMode();        
  29.                        
  30.         }          
  31.   }
  32. }
复制代码
  1. void RTC_TimeShow(void)
  2. {
  3.         RTC_DateTypeDef getSdate;
  4.         RTC_TimeTypeDef getTime;
  5.     /*日历显示时间用的,没有仔细研究*/
  6.         /* Get the RTC current Date */
  7.         HAL_RTC_GetDate(&hrtc, &getSdate, RTC_FORMAT_BIN);
  8.         /* Get the RTC current Time */
  9.         HAL_RTC_GetTime(&hrtc, &getTime, RTC_FORMAT_BIN);
  10.        
  11.        
  12.         /* Display time Format : Year:Month:Date:WeekDay */
  13.         printf("%02d-%02d-%02d ",getSdate.Year, getSdate.Month, getSdate.Date);
  14. //        printf("\t\t");       
  15.         /* Display time Format : hh:mm:ss */
  16.         printf("%02d:%02d:%02d",getTime.Hours, getTime.Minutes, getTime.Seconds);       
  17.         printf("\r\n");       
  18. }
复制代码

3.演示结果
上电正常现象

e5e00a414c9b4475a77554b78ca8fc6e.png

按下进入待机按键,5s出来

2218de33f5594b94b864f17eab310ebc.png

5s后CPU唤醒,程序重新执行

8f23780aa894491a87b0cbecd584dea4.png


总结
本文简单的写了关于待机模式的代码,这是HAL库的版本。标准库版本可以网上搜索。文章并没有详述待机模式的理论还得读者自己查找文献研究。有错误可以留言指出。
————————————————
版权声明:笨熊笨笨笨
如有侵权请联系删除



2ffc3b1ae48041ca85404202043aeb41.png
收藏 评论0 发布时间:2023-3-21 18:44

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版