解决STM32 CubeMX中配置RTC每次上电就会重置的问题
自从有了Cube MX,配置STM32的外设就变得格外简单。不过这次差点踩坑,下载完程序后RTC自动就恢复到了我设置的初始值,重启之后现象依旧。
下面就以上问题简单分析一下代码。
/* RTC init function */
void MX_RTC_Init(void)
{
RTC_TimeTypeDef sTime = {0};
RTC_DateTypeDef sDate = {0};
/** Initialize RTC Only
*/
hrtc.Instance = RTC;
hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
hrtc.Init.AsynchPrediv = 127;
hrtc.Init.SynchPrediv = 255;
hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
if (HAL_RTC_Init(&hrtc) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN Check_RTC_BKUP */
/* USER CODE END Check_RTC_BKUP */
/** Initialize RTC and set the Time and Date
*/
sTime.Hours = 0x0;
sTime.Minutes = 0x0;
sTime.Seconds = 0x0;
sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sTime.StoreOperation = RTC_STOREOPERATION_RESET;
if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
{
Error_Handler();
}
sDate.WeekDay = RTC_WEEKDAY_MONDAY;
sDate.Month = RTC_MONTH_JANUARY;
sDate.Date = 0x1;
sDate.Year = 0x0;
if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
{
Error_Handler();
}
/** Enable the WakeUp
*/
if (HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 0, RTC_WAKEUPCLOCK_CK_SPRE_16BITS) != HAL_OK)
{
Error_Handler();
}
}
从注释和函数执行过就不难看出,每次上电都会将预设值写入RTC中。可问题在于:我虽然可以对这段代码进行修改,但是每当我使用Cube MX重新配置和生成工程后修改的内容就会被覆盖。那么有没有比较好的方法呢?
当然是有的,方法就是宏定义。
//我们可以通过宏定义把 这两个函数给"注释"掉。
HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD)
HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD)
//宏定义如下:
#define HAL_RTC_SetDate(a, b, c) HAL_OK
#define HAL_RTC_SetTime(a, b, c) HAL_OK
/**********原先的代码***********/
if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
{
Error_Handler();
}
/** Enable the WakeUp
*/
if (HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 0, RTC_WAKEUPCLOCK_CK_SPRE_16BITS) != HAL_OK)
{
Error_Handler();
}
/********那么在预处理阶段函数被替换掉之后就会变成:********/
if ( HAL_OK != HAL_OK)
{
Error_Handler();
}
if ( HAL_OK != HAL_OK)
{
Error_Handler();
}
为了方便调试,我在宏定义前加了条件:#ifndef __NOT_RESET_RTC_IN_INIT
并在mian.h中也加入宏定义:#define __NOT_RESET_RTC_IN_INIT

但是编译之后还会有两个警告
为了消除未使用的警告,可以在适当的地方加入:
/* USER CODE BEGIN Check_RTC_BKUP */
#ifdef __NOT_RESET_RTC_IN_INIT
UNUSED(sTime);
UNUSED(sDate);
#endif
/* USER CODE END Check_RTC_BKUP */
更改后的代码。
STM32F407开发板
解决STM32 CubeMX中配置RTC每次上电就会重置的问题的更多相关文章
- 【已解决】React中配置Sass引入.scss文件无效
React中配置Sass引入.scss文件无效 在react中使用sass时,引入.scss文件失效 尝试很多方法没法解决,最终找到解决方法,希望能帮助正在坑里挣扎的筒子~ 在node_modules ...
- 解决在eclipse中配置Tomcat时,出现"Cannot create a server using the selected type"的错误
比如说使用tomcat 这是因为你之前创建过一次,比如说tomcat6,你指定的目录是:D:/tomcat-6.0.3 后来因为某种原因你把tomcat删了,然后你又安装到了E:/tomcat-6.0 ...
- 不在JPA 的 persistence.xml 文件中配置Entity class的解决办法
在Spring 集成 Hibernate 的JPA方式中,需要在persistence配置文件中定义每一个实体类,这样非常地不方便,2种方法可以解决此问题: 这2种方式都可以实现不用在persiste ...
- IDED中配置SVN没有svn.exe解决办法
首先在idea中配置svn时
- 修改tnsnames.ora文件中配置内容中的连接别名后,连接超时解决办法
1.tnsnames.ora文件中配置内容中的连接别名:由upaydb修改为IP地址 2.连接超时 定位原因: PLSQL登录界面的数据库列表就是读的tnsname.ora中连接的别名,这个文件中连接 ...
- JPA 不在 persistence.xml 文件中配置每个Entity实体类的2种解决办法
在Spring 集成 Hibernate 的JPA方式中,需要在persistence配置文件中定义每一个实体类,这样非常地不方便,远哥目前找到了2种方法. 这2种方式都可以实现不用persist ...
- WampServer 在 httpd.conf 中配置多站点 (IP 配置法:不用每次修改 hosts 文件 + 域名配置法 )
因为要用 ThinkPHP 的当前最新版本 3.2.2,对应要求 PHP 的版本要高于 5.3.0,所以安装了 WampServer 2.2 ( Apache 2.2.21,PHP 5.3.10,My ...
- spring中配置quartz调用两次及项目日志log4j不能每天生成日志解决方法
在quartz中配置了一个方法运行时会连续调用两次,是因为加载两次,只需在tomcat的server.xml中修改配置 <Host name="www.xx.cn" appB ...
- vs2010中配置OpenGL以及针对64位系统所遇问题的解决办法
一.下面将对VS2010中配置OpenGL进行简单介绍. 学习OpenGL前的准备工作 第一步,选择一个编译环境 现在Windows系统的主流编译环境有Visual Studio,Broland C+ ...
- IDEA中解决Edit Configurations中没有tomcat Server选项的问题(附配置Tomcat)
1.点击File-->settings(Ctrl+Alt+S) 2.在弹出的窗口中的搜索框中输入appliation,然后选择下方的Plugins,再然后勾选左侧Installed中的如图所示的 ...
随机推荐
- (系列九)使用Vue3+Element Plus创建前端框架(附源码)
说明 该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发). 该系统文章,我会尽量说的非常详细,做到不管新手.老手都能看懂. 说明:OverallAuth2 ...
- .NET 实现的零部件离散型 MES+WMS 系统
前言 随着制造业的不断发展,企业对于生产效率和管理水平的要求越来越高. EasyMES 是一款基于 .NET 6 开发的零部件离散型 MES(Manufacturing Execution Syste ...
- Chrome 130 版本新特性& Chrome 130 版本发行说明
Chrome 130 版本新特性& Chrome 130 版本发行说明 一.Chrome 130 版本浏览器更新 1. 新的桌面提示 Chrome 130 引入了一种新的 Toast 样式,用 ...
- 解决浏览器SSL缓存,自动将http跳转至https导致无法访问的问题
PHP交流群 656679284 为PHP广大爱好者提供技术交流,有问必答,相互学习相互进步! 这里汇总一下几大常见浏览器 HSTS 的关闭方法. Safari 浏览器 完全关闭 Safari 删 ...
- 【FAQ】HarmonyOS SDK 闭源开放能力 —Vision Kit
1.问题描述: 人脸活体检测页面会有声音提示,如何控制声音开关? 解决方案: 活体检测暂无声音控制开关,但可通过其他能力控制系统音量,从而控制音量. 活体检测页面固定音频流设置的是8(无障碍),获取的 ...
- Node.js 构建命令行工具:实现 ls 命令的 -a 和 -l 选项
在日常的前端开发中,我们常常借助各种基于 Node.js 的脚手架工具来加速项目搭建和维护,比如 create-react-app 可以一键初始化一个 React 项目,eslint 则帮助我们保持代 ...
- .NetCore+Mysql+Vue+MVC+SqlSugar开源WMS仓库管理系统
今天给大家推荐一个开源免费WMS仓库管理系统.仓库管理系统,可以有效控制并跟踪仓库业务的物流和成本管理全过程,实现或完善企业的仓储信息管理. 项目功能列表 基础数据 系统设置 物料管理 客户管理 供应 ...
- pycharm生成的allure测试报告如何查看本地的index.html文件?
pycharm生成的allure测试报告应该是通过服务启动查看,但是如果把这个文件保存到本地查看,直接打开页面无内容 可以使用allure-combine工具实现本地正常打开 `from allure ...
- ARC121E Directed Tree
ARC121E Directed Tree 有意思的容斥加树 dp. 思路 \(a_i\) 可以是除去 \(i\) 祖先之外的所有点,考虑 \(a_i\) 的逆排列. 每一个 \(i\) 在正排列里都 ...
- rabbitmq消息中间件的初步探索
在上次学xattr的时候用它简单实现一个中间件,我去了解了一下rabbitmq这个消息中间件,感觉理论上还是挺好用的,给一般并发量的系统用足够了. 首先安装这个服务. sudo apt search ...