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.编码器:一般用于电机,测量角度和转速