STM32G431RBT6 定时器
时间: 2025-02-15 12:38:54 浏览: 128
### STM32G431RBT6 微控制器定时器使用方法
#### SysTick Timer 配置
对于SysTick定时器,在STM32G431RBT6中的默认时钟源为HCLK,即APB总线的频率。如果当前系统的AHB/APB总线运行于170 MHz,则意味着每秒钟可以发生170,000,000次计数值更新操作[^1]。
为了设置SysTick定时器触发一次中断的时间间隔T(秒),可以通过下面公式计算重装载值Reload:
\[ \text{Reload} = T * f_{\text{CPU}} - 1 \]
其中\(f_{\text{CPU}}\)代表处理器核心的工作频率(本案例中为170 MHz)。
```c
// 设置SysTick定时器以实现特定时间延迟
void systick_init(uint32_t ticks){
if (ticks > 0){
SysTick->LOAD = ticks-1;
SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
SysTick->CTRL = 0x5; /* Enable SysTick IRQ and SysTick Timer */
}
}
```
#### TIM 定时器初始化与启动
针对通用定时器如TIM2,完成基本参数设定之后并不会自动进入运作状态;因此需要调用`HAL_TIM_Base_Start_IT()`接口开启其时基功能并允许相应的中断事件处理程序被执行[^3]。
当涉及到PWM输出或者其他形式的周期性脉冲序列生成时,“CCRx”寄存器扮演着至关重要的角色——它决定了比较匹配时刻以及由此产生的动作响应模式,比如翻转IO电平或是触发DMA传输等行为[^2]。
```c
// 初始化TIM2定时器配置结构体
static void MX_TIM2_Init(void)
{
__HAL_RCC_TIM2_CLK_ENABLE();
htim2.Instance = TIM2;
htim2.Init.Prescaler = 84 - 1;
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 999;
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
{
Error_Handler();
}
// 启动定时器及其关联的中断服务例程
HAL_TIM_Base_Start_IT(&htim2);
}
// PWM通道配置示例
__weak void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(htim->Instance==TIM2){
/* TIM2 clock enable */
__HAL_RCC_TIM2_CLK_ENABLE();
/**TIM2 GPIO Configuration
PA0-WKUP ------> TIM2_CH1
*/
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// ...其他必要的硬件资源分配...
// 清除可能存在的标志位错误
__HAL_TIM_CLEAR_FLAG(&htim2, TIM_SR_CC1IF | TIM_SR_UIF);
}
}
```
阅读全文
相关推荐


















