32定时器配置顺序基于标准库

1 开启内部时钟

2 选择时基单元的时钟源

3 配置时基单元

4 配置中断输出控制

5 配置NVIC,打开定时器中断通道,选择优先级

6 运行控制

7 写定时器中断服务函数

用到的库函数

时基单元

void TIM_TimeBaseInit(TIM_TypeDef*TIMx,TIM_TimeBaseInitTypeDef*TIM_TimeBaseInitStruct);

时基单元初始化

参数1 选择某个定时器

参数2 配置时基单元的参数(结构体)

void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);

把结构图=体变量赋一个默认值

运行控制

void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);

使能计数器

参数1 选择定时器

参数2 选择使能还是失能

中断输出控制

void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);

使能中断输出信号  =对应中断输出控制

参数1 选择定时器

参数2 需要配置那个中断输出

参数3 选着使能还是失能

时钟源选择

void TIM_InternalClockConfig(TIM_TypeDef* TIMx);

选择内部时钟

参数1 选择定时器

void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);

选择ITRX其他定时器的时钟

参数1 选择要配置的定时器

参数2 选择要接入那个定时器

void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,uint16_t TIM_ICPolarity, uint16_t ICFilter);

选择TIX捕获通道时钟

参数1 : 同上

参数2 :选择TIX具体那个引脚

参数3 :输入的极性

参数4 : 滤波器

void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,  uint16_t ExtTRGFilter);

选择ETR通过外部时钟模式1输入的时钟

参数1 外部触发预分频器

参数2:输入极性

参数3 滤波器

void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, 
                             uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);

功能和上一个差不多

选择ETR通过外部时钟模式2输入的时钟

参数和上面相同

void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);

用来单独配置ETR引脚的预分频器,极性,滤波器参数的

void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter);

给计数器写一个值

参数1 选择计数器

参数2 写入的值

void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload);

给自动重装器写一个值

参数1 选择计数器

参数2 写入的值

uint16_t TIM_GetCounter(TIM_TypeDef* TIMx);

获取当前计数器的值

参数1 选择计数器

uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx);

获取当前计数器预分频的值

参数1 选择计数器

获取标志位和清除标志位

FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);

void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);

ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);

void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是使用STM32标准库进行stm32高级定时器TIM1的定时中断配置代码示例: ``` // 定时器配置 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_Period = 999; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); // 定时中断配置 NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_TIM10_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE); TIM_Cmd(TIM1, ENABLE); // 中断处理函数 void TIM1_UP_TIM10_IRQHandler(void) { if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM1, TIM_IT_Update); // 定时器中断处理代码 } } ``` 这个示例代码中,我们使用了STM32标准库进行定时器配置和定时中断配置。其中,`TIM_TimeBaseStructure`是一个`TIM_TimeBaseInitTypeDef`结构体,用于存储定时器的相关配置信息。`TIM_OCInitStructure`是一个`TIM_OCInitTypeDef`结构体,用于存储定时器输出比较(PWM)的相关配置信息。 在定时中断配置部分,我们使用了标准库提供的函数`NVIC_Init()`来配置定时器的中断优先级和使能定时中断。同时,我们也使用了标准库提供的函数`TIM_ITConfig()`来使能定时中断,并使用`TIM_Cmd()`函数启动定时器。 在中断处理函数`TIM1_UP_TIM10_IRQHandler()`中,我们使用了标准库提供的函数`TIM_GetITStatus()`和`TIM_ClearITPendingBit()`来处理定时器中断,并编写定时器中断处理代码。 需要注意的是,这个示例代码中的定时器时钟源为APB2总线,如果需要使用其他时钟源或者其他定时器,请根据具体情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值