目前硬件核心板存在一个问题,外部32.768KHz的晶振经常无法起振,硬件工程师将晶振两端的1MΩ电阻去掉,电容从10pF换成6pF后大部分能起振了,个别的还是不行。目前是外部LSE无法起振的情况下直接死机,为了让上位机知道核心板是否在正常工作,要保证外部晶振无法起振的情况下切换到内部晶振,系统其他功能还能正常工作。
先配置下外部时钟:
1、RCC选择外部晶振
2、Timers的RTC栏里,勾选 Activate两个,RTC OUT 选择 Disable

3、参数设置,日期格式采用二进制方式:Binary data format,其他日历时间自行设置

4、时钟树配置:选择外部晶振:LSE
通过以上操作就完成了RTC的配置。
在modbus校时指令和应用程序中对时间和日期进行更新,两个应用中都是对时间和日期的写操作,因此需要一个互斥量保持数据完整性。
modbus校时线程代码如下:
时间更新线程如下:
解决最后的问题。仿真的时候可以看到,外部晶振没有起振的情况下死机而无法正常运行,为了解决此问题,要修改超时的库函数,并且切换到LSI。
void SystemClock_Config(void)改为:
库函数 HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) 也要做修改,修改如下:其中超时使用 RCC_Delay(1); // 72MHz,因为使用sysclick修改的代码量会很大。
修改的程序测试,上电等待5s左右程序开始正常运行,关闭了LSE,切换到了内部LSI,后期可以补充将RTC初始化失败的标记传到上位机。
作者:星元的天空
到此这篇时钟配置代码(时钟配置命令)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/57830.html