基于stm32f103c8t6标准库编写一个TIM初始化代码
时间: 2023-08-31 07:12:41 浏览: 51
以下是基于STM32F103C8T6标准库编写的TIM初始化代码,以TIM2为例:
```c
#include "stm32f10x.h"
void TIM2_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
NVIC_InitTypeDef NVIC_InitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_TimeBaseInitStruct.TIM_Prescaler = 71; //定时器分频系数,定时器时钟为72MHz/(71+1)=1MHz
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; //计数器计数模式为向上计数
TIM_TimeBaseInitStruct.TIM_Period = 999; // 定时器周期为1000us,即1ms
TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; //时钟分割
TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0; //重复计数器的值
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct);
NVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn; //定时器2中断
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1; //抢占优先级为1
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1; //子优先级为1
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; //使能定时器2中断
NVIC_Init(&NVIC_InitStruct);
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //开启更新中断
TIM_Cmd(TIM2, ENABLE); //开启定时器2
}
```
在此代码中,我们使用了 STM32F10x 标准库中的 TIM_TimeBaseInitTypeDef 和 NVIC_InitTypeDef 结构体,以及相应的初始化函数,包括 RCC_APB1PeriphClockCmd()、TIM_TimeBaseInit()、NVIC_Init()、TIM_ITConfig() 和 TIM_Cmd()。
此代码中,我们将 TIM2 的时钟分频系数设置为 71,即定时器时钟为 72MHz/(71+1)=1MHz,时间基准单位为 1us,因此我们将 TIM2 的周期设置为 1000us,即 1ms。我们还开启了更新中断,以及定时器2中断,并设置抢占优先级和子优先级为1。
以上是基于STM32F103C8T6标准库编写的TIM初始化代码,如有需要请参考!