STM32单片机入门学习笔记——定时器TIM第一部分

这篇具有很好参考价值的文章主要介绍了STM32单片机入门学习笔记——定时器TIM第一部分。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

笔记整理自B站UP主江科大自化协教程《STM32入门教程-2023持续更新中》,所用单片机也为教程推荐单片机。

大致内容

第一部分:定时器基本定时的功能,定时器每隔这个时间产生一个中断,来实现每隔一个固定时间执行一段程序的目的,比如要做一个时钟、秒表或者使用一些程序算法的时候都需要用到定时中断这个功能

第二部分:定时器输出比较的功能,最常见的用途就是产生PWM波形,用于驱动电机等设备

第三部分:定时器输入捕获的功能,使用输入buhuo这个模块来实现测量方波频率的例子

第四部分:定时器的编码器接口,使用编码器接口能够更加方便地读取正交编码器的输出波形,在编码电机测速中,应用广泛

使用定时器的外部时钟,可以提供一个更加精准的时钟来计时或者也可以把外部时钟当做一个计数器,用来统计引脚上电平翻转的次数。

TIM简介

  • TIM(Timer)定时器,定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断

当计数器的输入时一个准确可靠的基准时钟(STM32中一般都是主频72MHz)的时候,在对这个基准时钟进行计数的过程,实际上就是计时的过程。

如果对72MHz计72个数,那就是1MHz即1us的时间;如果计72000个数,那就是1KHz即1ms的时间

  • 16位的计数器、预分频器、自动重装寄存器时基单元(最核心的部分),在72MHz计数时钟下可以实现最大59.65s的定时

计数器:用来执行计数定时的一个寄存器,每来一个时钟,计数器加1

预分频器:可以对计数器的时钟进行分频,让这个计数更加灵活

自动重装寄存器:计数的目标值,即想要计多少个时钟申请中断

72M/65536/65536得到中断频率,取到数即为59.65s

STM32定时器支持级联的模式,也就是一个定时器的输出当做另一个定时器的输入,这样最大定时时间:59.65*65536*65536

  • 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能。根据复杂度和应用场景分为了高级定时器(最复杂)、通用定时器基本定时器三种类型。

定时器类型

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档
  • STM32F103C8T6定时器资源:TIM1、TIM2、TIM3、TIM4(没有基本定时器)

基本定时器

基本定时器只能选择内部时钟

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

基本定时器框图

预分频器

写0:不分频或者一分频,输出频率=输入频率=72MHz;

写1:二分频,输出频率=输入频率/2=36MHz;

写2:三分频,输出频率=输入频率/3=24MHz;

概括归纳:实际分频系数 = 预分频器的值 + 1

预分频器是16位的,所以最大值可以写65535,也就是65536分频

计数器

可以对预分频后的计数时钟进行计数,计数时钟每来一个上升沿计数器的值就+1,计数器也是16位的,里面的值可以从0~65535

UI(向上箭头)

计数值等于自动重装值产生的中断——更新中断;

U(向下箭头)

会产生一个事件——更新事件

更新事件不会触发中断,但可以触发内部其他电路的工作

主模式触发DAC功能

它能让内部的硬件在不受程序的控制下实现自动运行

使用DAC的时候,可能会用DAC输出一段波形,就需要每隔一段时间来触发一次DAC,让它输出下一个电压点,通过把定时器的更新事件映射到这个触发输出TRGO(Trigger Out)的位置,这样定时器的更新就不需要通过中断来触发DAC转换了,整个过程不需要软件的参与,实现了硬件的自动化。

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

通用定时器

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

对于通用定时器而言,计数器的计数模式就不止向上计数一种,还有向下计数模式中央对齐模式

中央对齐模式:先向上自增,计到重装值,申请中断,然后再向下自减,减到0,申请中断,一次循环...

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档
tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

ITR和定时器的连接关系

ITR0~3:可用于实现定时器的级联,比如可以先初始化TIM3,然后使用主模式把它的更新事件映射到TRGO上,再初始化TIM2,选择TIR2,对应就是TIM3的TRGO,再选择时钟为外部时钟模式1(TRGI),这样TIM3的更新事件就可以驱动TIM2的时基单元

TI1F_ED:ED(edge边沿)

外部时钟模式1

输入可以是ETR引脚(外部时钟)、其他定时器、CH1引脚的边沿、CH1引脚和CH2引脚

外部时钟模式2

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

定时器主模式输出

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

输出比较电路

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

可以用于输出PWM波形,驱动电机

输入捕获电路

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

可以用于测量输入方波的频率

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

输入捕获和输出比较共用的寄存器

高级定时器

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

相对于通用定时器增加的部分

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

可以实现每隔几个计数周期,才发生一次更新事件和更新中断(相当于对输出的更新信号又做了一次分频),59.65*65536s

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

DTG(Dead Time Generate)死区生成电路

可以输出一对互补的PWM波(对比通用定时器),为了驱动三相无刷电机(四轴飞行器、电动车的后轮、电钻等)因为三相无刷电机的驱动电路一般需要3个桥臂,每个桥臂两个大功率开关管来控制,总共需要6个大功率开关管,所以这里的输出PWM引脚的前三路就变为了互补的输出,为了防止互补输出的PWM驱动桥臂时,在开关切换的瞬间,由于器件的不理想,造成短暂的直通现象,所以前面就加上了死区生成电路,在开关切换的瞬间,产生一定时长的地区,让桥臂的上下管全都关断,防止直通现象。

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档
tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

为了给电机驱动提供安全保障的,如果外部引脚BKIN(Break IN)产生了刹车信号,或者内部时钟失效,产生了故障,那么控制电路就会自动切断电机的输出,防止意外的发生。

定时中断基本结构图

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

PSC:Prescaler预分频器

CNT:Counter计数器

ARR:AutoReloadRegister自动重装定时器

中断输出控制:中断输出的允许位,如果需要某个中断就允许一下

预分频器时序

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

CK_PSC:预分频器的输入时钟

CNT_EN:计数器使能,高电平计数器正常运行,低电平计数器停止

CN_CNT:计数器时钟输入,也是预分频器的时钟输出

根据上图可以推断ARR自动重装值就是FC

预分频缓冲器:影子寄存器(可以看通用定时器高级定时器那张图,方框带有阴影的都是影子寄存器),这是真正起作用的寄存器

比如在某个时刻,把预分频控制寄存器由0改成1,如果在此时立刻改变时钟的分频系数,会导致在一个计数周期内,前半部分和后半部分的频率不一致,不太严谨;这个预分频缓冲器,就是当在计数计到一半的时候改变了分频值,这个变化并不会立刻生效,而是会等到本次计数周期结束时,产生了更新事件,预分频控制寄存器的值才会被传送到预分频缓冲器中,才会生效。

  • 计数器计数频率:CK_CNT = CK_PSC / (PSC + 1)

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

计数器时序

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

CK_INT:内部时钟72MHz

  • 计数器溢出频率:CK_CNT_OV = CK_CNT / (ARR + 1) = CK_PSC / (PSC + 1) / (ARR + 1)

CK_PSC=72MHz

取倒数即为溢出时间

计数器无预装时序

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

没有缓冲寄存器的情况

计数器有预装时序

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

有缓冲寄存器的情况

引入影子寄存器的目的:为了同步,让值的变化和更新事件同步,防止在运行途中更改造成错误

RCC时钟树

用来产生和配置时钟,并且把配置好的时钟发送到各个外设的系统

程序中主函数之前还会执行一个SystemInit函数,这个函数就是用来配置整个时钟树的

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

左半边是时钟产生电路;右半边是时钟分配电路

SYSCLK:系统时钟72MHz

时钟产生电路有四个震荡源,分别是内部8MHz高速RC振荡器、外部的4~16MHz高速石英晶体振荡器(晶振一般都是接8MHz)、外部的32.768KHz的低速晶振(一般是给RTC提供时钟)、内部的40KHz低速RC振荡器(给看门狗提供时钟)

两个高速晶振是用来提供系统时钟,AHB、APB1、APB2的时钟都是来源于这两个高速晶振

PLL:锁相环,8MHz倍频9倍,得到72MHz,等到锁相环输出稳定后选择锁相环输出为系统时钟

一开始是内部8MHz提供系统时钟,后锁相环输出为系统时钟,由8MHz切换为72MHz,这是ST配置的流程。

CSS:Clock Security System 时钟安全系统,负责切换时钟,可以监测外部时钟的运行状态,一旦外部时钟失效,就会自动把外部时钟切换回内部时钟,保证系统时钟的运行,防止程序卡死造成事故,高级定时器中也有CSS。

APB1总线的时钟:72MHz/2=36MHz

无论基本定时器、通用定时器、高级定时器的内部基准时钟都是72MHz

外设时钟配置就是指我们程序中配置时钟

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

定时中断代码讲解(定时器定时中断变量++为例)

第一步:RCC开启时钟

第二步:选择时基单元的时钟源

第三步:配置时基单元

第四步:配置输出中断控制,允许更新中断输出到NVIC

第五步:配置NVIC,在NVIC中打开定时器中断的通道,并分配一个优先级

第六步:运行控制,使能计数器

上述步骤可参考定时器中断基本结构图:

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

定时器中断基本结构图

先来看一下定时器的库函数,stm32f10x_tim.h

TIM_DeInit——恢复缺省配置

TIM_TimeBaseInit——时基单元初始化

TIM_TimeBaseStructInit——给结构体变量赋一个默认值

TIM_Cmd——使能计数器,对应图中的运行控制

TIM_ITConfig——用来使能中断输出信号,对应图中的中断输出控制

TIM_InternalClockConfig——选择内部时钟

TIM_ITRxExternalClockConfig——选择ITRx其他定时器的时钟

TIM_TIxExternalClockConfig——选择TIx捕获通道的时钟

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

Polarity——极性、Filter——滤波器

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

TIM_ETRConfig——单独用来配置ETR引脚的预分频器、极性、滤波器这些参数的

TIM_PrescalerConfig——单独用来写预分频值的

TIM_CounterModeConfig——用来改变计数器的计数模式

TIM_ARRPreloadConfig——自动重装器预装功能配置,前面提到过有预装和无预装

TIM_SetCounter——给计数器写入一个值

TIM_SetAutoreload——给自动重装器写入一个值

TIM_GetCounter——获取当前计数器的值,如果想看这个计数器计到哪里了可以调用这个函数

TIM_GetPrescaler——获取当前预分频器的值

TIM_GetFlagStatus、TIM_ClearFlag、TIM_GetITStatus、TIM_ClearITPendingBit——获取标志位和清除标志位,讲外部中断的时候也提到过,不知道的可以参考那一节

第一步——开启时钟

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

主体代码

注意这里是APB1

第二步——选择时基单元的时钟

选择为内部时钟,当然定时器上电后默认使用内部时钟,不写这一行也行

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

主体代码

第三步——配置时基单元

TIM_ClockDivision

  • 之前有提到过滤波器可以滤掉信号抖动干扰,如果工作呢?

就是在一个固定的是时钟频率f下对信号进行采样,如果连续N个采样点都为相同的电平,那就代表输入信号稳定,把采样值输出,如果这N个采样值不全相同,那就说明信号有抖动,这时就保持上一次的输出或者直接输出低电平,这样就能保证输出信号在一定程度上的滤波,这里的采样频率f和采样点数N都是滤波器的参数,频率越低采样点数越多,那滤波效果就越好,不过相应的信号延迟就越大。

  • 采样频率f从哪来?

内部时钟直接而来,也可以是由内部时钟加一个时钟分频而来,那分频多少由TIM_ClockDivision函数决定

TIM_CounterMode

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

向上计数、向下计数、三种中央对齐的计数模式

TIM_Period

周期,ARR自动重装器的值

TIM_Prescaler

PSC,预分频器的值

TIM_RepetitionCounter

重复计数器的值,这个是高级定时器才有的,这里不需要用,直接给0

定1s的时间如何配置参数呢?

公式:计数器溢出频率:CK_CNT_OV = CK_CNT / (ARR + 1) = CK_PSC / (PSC + 1) / (ARR + 1)

定时1s->定时频率1Hz

套用公式,比如PSC = 7200 - 1,ARR = 10000 - 1

72MHz / 7200 / 10000 = 1Hz

注意PSC和ARR的取值在0~65535之间

PSC和ARR的取值不是唯一的,可以预分频给少点,自动重装给多点,这样就是以一个比较高的频率(时间短)计比较多的数;也可以预分频给多点,自动重装给少点,这样就是以一个比较低的频率(时间长)计比较少的数

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

主体代码

第四步——使能更新中断

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

主体代码

开启了更新中断到NVIC的通路

第五步——配置NVIC

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

主体代码

具体解释可以参考外部中断那一节

第六步——启动定时器

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

主体代码

代码分析

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

可以通过这个函数看一下计数器的值,我们这里是0~9999变化的,对应了之前代码中的TIM_TimeBaseInitStructure.TIM_Period = 10000 - 1;

中断函数代码部分

中断函数名都是规定好的,启动文件中找,startup_stm32f10x_md.s

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

主体代码

定时中断代码讲解(定时器外部时钟端口PA0为例)

上一部分代码理解了,这一部分就可以在上一部分的代码上稍作更改

第一步——开启时钟

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

主体代码

第二部——配置GPIO

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

表格中给的是浮空输入,这里建议用上拉输入

如果外部的输入信号功率很小,内部的上拉电阻可能会影响到这个输入信号,这时可用浮空输入,防止影响外部输入的电平。

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

主体代码

第三步——选择时基单元的时钟

这和之前不一样,这里就是来源于外部时钟了

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

主体代码

第二个参数:外部触发预分频器,TIM_ExtTRGPSC_OFF不需要分频

第三个参数:外部触发的极性,TIM_ExtTRGPolarity_Inverted反向(低电平或者下降沿有效);TIM_ExtTRGPolarity_NonInverted不反向(高电平或者上升沿有效)

第四个参数:外部触发滤波器,之前第三步讲时基单元的时候有介绍过滤波器,就是以采用频率f采样N个点,具体怎样的对应关系看手册:

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

写0x00不用滤波器

第四步——配置时基单元

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

主体代码

公式:计数器溢出频率:CK_CNT_OV = CK_CNT / (ARR + 1) = CK_PSC / (PSC + 1) / (ARR + 1)

计数器溢出频率 = 72MHz / 1 / 10 = 7200000Hz

第五步——使能更新中断

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

主体代码

第六步——配置NVIC

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

主体代码

第七步——启动定时器

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

主体代码

编程小技巧

跨文件使用变量,extern声明变量就是告诉编译器,这个变量在别的文件中也定义了,这个变量就是另外文件中同一个变量的引用,这个过程并没有定义新的变量,其实头文件中的函数声明也是用extern实现的,这个extern可以省略,一般不写。

中断函数可以放在main.c文件中,也可以放在其他模块化的文件中

其他问题

在TIM_TimeBaseInit函数中最后有这么一句

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

生成一个更新事件,立刻来重新装载预分频器的值和重复计数器的值

预分频器是有一个缓冲寄存器的,我们写的值只有在更新事件时才会起作用,所以这里为了让值立刻起作用,在这最后手动生成了一个更新事件,这样预分频器的值就有效了,但同时它导致了更新事件和更新中断是同时发生的,更新中断会置更新中断标志位,当我们之后一旦初始化完了,更新中断就会立刻进入,这就是我们刚一上电就立刻进中断的原因。

解决方法

tim_etrclockmode1config和tim_etrclockmode2config的区别,单片机入门学习笔记,单片机,stm32,嵌入式硬件,c语言,mcu,Powered by 金山文档

感谢抽出宝贵时间阅读的各位小读者们,创作不易,如果感觉有帮助的话,帮忙点个赞再走吧!你们的支持是我创作的动力,希望能带给大家更多优质的文章。文章来源地址https://www.toymoban.com/news/detail-771549.html

到了这里,关于STM32单片机入门学习笔记——定时器TIM第一部分的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【单片机】STM32单片机的各个定时器的定时中断程序,标准库

    高级定时器和普通定时器的区别(https://zhuanlan.zhihu.com/p/557896041): TIM1是高级定时器,使用的时钟总线是RCC_APB2Periph_TIM1,和普通定时器不一样。 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用

    2024年02月11日
    浏览(18)
  • 【单片机】STM32单片机读取旋转编码器,TIM定时器编码器模式捕获,程序

    旋转编码器简单来说,就是会输出2个PWM,依据相位可以知道旋转方向,依据脉冲个数可以知道旋转的角度。一般旋转一圈有一个固定数值的脉冲个数。 旋转编码器广泛用于电机、或者角度传感器,STM32的定时器可以直接接入这两个波形获取到信息。 前两个引脚(接地和Vcc)

    2024年02月13日
    浏览(20)
  • 学习笔记|定时器|STC中断|定时器时间计算|STC32G单片机视频开发教程(冲哥)|第十一集:定时器的作用和意义

    什么是定时器:定时器-与非网 上节课的一段代码: TimeCount++然后一个延时1毫秒,每运行1ms,变量就会加一。 系统已经运行了多少个毫秒。 实际使用时的代码如下, 判断按键有沿有按下的时候,我们等待按键松开,还有一个while循环。 如果没有松开,会一直死在这一行。所以,

    2024年02月09日
    浏览(26)
  • 【单片机】STM32单片机,定时器,多路PWM,TIM1、TIM2、TIM3、TIM4,STM32F103

    下图是定时器相关引脚: 在《STM32中文参考手册V10.pdf》有写: TIM1 的PWM是带互补输出的,较为高级和复杂,有兴趣可以参考其他介绍文章,这里的代码让7个引脚输出PWM。 调用: 这里没有重映射,注意不能把PA9 PA10 初始化成串口去了。 timer.c timer.h 调用: 这里没有重映射。

    2024年02月11日
    浏览(30)
  • STM32单片机(六)TIM定时器 -> 第三节:TIM输出比较

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月09日
    浏览(23)
  • STM32单片机(六)TIM定时器 -> 第五节:TIM输入捕获

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月09日
    浏览(18)
  • 洋桃电子STM32F407单片机入门教程笔记九:低功耗模式

      此文档作为对洋桃电子STM32F407单片机视频的整理,B站链接: 第28集)低功耗模式_哔哩哔哩_bilibili         在之前的程序里应用程序在while(1)主循环中反复执行,ARM内核以100%的功率工作。这样的设计简单稳定,内核全速运行的功耗也只有几十毫安,对于外接电源的设备

    2024年01月23日
    浏览(28)
  • 洋桃电子STM32F407单片机入门教程笔记一:RCC时钟设置

    此文档作为对洋桃电子STM32F407单片机视频的整理,B站链接:2023更新 STM32入门F4= STM32F407单片机入门教程=WIFI连接阿里云物联网+CubeMX+HAL库+TFT彩屏+杜洋主讲_哔哩哔哩_bilibili 由于单片机内部的时钟结构都是相互关联的,一个时钟源出发可以供给多个功能,类似于树根、树杆、树

    2024年02月04日
    浏览(20)
  • STM32F103RCT6开发板M3单片机教程06--定时器中断

    除非特别说明,本章节描述的模块应用于整个 STM32F103xx 微控制器系列,因为我们使用是 STM32F103RCT6开发板是mini最小系统板。 本教程使用是( 光明谷SUN_STM32mini开发板 )   首先了解一下是STM32F10X定时器(Timer)   注: 小容量产品是指闪存存储器容量在16K至32K字节之间的STM32F101

    2024年02月04日
    浏览(23)
  • [蓝桥杯单片机]学习笔记——555定时器与频率测量

    目录 一、原理部分 1、什么是555定时器 2、频率测量  3、频率测量相关配置 二、程序案例 555定时器是一种集成电路芯片,常被用于定时器、脉冲产生器和振荡电路。555可被作为电路中的延时器件、触发器或起振元件。而在蓝桥杯的板子上,555定时器是一个信号发生电路,通

    2023年04月12日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包