STM32F10X 最多有8个定时器
例如 STM32F103RC 有 4个通用定时器 2个高级定时器 2个基本定时器
三种定时器的区别 F1系列只有16位定时器
16位可编程预分频 将定时器的时钟源进行分频 预分频相当于将频率进行一个除法运算。可以降低时钟的频率。时钟低的话计数时间可以更长。
每一个定时器 都有4个独立的通道
STM32 中文参考手册的第13章
时钟来源分类
1.内部时钟来自APB1
触发控制器将 内部时钟作为定时器的时钟来源
2 外部引脚输入 ETR 引脚 ETR对应的引脚可以 在数据手册上找---引脚功能描述 搜索 ETR就可以找到ETR对应的的相关功能 引脚 这里主要针对的是定时器2 3 4 时钟信号先经过极性选择 边沿检测 预分频 以及滤波 产生一个时钟信号(ETRF)可以作为定时器的时基单元(CK_PSC)的一个时钟来源
3内部的 ITR 这个来自于其他的定时器
经过选择器 ITR TRC TRGI 之后到触发控制器 然后由 TRGO输出
4来至于TI1FP1 TI1FP2 TI1F_ED 这三个时钟来自于输入滤波器 和边沿检测器 这三个最终又来自于定时器的通道 TIMX_CH1 或者TIMX_CH2
在实际应用过程当中 大部分用 内部时钟(CK_INT)
1.上半部分为时钟发生器 产生 CK_PSC时钟 给预分频器
2.下面为一个时基单元
任何一个定时器都有一个时基单元 首先将 CK_PSC进行一个预分频(PSC)除法运算, 产生了一个CK_CNT这样的一个时钟这个时钟才是然后在这个时钟的控制下开始计数 (向上或者向下)。它的上下计数模式可以由触发控制器相应的寄存器来配置来配置的 计数到重装载值可以产生一些溢出事件,可以触发中断或者DMA请求。
计数器最终的时钟
3为输入捕获 输出比较
输入捕获对应的是哪些引脚呢?还是看数据手册 PA0对应定时器5的通道1 PA1对应的是定时器5的通道2
例如 捕获一个上升沿 那么先进行一个输入滤波和边沿检测,输入滤波器是抗干扰的, 这里捕获和比较寄存器会将计数器的值记下来,当捕获到下降沿的时候又将计数器的值记下来。这样就可以来计算脉冲的宽度(捕获脉冲宽度)每一个定时器都有4个独立的通道。同一个时间同一个定时器要么用作输出比较,要么用作输出比较
输出比较:
例如我们在捕获比较寄存器,我们在这个寄存器里设一个值,对于 计数器CNT 从初值(重装载值)开始从下往上计数,在计数过程中与捕获比较寄存器中的那个值进行比较。假如计数器的初值是100,捕获比较寄存器中的值是50,如果计数器的值比50大,就控制相应的通道设置为高电平。如果计数器的值小于50就输出低电平,这样就可以产生一个PWM波形。如果我们想调整
调整他的占空比,只需要调整捕获比较寄存器中的值就可以了。 如果我们要调整周期,就要对CNT初值进行调整。
关键字:正点原子 通用定时器
引用地址:
正点原子战舰V3 31讲 通用定时器
推荐阅读最新更新时间:2024-11-05 19:12
lpc1114通用定时器-PWM
新建一个工程,结构如下图所示: timer.h文件和timer.c文件用上一节的。 在timer.h中增加两个变量和两个函数的声明,如下所示: #ifndef __NXPLPC11xx_TIME_H__ #define __NXPLPC11xx_TIME_H__ extern uint16_t cycle; extern uint8_t duty; extern void T16B0_init(void); extern void T16B0_delay_ms(uint16_t ms); extern void T16B0_delay_us(uint16_t us); extern void T16B0_cnt_init(v
[单片机]
正点原子STM32 USB读卡器代码分析
USB读卡器的基本原理就是向主机提供SD读写功能,并不需要加入文件系统功能。 USB设备的实现步骤: 1、 初始化系统时钟,设置USB时钟 2、 配置USB中断,选择通道,设置优先级,使能中断 3、 配置GPIO 4、 USB的初始化,对描述符、设备的端点接口等的初始化 5、 FLASH的初始化 sd_size=(long long)SD_GetSectorCount()*512; //得到SD卡容量,字节. Mass_Memory_Size =sd_size%4294967296; //当SD卡容量超过4G的时候,需要用到两个u32来表示 Mass_Memory_Size
[单片机]
正点原子stm32精英开发板串口一键下载电路原理分析
使用串口芯片CH340中的DTR引脚和RTS引脚来控制单片机复位引脚和BOOT0引脚的电平状态,从而实现一键下载。对于这个一键下载电路,重点是这2个地方没问题就足够理解了:1.得有看懂三极管电路开关状态的能力 2.得明白CH340的DTR RTS引脚电平状态是可以由软件来控制的 1.使用串口下载前,先这样连接:单片机串口1的tx1 rx1分别和ch340的rx tx连接,同时把boot0 boot1引脚都10k****下拉到地(若直接连地则电平状态无法改变了,也就无法切换boot启动配置了) 2.如图2,10k在这里:boot引脚拉一个10k电阻到排针 图2 3.图3为正点原子精英板usb转串口的ch340电路,使用fly
[单片机]
STM32通用定时器的PWM
脉冲宽度调制(PWM),是英文 Pulse Width Modulation 的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。一般用来控制步进电机的速度等等。STM32的定时器除了TIM6和TIM7之外,其他的定时器都可以用来产生PWM输出,其中高级定时器TIM1和TIM8可以同时产生7路的PWM输出,而通用定时器也能同时产生4路的PWM输出。 PWM输出模式 STM32的PWM输出有两种模式,模式1和模式2,由TIMx_CCMRx寄存器中的OCxM位确定的( 110 为模式1, 111 为模式2)。模式1和模式2的区别如下: 110:PWM模式1-在
[单片机]
STM32Cubemx下实现通用定时器微秒级延时
因为STM32 HAL库中仅有对HAl_Delay()毫秒级的延时,为实现精确的微秒级延时,就不得不修改Systick,但由于HAL库内部使用其作为超时判断等操作,对其修改会发生不可预期的错误,不建议修改。因此,使用通用定时器进行定时操作。 参考网上例程,使用定时器中断方式实现延时,代码如下: /* TIM3溢出时间=72MHz/(71+1)/(0+1)=1Mhz=1us 计数模式:向上计数模式 使能TIM3中断 */ __IO static uint32_t usDelay=0; void Delayms(uint32_t ms) { Delayus(ms*1000); } void Delayus(u
[单片机]
正点原子STM32学习笔记——通用定时器基本原理
以下描述适用于整个STM32FM10xxx系列。 本文依据《STM32中文参考手册_V10》 STM32 通用定时器简介 STM32 的通用定时器是一个通过可编程预分频器(PSC)驱动的 16 位自动装载计数器(CNT)构成。STM32 的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)等。 使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。STM32 的每个通用定时器都是完全独立的,没有互相共享的任何资源。 STM3 的通用 TIMx (TIM2、TIM3、TIM4 和 TIM5)定时器功能包括: 1)16 位向上、向下、向上
[单片机]
lpc1114通用定时器-捕获功能
上一节,我们讲了在CAP脚上计数,这一节,我们用捕获功能测量CAP引脚上的频率。原理是获取两次下降沿的时间间隔,这个时间间隔即是脉冲信号的周期。 新建一个工程,结构如下图所示: 在timer.h文件中,加入捕获测频的初始化函数T16B0_CAP_Init()的声明,如下所示: #ifndef __NXPLPC11xx_TIME_H__ #define __NXPLPC11xx_TIME_H__ extern void T16B0_init(void); extern void T16B0_delay_ms(uint16_t ms); extern void T16B0_delay_us(uint16_t us);
[单片机]