赞
踩
上学期做了不少stm32的pro,来梳理一下学习笔记吧~
系统节拍定时器(系统嘀嗒定时器sys tick)集成在cortex m3内核当中,不属于外设,给rtos提供时钟节拍做时间基准(HAL_Delay(10);)
专用定时器:看门狗定时器(防止程序跑飞,监控程序状态),实时时钟RTC,低功耗定时器
常规定时器:
①基本定时器:67几乎没有任何输入、输出通道,常做时基。实现基本的定时、计数功能
②通用定时器:2345具备多路独立的捕获和比较通道,可以完成定时、计数、输入捕获、输出比较等功能
③高级定时器:18除具备定时器的功能外,还具备死区控制的互补信号输出,紧急刹车关断输入等功能,可以用于电机控制和数字电源的设计
1位宽:定时器计数范围(16位,65535)
2计数值:定时器初值,终值
3处理:定时器溢出后需要完成的操作
定时器:对周期固定的脉冲信号进行计数,如MCU内部的外设时钟APB
计数器:对周期不确定(周期固定或者不固定)的脉冲信号进行计数,如MCU的io引脚所引入的外部脉冲信号
定时器是计数器的一种特例
1时钟频率:在定时器模式下,送入定时器的周期性时钟信号的频率
定时器的时钟频率由所挂接的外设总线时钟APB决定
(APB1挂接TIM2/3/4/5,APB2挂接TIM1/9/10/11,均100mhz)
2计数周期:在定时器模式下,计数单元记一次数所花费的时间,即时钟频率的倒数
定时时间=计数值*计数周期
1定时、计数:定时器模式计数内部时钟,计数模式计数外部时钟
2输出比较:PWM输出,电平翻转,单脉冲输出,强制输出
3输入捕获:捕获时,保存定时器的当前计数值,可选触发捕获中断(触发中断捕获的信号边沿类型:上升、下降、双边沿)
根据引脚初数据始化类型GPIO_InitTypeDef来描述GPIO引脚的属性(输出速度,编号,工作模式)
(1定时计数2输出比较3输入捕获)需要各自的初始化数据类型
①句柄设计:设计了统一的外设句柄数据类型PPP_HandleTypeDef(PPP代表外设名称)
②编程模型:设计了三种编程模型
轮询HAL_TIM_Base_Start(TIM_HandleTypeDef*htim);
HAL_TIM_Base_Stop(TIM_HandleTypeDef*htim);
中断HAL_TIM_Base_Start _IT(TIM_HandleTypeDef*htim);
HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef*htim);
DMA HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef*htim,uint16_t Lenghth);
③通用接口函数:设计了四类通用接口函数
初始化函数:根据用户配置参数完成外设初始化操作
i/o操作函数:与外设进行数据交互,包括三种编程模型
控制函数:动态配置外设参数
状态函数:勇于获取外设的运行状态及出错信息
(扩展接口函数:使stm32各产品性能兼容ex.c)
1,时基单元的时钟源(内部时钟CK_INT,外部输入引脚CHx,外部触发输入引脚ETR,内部触发信号ITRx)经过时钟源选择后,成为时基单元的预分频时钟CK_PSC
(当预分频时钟CK_PSC工作在定时模式时:它=内部时钟CK_INT,即定时器时钟TIM_CLK)
2预分频模块工作原理:定时器启动后,预分频计数器的初值为0,预分频时钟CK_PSC每来一个时钟,预分频计数器的值就+1.当计数值=预分频寄存器所设定的预分频系数PSC 时,预分频计数器清0,开始下一轮。
时基单元初始化函数(接口函数):HAL_TIM_Base_Init
1函数原型:TIM HandleTypeDef*htim
2功能描述:按照定时器句柄中指定的参数初始化定时器时基单元
3入口参数:*htim定时器句柄的地址
4返回值:HAL_StatusTypeDef:HAL_OK表示初始化成功,HAL_ERROR表示失败
轮询模式启动函数(API):HAL_TIM_Base_Start
1函数原型:TIM HandleTypeDef*htim
2功能描述:在轮询方式下启动定时器运行
3入口参数:*htim定时器句柄的地址
4返回值:HAL_StatusTypeDef:HAL_OK表示启动成功
5该函数需在初始化之后调用,并需用户调用,用于轮询方式下启动定时器运行
中断模式启动函数(API):HAL_TIM_Base_Start_IT
1函数原型:TIM HandleTypeDef*htim
2功能描述:使定时器的更新中断,并启动定时器运行
3入口参数:*htim定时器句柄的地址
4返回值:HAL_StatusTypeDef:HAL_OK表示启动成功
5该函数需在初始化之后调用,并需用户调用,使能定时器的更新中断,并启动定时器运行
6启动前需要调用宏函数_HAL_TIM_CLEAR_IT来清楚更新中断标志
定时器中断通用处理函数(API):HAL_TIM_IRQHandler
1函数原型:TIM HandleTypeDef*htim
2功能描述:作为所有定时器中断发生后的通用处理函数
3入口参数:*htim定时器句柄的地址
4返回值:无
5函数内部先判断中断类型,并清除对应的中断标志,最后调用回调函数完成中断处理
定时器更新中断回调函数(API)HAL_TIM_ReriodElapsedCallback
1函数原型:TIM HandleTypeDef*htim
2功能描述:用于处理所有定时器的更新中断,用户在该函数内编写实际的任务处理程序
3入口参数:*htim定时器句柄的地址
4返回值:无
5该函数由定时器中断通用处理函数HAL_TIM_IRQHandler调用,完成所有定时器的更新中断的任务处理
6函数内部需要根据定时器句柄的实例来判断是哪一个定时器产生本次更新中断
计数值读取函数_HAL_TIM_GET_COUNTER
带参数的宏#define __HAL_TIM_COUNTER(__HANDLE__)((__HANDLE__)->Instance->CNT)
__HANDLE__定时器句柄的地址
((__HANDLE__)->Instance->CNT)该函数通过直接访问计数器寄存器TIMx_CNT来获取计数器的当前计数值
定时器中断标志清除函数__HAL_TIM_CLEAR_IT
带参数的宏#define __HAL_TIM_CLEAR_IT(__HANDLE__,__INTERRUPT__)
((__HANDLE__)->Instance->SR=~(__INTERRUPT__))
__INTERRUPT__定时器中断标志
句柄本质是对硬件层实例的指针的引用
Apl函数大多需要传入句柄作为参数
TIMx_PSC为16位寄存器,最大预分频系数65535
##未完待续~
有点晚了速速cv了一下学习stm的笔记,后面会再编辑,补充全面,并尽量语言通俗~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。