高级定时器简介


1.输入捕获模式,可用来测频率或脉宽(原理:捕获到信号的跳变沿的时候,把计数器CNT的值锁存到捕获寄存器CCR中,把前后两次捕获到的CCR寄存器中的值相减,就可以算出脉宽或者频率。如果捕获的脉宽的时间长度超过你的捕获定时器的周期,就会发生溢出,需要进行额外的处理)
2.输出比较应用,主要应用为PWM输出

配置PWM输出,代码实现

(1)高级定时器TIM1的工作方式配置以及初始化
1.时基结构体TIM_TimeBaseInitTypeDef,配置预分频PSC,计数方式,定时器周期ARR,时钟分频(与死区时间相关),重复计数器(用不上)
2.输出比较结构体TIM_OCInitTypeDef,配置比较输出模式(PWM1),比较输出使能,比较互补输出使能,脉冲宽度,输出极性(决定PWM先高还是低),互补输出极性……
3.断路和死区结构体TIM_BDTRInitTypeDef,配置断路和死区的相关参数。

static void Advance_Tim_Mode_Config(void)
{//开启定时器时钟,即内部时钟CK_INT=72MRCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);/*===============时基结构体初始化================*/TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//自动重装载寄存器的值,累计TIM_Period+1个频率后产生一个更新或者中断TIM_TimeBaseInitStructure.TIM_Period=8-1;//驱动CNT计数器的时钟 = Fck_int/(psc+1)TIM_TimeBaseInitStructure.TIM_Prescaler=9-1;//时钟分频因子 ,配置死区时间时需要用到TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;//计数器计数模式,设置为向上计数TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//重复计数器的值,没用到不用管TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;//初始化定时器TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStructure);/*==============输出比较结构体初始化============*/TIM_OCInitTypeDef TIM_OCInitStructure;//配置为PWM模式1TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//输出使能TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//互补输出使能TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;//设置占空比大小TIM_OCInitStructure.TIM_Pulse=4;//输出通道电平极性配置TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//互补输出通道电平极性配置TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_High;// 输出通道空闲电平极性配置TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;// 互补输出通道空闲电平极性配置TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;TIM_OC1Init(TIM1,&TIM_OCInitStructure);/*================刹车和死区结构体初始化=================*/TIM_BDTRInitTypeDef TIM_BDTRInitSturcture;TIM_BDTRInitSturcture.TIM_OSSRState=TIM_OSSRState_Enable;TIM_BDTRInitSturcture.TIM_OSSIState=TIM_OSSIState_Enable;TIM_BDTRInitSturcture.TIM_LOCKLevel = TIM_LOCKLevel_1;// 输出比较信号死区时间配置,具体如何计算可参考 BDTR:UTG[7:0]的描述// 这里配置的死区时间为152nsTIM_BDTRInitSturcture.TIM_DeadTime = 11;TIM_BDTRInitSturcture.TIM_Break = TIM_Break_Enable;// 当BKIN引脚检测到高电平的时候,输出比较信号被禁止,就好像是刹车一样TIM_BDTRInitSturcture.TIM_BreakPolarity = TIM_BreakPolarity_High;TIM_BDTRInitSturcture.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;TIM_BDTRConfig(TIM1, &TIM_BDTRInitSturcture);//使能计数器TIM_Cmd(TIM1, ENABLE);//主输出使能,当使用的是通用定时器时,这句不需要TIM_CtrlPWMOutputs(TIM1,ENABLE);
}

(2)初始化输出以及断路对应的GPIO

static void Advance_Tim_GPIO_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;//输出比较通道GPIO初始化RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);//输出比较通道互补通道GPIO初始化RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);//输出比较通道刹车通道GPIO初始化RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_ResetBits(GPIOB,GPIO_Pin_12);
}

(3)主函数中完成以上两步初始化就可以输出PWM

STM32学习——高级定时器相关推荐

  1. STM32 TIM高级定时器死区时间的计算

    STM32 TIM高级定时器的互补PWM支持插入死区时间,本文将介绍如何计算以及配置正确的死区时间. 文章目录 什么是死区时间? 数据手册的参数 如何计算合理的死区时间? STM32中配置死区时间 什 ...

  2. STM32 TIM1高级定时器RCR重复计数器的理解

    STM32 TIM1高级定时器RCR重复计数器的理解 TIMx_RCR重复计数器寄存器,重复计数器只支持高级定时器TIM1和TIM8,下面看标准外设库的TIM结构体的封装: typedef struc ...

  3. 【STM32】高级定时器、通用定时器和基本定时器---配置寄存器产生PWM

    文章目录 1.高级定时器和通用定时器 2.配置产生PWM 1.高级定时器和通用定时器   高级定时器:TIM1.TIM8   Tips:黄色词条为高级定时器相对于通用定时器的功能.   通用定时器:T ...

  4. STM32之高级定时器

    高级定时器 基本框图 时钟源 高级控制定时器有4个时钟源可选: 1.内部时钟源CK_INT. 2.外部时钟模式1:外部输入引脚TIx(x=1,2,3,4). 3.外部时钟模式2:外部触发输入ETR 4 ...

  5. STM32 TIM1高级定时器配置快速入门

    layout: post tags: [STM32] comments: true 文章目录 layout: post tags: [STM32] comments: true 重点内容 时基单元 计 ...

  6. STM32学习总结——定时器

    文章目录 一.STM32定时器是什么? 二.STM32定时器的功能 1.计时&&中断 2. PWM产生 3.输入捕获 三.总结 一.STM32定时器是什么? 定时器顾名思义就是可以用来 ...

  7. STM32之高级定时器互补输出

    #include "stm32f10x.h" /* RCC时钟配置 */ void RCC_config(void) {  ErrorStatus HSEStartUpStatus ...

  8. 【笔记------STM32】高级定时器TIM1,CH3N输出PWM的示例

    CHxN的pwm就是一个互补输出的问题,我更愿意称它叫CHx的互补通道,这样理解没有歧义. 新手照着下面配寄存器就可以配置好. 这里也提供一个演示: 配置CH3N输出PWM,顺便配置了CH4输出PWM ...

  9. STM32学习笔记 定时器HAL库函数

    stm32f1xx_hal_tim.c 定时器基础部分相关函数 /* Time Base functions ********************************************* ...

最新文章

  1. java对象序列化克隆_JAVA 对象克隆和序列化
  2. 电脑安装python为什么不能用-python安装后不能运行怎么办
  3. python代码大全表解释-python实现顺序表的简单代码
  4. apache AllowEncodedSlashes 允许URL中对路径分隔符进行编码
  5. Windows 中 SQLite3 使用(1) -- 配置
  6. JIRA6.3.6中设置用户的解决问题和关闭问题权限
  7. android dp转px的公式_公式px到dp,dp到px android
  8. Oracle触发器2-DML触发器
  9. matlab内存管理工具,[转载]MATLAB内存管理
  10. BOM——window对象
  11. Internet Download Manager(最新版win/mac)最快下载器工具使用教程
  12. MacBook Pro 开机密码忘记的解决办法
  13. php二次开发帝国,帝国CMS二次开发注意事项
  14. baigoStudio baigoSSO v3.0.1(Use CVE-2019-10015.)
  15. 基于Xlinx的时序分析与约束(1)----什么是时序分析?什么是时序约束?什么又是时序收敛?
  16. Linux的基本学习(四)——磁盘与文件系统管理
  17. KTV点歌系统数据库设计文档
  18. 1.无线通信:传播和衰落
  19. 排序算法——十大排序算法总结与对比
  20. android studio制作.9图片,并且不改变原图大小

热门文章

  1. spring zipkin mysql_springboot + zipkin + mysql
  2. SpringBoot 2.x 集成Redis
  3. python实现matlab_用matlab和python实现符号运算
  4. html5 retina 1像素,走向视网膜(Retina)的Web时代
  5. ccs 移植创建新工程_LiteOS裸机驱动移植05 | E53_SF1智慧消防扩展板驱动及使用
  6. pandas滑动窗口滑动整个dataframe
  7. matplotlib设置线条的样式、颜色
  8. Ndarry/Dataframe使用pytorch转为tensor格式
  9. 嵌入网站的挖矿代码——Webmine
  10. python/socket编程之粘包