[APM32F0] 极海国产芯|基于APM32F030实现时钟安全机制

[复制链接]
 楼主| ainosukli 发表于 2022-11-3 21:35 | 显示全部楼层 |阅读模式
#申请原创# #有奖活动#
前言
对于MCU来说,时钟是单片机能够稳定执行程序的关键。通常,单片机使用的时钟源为外部晶振。如果在一些重要的场合中应用时,单片机的时钟收到外界的干扰而导致时钟失效,从而使得单片机无法正常运行程序,系统卡死,可能会造成损失。如果单片机使用在安全生产场所,还有可能造成人身事故。因此,对于时钟的安全管理对于单片机来说至关重要。正好,在我刚刚获得的APM32F030Mini板中,有相关的功能存在。因此,下面进行探讨。
1 时钟安全系统(CSS)
时钟安全系统顾名思义就是管理时钟使得MCU能够运行在安全状态。时钟安全系统的开启在RCM模块中。选择开启时钟安全系统后,外部高速时钟使能后会同时使能时钟安全系统,随后时钟安全系统会一直监视外部高速时钟的状态,如果外部高速时钟受外外部干扰而失效时,会关闭外部高速时钟,同时关闭时钟环并将内部高速时钟作为系统时钟。我们在参考书册的时钟树中也能找到它的存在。
CSS.png


虽然时钟安全系统可以通过选择内部时钟源作为系统时钟来解决外部时钟突然失效的问题,但是内部时钟对比外部时钟来说不稳定,不能一直当作单片机的系统时钟。因此,我们需要重新开启外部时钟。时钟安全系统的标志位会挂起NMI中断,因此我们可以在NMI中断里面对时钟进行重新配置。

2 程序编写 上面可以知道,当我们开启CSS,外部高速时钟出现故障,会发生时钟安全中断,同时会不断执行NMI中断程序,直到时钟安全中断被清除。我们可以在NMI中断程序中进行外部时钟的重新配置,并输出时钟失效信息。以下的代码是基于APM32F030标准库进行操作的。
首先我们需要开启时钟安全系统:
  1.     RCM_EnableCCS();
复制代码
接着就是编写NMI中断程序。CSS在关闭HSE的同时也会将PLL关闭。如果我们需要串口打印信息的话则需要重新选择串口的时钟源,将其时钟源选为CSS自动打开的内部高速时钟。同时因为串口的波特率计算是根据当前时钟的,因此我们还需要进行串口的重新配置。经过上面两步操作就可以打印信息了。接着就是重新开启外部高速时钟。
  1. void NMI_Handler(void)
  2. {
  3.     /* 选择串口时钟源 */
  4.     RCM_ConfigUSARTCLK(RCM_USART1CLK_HSI);
  5.     /* 初始化串口,打印信息 */
  6.     USART_Config(&usartstruct);

  7.     printf("打印信息");

  8.     /* 外部时钟重新开启 */
  9.     /*

  10.     */
  11.    /* 清除时钟安全中断标志 */
  12.    RCM_ClearIntFlag(RCC_IT_CSS);
  13. }
复制代码
需要主要的是,时钟安全中断的标志位会一直触发NMI中断。如果不清除标志位的话,程序将一直执行NMI中断的代码。因此,在NMI中断中,需要进行时钟安全中断的标志位清除。
最后将程序烧入到APM32F030开发板中,当外部晶振失效时,程序顺利执行,并打印出信息。

以上就是时钟安全中断的相关知识,欢迎大家一起交流讨论。







eefas 发表于 2022-12-5 20:57 | 显示全部楼层
借鉴了电脑运行程序的思路吗?              
alvpeg 发表于 2022-12-5 21:46 | 显示全部楼层
这种方案可靠的吗?              

评论

就单片机一个功能  发表于 2023-3-14 14:10
olivem55arlowe 发表于 2022-12-5 22:27 | 显示全部楼层
直接复位重新运行不可以的吗?              
sesefadou 发表于 2022-12-6 12:46 | 显示全部楼层
是不是初始化的模块存在问题呢。              
jtracy3 发表于 2022-12-6 15:29 | 显示全部楼层
这个都进入错误了,还能运行的吗              

评论

是在错误中断里面运行  发表于 2023-3-14 14:11
Undshing 发表于 2023-1-3 15:43 | 显示全部楼层
方案可靠吗?
maudlu 发表于 2023-2-4 17:00 | 显示全部楼层
如果代码配置有问题,会出现什么现象呢?
rosemoore 发表于 2023-2-4 20:25 | 显示全部楼层
时钟安全机制是什么机制?              
tabmone 发表于 2023-2-8 12:59 | 显示全部楼层
如果时钟有问题,代码可判断的吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部