☰
STM32hal库开发-时钟系统与定时器
2026/10/23 4:54:31 网站建设 项目流程

1.时钟树

1.stm32结构

AHB总线最大速度为72MHz max, APB1总线最大速度为36MHz max, APB2总线最大速度为72MHz max

2.数字电路

1.组合逻辑电路:不含记忆原件,输出只和当前输入有关

1.示意图

2.时序逻辑电路:含有记忆性原件,输出不仅和当前输入有关,还和过去输入有关(只有给了它时钟信号,他才能开始工作)

1.示意图

只有从CP给它输入时钟脉冲,这个电路才能开始工作,时钟的快慢决定了电路运行速度的快慢

3.时钟数示意图

1.时钟分类

2.SYSCLK(系统时钟):最高频率是72MHz(可以来自芯片内部的高速rc振荡器,也可以来自芯片外部的高速晶振,还可以来自锁相环PLL(可以对时钟信号的频率做乘法))

2.定时器

1.时基单元

1.示意图

2.工作原理

1.时钟来源:时钟树(RCC),来自从模式控制器的触发信号(TRIG),来自外部参考信号(ETRF)

2.定时器有关时钟树概览图

在默认情况下,分频器为1分频,倍频器为1倍频,分频器大于1分频,倍频器为2倍频

3.计数方式:上计数,下计数,中心对齐

1.上计数:CNT依次递增至和ARR相等,当再有一个时钟脉冲,则会溢出,CNT回到0,重新计数,此时,定时周期=ARR+1

2.下计数:CNT的值从ARR开始递减至0,当再有一个时钟脉冲,会溢出,重新计数

4.重复计数器RCR:设置重复计数次数=RCR+1,重复计数器每溢出一次,产生一次update事件(只有高级定时器才有)

5.寄存器预加载

1.寄存器写值,会先进入影子寄存器

2.作用:防止程序跑飞

3.PSC和RCR强制使能影子寄存器,ARR可以手动开关影子寄存器,默认关闭

6.定时器配置

1.配置界面

1.Slave Mode:选择从模式控制器的工作模式

2.Trigger Source:设置从模式控制器触发信号的来源

3.Channel:输入捕获和输出比较通道

4.Clock Source:选择时基单元时钟来源

5.Combined Channel:霍尔传感器,编码器,pwm参数测量

7.相关库函数:HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim):以中断方式启动时基单元

1.TIM_HandleTypeDef *htim:填写定时器句柄的指针

2.需要编写回调函数HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);因为多个定时器共用需对句柄进行判断

3.输出比较

1.概念:单片机通过定时器向外输出精确定时的方波信号

2.PWM:脉冲宽度调制信号

1.占空比:PWM一个周期内高电平占整个周期的比例

2.特点:周期恒定,占空比可调,用占空比调节信号大小,信号强度越大,占空比越大,信号强度越小,占空比越小

3.CCR:捕获/比较寄存器,CNT<=CCR输出低电压,CNT>CCR输出高电压

4.时基单元决定信号周期,CCR决定占空比

5.定时器输出PWM波形模式

1.模式

6.定时器pwm信号驱动mos管

1.h桥电路和mos管

1.Q1,Q2需交替工作,不能同时导通,需要互补的pwm进行驱动

7.定时器极性

1.Positive-正极性,信号原样输出

2.Negative-负极性,信号取反输出

8.定时器通道在cubemx配置

9.相关库函数

1. HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef &htim,uint32_t CHANNEL);

1.作用:启动PWM的正常输出

2. HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef &htim,uint32_t CHANNEL);

1.作用:启动PWM的互补输出

3.参数含义

1.htim:填写定时器句柄

2.CHANNEL:填写通道编号

4.预分频器PSC

1._HAL_TIM_SET_PRESCALER(__HANDLE_,_PRESC_):用于写入PSC

2._HAL_TIM_GET_PRESCALER(__HANDLE_):用于读取PSC

5.计数器CNT

1._HAL_TIM_SET_COUNTER(__HANDLE_,_COUNTER_):写入CNT的值

2._HAL_TIM_SET_COUNTER(__HANDLE_):读取CNT的值

6.自动重装寄存器ARR

1._HAL_TIM_SET_AUTORELOAD(__HANDLE_,_AUTORELOAD_):写入ARR

2._HAL_TIM_SET_AUTORELOAD(__HANDLE_,_COUNTER_):读取ARR

7.CCR

1._HAL_TIM_SET_COMPARE(__HANDLE_,_COMPARE_):写入CCR的值

2._HAL_TIM_SET_COMPARE(__HANDLE_):读取CCR

10.占空比公式:duty=CCR/ARR+1(在呼吸灯实验下,占空比应按duty=0.5sin(2pit)+0.5)

4.输入捕获

1.输入捕获原理:外部信号输入,使用定时器对时间参数进行测量。每当检测到信号发生变化时,CNT的值就会保存到CCR中,在读取CCR,就知道输入信号在什么时间变化了

2.概念:捕捉信号变化的时间点,并保存

3.脉宽=(CCR2-CCR1)*分辨率(计数器每计数一次所消耗的时间)

4.原理图

5.输入捕获具体流程

1.输入滤波:去除波上的毛刺,得到纯净的方波信号

2.边沿检测

1.上升沿脉冲:每检测到一个上升沿信号就发送一个脉冲

2.下降沿脉冲:每检测到一个下降沿信号就发送一个脉冲

3.信号选择

1.TRC(信号来源于从模式控制器)

2.通道之间可以互相引用,信号来自于通道本身,叫直接,信号来自于对侧的通道,叫间接

4.分频:分频后产生脉冲会触发CCx事件,此事件发生时,CNT的值会拍照保存到CCR里,读取CCR即可知道信号发生变化的时间点

6.超声波模块工作原理

1.在Trig引脚上施加大于10微秒的脉冲

2.带有字母T一侧的模块开始发送超声波(40KHz,8个周期,持续0.2毫秒左右)

3.声波发送完成后,Echo引脚会出现一个上升沿

4.遇到障碍物反射回来,当8个周期的超声波全部被接受,Echo引脚上会出现一个下降沿

5.求这样形成的脉冲的脉宽就是超声波从发送到接收的时间

6.距离=声速(340m/s)*传播时间(脉冲宽度)/2

7.模式配置

1.输入捕获模式

2.参数

1.Polarity Selection:选择边沿类型(Rising代表上升沿,Falling代表下降沿)

2.IC Selection:选择IC信号来源

3.Prescaler Division Ratio:选择分频系数

4.Input Filter:输入捕获滤波器参数

8.相关库函数

1.HAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim,uint32_t Channel)

1.作用:启动输入捕获

2.HAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef *htim,uint32_t Channel)

2.作用:停止输入捕获

3.参数含义

1.*htim:填写定时器句柄的指针

2.Channel:填写通道编号

4.__HAL_TIM_GET_FLAG(__HANDLE__,__FLAG__)

1.作用:查询标志位的值

2.返回值(uint32_t):0-标志位为0,非零-标志位为1

5.从模式控制器

1.原理:

2.作为从机,从TRGI输入控制信号,控制定时器,定时器会根据控制信号控制定时器开启,暂停,复位和增减

3.作为主机,从模式控制器,会从TRGO向外输出控制信号,可以控制其他模块(另外一个定时器,ADC和DAC)

4.从模式控制器的主机和从机功能可以同时使用,即我们可以在TRGI接收控制信号时,也可以用TRGO向外输出控制信号

5.从模式控制器模式

1.从机模式

1.Slave Mode disable:从模式禁止(不使用从机功能)

2.Reset Mode-复位模式(只用TRGI的上升沿来复位CNT,同时产生Update事件)

3.Gated Mode-门模式(使用TRIG控制时基单元开关,高电压时开关导通,低电压时开关断开)

4.Trigger Mode-触发模式(使用TRGI的上升沿来启动定时器)

5.External Clock Mode-外部时钟模式1(把TRGI作为定时器时钟)

6.

2.主机模式

1.Enable-使能(通过TRGO把时基单元的开关状态输出出去,开关导通输出高电压,开关断开输出低电压)

2.Update-更新(每产生一个Update事件就向TRGO输出一个脉冲)

6.占空比公式:占空比=(脉宽/周期)*100%

7.编码器:一般用于电机,测量角度和转速

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询