STM32基于标准库如何查看时钟主频,100%简单

基于原有的工程写入两行代码,见下图

RCC_ClocksTypeDef  get_rcc_clock;

RCC_GetClocksFreq(&get_rcc_clock);

进入我们的仿真加入断点,然后在watch1观察变量值数据,然后在计算器计算就能得出,如上图。

但是这样看的PAB1上和PAB2时钟上不一样。

### STM32定时器使用标准库配置时钟频率的方法 在STM32中,使用标准库配置定时器的时钟频率涉及多个步骤。首先需要明确的是,定时器的时钟来源于RCC模块提供的TIMxCLK,并且通过预分频器(PSC)和自动重装载寄存器(ARR)来控制输出频率[^1]。以下是一个完整的代码示例,展示如何使用STM32标准库配置定时器以实现指定的输出频率。 ```c #include "stm32f4xx.h" void TIM6_Init(uint32_t frequency) { // 使能TIM6时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); // 配置定时器参数 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; uint32_t PrescalerValue = (uint32_t)((SystemCoreClock / 2) / frequency) - 1; TIM_TimeBaseStructure.TIM_Period = 999; // 自动重装载值 TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue; // 预分频器值 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 时钟分割 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数模式 TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure); // 使能TIM6中断 TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE); // 使能TIM6 TIM_Cmd(TIM6, ENABLE); } // 中断服务函数 void TIM6_DAC_IRQHandler(void) { if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET) { // 清除中断标志 TIM_ClearITPendingBit(TIM6, TIM_IT_Update); // 在这里添加用户代码 } } ``` #### 代码说明 - **RCC_APB1PeriphClockCmd**:用于使能TIM6的时钟。由于TIM6位于APB1总线上,因此需要使用`RCC_APB1PeriphClockCmd`函数[^1]。 - **PrescalerValue**:计算预分频器值,公式为 `(SystemCoreClock / 2) / frequency - 1`。这里的`SystemCoreClock`是系统主频,通常为168MHz。 - **TIM_TimeBaseStructure**:定义定时器的基本参数,包括周期、预分频器、时钟分割以及计数模式。 - **TIM_ITConfig**:配置定时器中断,当计数器达到自动重装载值时触发中断。 - **TIM_Cmd**:启动定时器。 #### 注意事项 - 确保系统的时钟配置正确,特别是主频和APB1总线的分频因子。 - 如果需要更高的精度或不同的计数模式,可以调整`TIM_TimeBaseStructure`中的参数。 - 定时器的中断向量表必须正确配置,确保`TIM6_DAC_IRQHandler`被正确映射。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值