stm32学习笔记——定时器

定时器功能:1 产生PWM方波输出;2 捕获输入波形的周期及占空比;
定时器分为基本定时器,通用定时器以及高级定时器;
stm32学习笔记——定时器_第1张图片高级定时器常用寄存器分析:
(1)控制寄存器CR1:主要由时基初始化函数配置CK_CNT
(2)计数器寄存器CNT:数字根据CK_CNT时钟递增或递减
void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter);
(3)自动加载寄存器ARR:将ARR中的数加载到CNT
void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload)
(4)预分频寄存器PSC:设置预分频值,将CK_PSC分频为CK_CNT
void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
typedef struct
{
uint16_t TIM_Prescaler;// 设置预分频寄存器PSC中的值
uint16_t TIM_CounterMode;//设置SR寄存器的CMS以及DIR,从而选则计数方向
uint16_t TIM_Period; //设置自动加载寄存器ARR的值
uint16_t TIM_ClockDivision; //设置SR寄存器中CKD
uint8_t TIM_RepetitionCounter;//设置重复寄存器RCR中的值
} TIM_TimeBaseInitTypeDef;
寄存器CR1中的CEN为CK_CNT时钟的总开关:
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);
寄存器CR1中的ARPE为ARR预装载允许位:
void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);
(5)从模式控制寄存器SMCR:时基时钟源的选择以及配置
(6)DMA及中断使能寄存器DIER:
UIE更新中断及CCxIE通道中断使能
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);
(7)状态寄存器SR
更新中断位UIF,捕获中断位CCxIF,刹车中断标志
FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);
(8)事件产生寄存器EGR:由软件置1产生各种中断事件,硬件自动置0
更新事件UG,捕获比较事件CCxG,BG刹车事件,TG触发事件
(9-10)捕获比较模式配置寄存器CCMR1以及CCMR2
捕获比较使能寄存器CCER:CCx(N)E(互补)通道使能 CCx(N)P(互补)极性选择
输入输出模式选择:CCxS位(使用输入函数或者输出函数)
##1输出模式(PWM模式)
typedef struct
{
uint16_t TIM_OCMode; //CCMR寄存器中OCxM位PWM1与PWM2等输出模式选择
uint16_t TIM_OutputState; //CCER寄存器中CCxE位的输出通道使能
uint16_t TIM_OutputNState;//CCER寄存器中CCxNE位的互补输出通道使能
uint16_t TIM_Pulse;//输出PWM波形占空比选择(CCRx寄存器)
uint16_t TIM_OCPolarity; //CCER寄存器中CCxP位的输出极性选择
uint16_t TIM_OCNPolarity; //CCER寄存器中CCxNP位的互补输出极性选择
uint16_t TIM_OCIdleState; //CR2中OISx的死区空闲极性控制
uint16_t TIM_OCNIdleState; //CR2中OISNx的互补死区空闲极性控制
} TIM_OCInitTypeDef;
void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
CCMR寄存器中OCxPE为输出预装载使能(CCR寄存器预装载)
void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
##2输入捕获模式
typedef struct
{
uint16_t TIM_Channel; //输入通道选择并使能CCER寄存器中的CCxE位
uint16_t TIM_ICPolarity; // CCER寄存器中CCxP位的输入捕获极性选择
uint16_t TIM_ICSelection; //CCMR寄存器中CC1S位的通道映射选择
uint16_t TIM_ICPrescaler; //CCMR寄存器中ICxPSC位输入预分频器
uint16_t TIM_ICFilter;// CCMR寄存器中ICxF位输入预分频器
} TIM_ICInitTypeDef;
void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct);
输入输出极性的选择
void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);

你可能感兴趣的:(stm32学习笔记——定时器)