本帖最后由 Alden 于 2023-7-10 16:09 编辑
#申请原创# #技术资源#
CSS时钟安全系统是MCU中防止外部晶振失效导致MCU无法正常工作的故障处理功能。
能够自动关闭外部高速晶振,并且将系统时钟切换到内部高速时钟HSI。保障芯片继续运行,并且可以软件再配置系统时钟。
接下来使用APM32F103ZE开发板和APM32的SDK来测试下CSS的功能。
根据用户手册,CSS的开启只需要使能时钟控制寄存器RCM_CTRL的19bit CSSEN就能开启CSS功能。
而代码就只需要简单的一行: RCM_EnableCSS();
同时在NMI_Handler中断服务函数中加上清CSS中断的操作,即可实现基本的CSS的功能。
int main(void)
{
GPIO_Config_T GPIO_ConfigStruct;
RCM_EnableCSS();
APM_MINI_LEDInit(LED2);
RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOA);
GPIO_ConfigStruct.pin = GPIO_PIN_8;
GPIO_ConfigStruct.mode = GPIO_MODE_AF_PP;
GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz;
GPIO_Config(GPIOA, &GPIO_ConfigStruct);
RCM_ConfigMCO(RCM_MCOCLK_SYSCLK);
while(1)
{
APM_MINI_LEDToggle(LED2);
Delay();
}
}
void NMI_Handler(void)
{
if (RCM_ReadIntFlag(RCM_INT_CSS) != RESET)
{
RCM_ClearIntFlag(RCM_INT_CSS);
}
}
使用镊子短接外部高速晶振可以看到,之前72M主频下闪灯比较快,短接后主频切换到内部晶振8M的主频,闪灯频率明显变慢。
但是松开镊子后频率还是慢的,没有恢复。
这是因为触发CSS后PLL和HSE都被关闭,需要软件开启才能重新恢复。
想要系统时钟在短接结束后恢复原有的主频配置可以等待HSE恢复起振后重新配置系统时钟。
那要怎么知道HSE什么时候恢复起振了呢?
查看用户手册发现,HSE恢复起振也是可以产生中断的。
在时钟中断寄存器(RCM_INT)中会产生HSECLK 就绪中断标志。由此可以在HSE恢复后重新配置时钟。
配置代码如下:
int main(void)
{
GPIO_Config_T GPIO_ConfigStruct;
SetSysClock();
RCM_EnableCSS();
NVIC_ConfigPriorityGroup(NVIC_PRIORITY_GROUP_4);
NVIC_EnableIRQRequest(RCM_IRQn, 0, 1);
APM_MINI_LEDInit(LED2);
RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOA);
GPIO_ConfigStruct.pin = GPIO_PIN_8;
GPIO_ConfigStruct.mode = GPIO_MODE_AF_PP;
GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz;
GPIO_Config(GPIOA, &GPIO_ConfigStruct);
RCM_ConfigMCO(RCM_MCOCLK_SYSCLK);
while(1)
{
APM_MINI_LEDToggle(LED2);
Delay();
}
}
void NMI_Handler(void)
{
if (RCM_ReadIntFlag(RCM_INT_CSS) != RESET)
{
RCM_ConfigHSE(RCM_HSE_OPEN);
RCM_EnableInterrupt(RCM_INT_HSERDY);
RCM_ClearIntFlag(RCM_INT_CSS);
}
}
void RCM_IRQHandler(void)
{
if (RCM_ReadIntFlag(RCM_INT_HSERDY) != RESET)
{
SetSysClock();
RCM_EnableCSS();
RCM_ClearIntFlag(RCM_INT_HSERDY);
}
}
在短接外部晶振后,CSS时钟安全系统启动,系统时钟切换到HSICLK,进入NMI_Handler开启HSE使能和HSE就绪中断使能,
HSE恢复起振后触发HSE就绪中断,进入RCM_IRQHandler重新初始化时钟,再次开启CSS时钟安全系统。
实测也可以看到短接外部高速晶振后LED闪烁频率变慢,不短接后LED闪烁频率恢复正常,往复多少都可以正常响应。
由此可以看出CSS时钟安全系统在HSE容易受到干扰的场景可以有效的维持芯片的运行,并能够配置恢复正常的时钟配置,提高系统的稳定性。
|