请选择 进入手机版 | 继续访问电脑版

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32F0系列开发之定时器的使用

[复制链接]
STMCU小助手 发布时间:2021-11-25 15:00
以下源码以定时器3为例,其他可以以此类推

.c文件
  1. #include "Time.h"

  2. void TIM3_Int_Init(uint32_t time_us)
  3. {
  4.         TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  5.         NVIC_InitTypeDef NVIC_InitStructure;

  6.         unsigned char prescaler = 1;
  7.         unsigned char clkDiv = 1;//根据“TIM_ClockDivision”的分频比来定
  8.         unsigned long period = time_us*(SystemCoreClock/1000000) / (prescaler * clkDiv);
  9.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

  10.         TIM_TimeBaseStructure.TIM_Period = period;
  11.         TIM_TimeBaseStructure.TIM_Prescaler = prescaler - 1;        //时钟再分频,会影响TIM_Period的效果
  12.         TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;        //时钟分频,会影响PWM的计数个数
  13.         TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
  14.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

  15.         TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断

  16.         NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
  17.         NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  18.         NVIC_InitStructure.NVIC_IRQChannelPriority=1;
  19.         NVIC_Init(&NVIC_InitStructure);

  20.         TIM_Cmd(TIM3, ENABLE);        
  21. }

  22. void TIM3_IRQHandler(void)   //TIM3中断
  23. {
  24.         if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否
  25.                 {         
  26.                         
  27.                 TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  //清除TIMx更新中断标志

  28.                 }
  29. }
复制代码

.h文件
  1. #ifndef _TIME_H
  2. #define _TIME_H
  3. #include "stm32f0xx.h"

  4. void TIM3_Int_Init(uint32_t time_us);

  5. #endif
复制代码



收藏 评论0 发布时间:2021-11-25 15:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版