0
收藏
微博
微信
复制链接

​ 不为人知的STM32单片机时钟源冷知识

2025-06-18 09:43
672

在STM32单片机里,时钟系统是其核心性能命脉,但许多工程师对此仅停留在基础配置层面,因此本文将揭秘五个不为人知的时钟源技巧,以供学习。

1.png

1、DWT计数器

触发条件:通过Cortex-M内核的DWT(Data Watchpoint and Trace)模块,无需占用硬件定时器即可实现微秒级延时。

操作要点:

启用DEMCR寄存器的TRCENA位(位24)激活调试模块。

清零CYCCNT寄存器后,使能DWT_CTRL的CYCCNTENA位(位0)。

#define DWT_CR (*(volatile uint32_t*)0xE0001000)  

#define DWT_CYCCNT (*(volatile uint32_t*)0xE0001004)  

void DWT_Init() {  

    CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;  

    DWT_CYCCNT = 0;  

    DWT_CR |= DWT_CTRL_CYCCNTENA_Msk;  

}

2、HSE故障熔断机制

容灾逻辑:当HSE晶振失效时,系统自动切换至HSI,并触发NMI不可屏蔽中断。

配置陷阱:需在中断服务程序清除CSS标志,否则会陷入死循环:

void NMI_Handler(void) {  

    if (RCC->CIR & RCC_CIR_CSSF) {  

        RCC->CIR |= RCC_CIR_CSSC; // 清除CSS中断标志  

        RCC->CFGR &= ~RCC_CFGR_SW; // 强制切换至HSI  

    }  

}

3、PLL倍频系数临界点

倍频极限:STM32F1系列PLL最大输入频率为8MHz,若HSE超过此值需先分频。

典型案例:使用12MHz晶振时,需配置PLLXTPRE分频器(RCC_CFGR寄存器位17)将HSE/2后再倍频。

4、动态时钟树调频

功耗优化:通过修改AHB/APB分频器实时调整外设时钟:

RCC->CFGR |= RCC_CFGR_HPRE_DIV1; // AHB不分频(72MHz)  

RCC->CFGR |= RCC_CFGR_PPRE1_DIV2; // APB1分频为36MHz

适用场景:低功耗模式下关闭APB1外设时钟,唤醒后通过修改分频比快速恢复性能。

5、LSI校准

精度提升:利用TIM21捕获外部精准时钟(如4096Hz),反推HSI误差值:

void Calibrate_HSI() {  

    uint32_t target = SystemCoreClock / 1024;  

    uint32_t measured = TIM21->CCR1;  

    RCC->CR |= (target - measured) << 3; // 调整HSICAL校准位  

}

效果:实测校准后HSI误差从±5%收窄至±0.5%。


本文凡亿教育原创文章,转载请注明来源!

登录后查看更多
0
评论 0
收藏
侵权举报
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。

热门评论0

相关文章

凡亿助教-小燕

专注电子设计,好文分享

开班信息