STM32 定时器浅谈_1
定时器的组成包括四部分:时钟选择单元,时基单元 ,输入捕获 ,输出比较!
一,时钟选择单元:
内部时钟(CK_INT)
外部时钟模式1:外部引脚输入
外部时钟模式2:外部触发输入ETR
内部触发输入(ITRX):定时器级联
二,时基单元组成
CNT计数器 :向上、 向下、中央对齐 三种计数方
PSC预分频寄存器
ARR自动重装载寄存器
三,输入捕获单元
此处应注意的是实际采样频率F = 1/2*Fdts{ 香侬采样定理}
并在滤波电路处进行高频滤波,即一些高频波在滤波电路被滤掉
捕获通道
这里实现了高频滤波,当系统的时钟为72MHZ时,假设选用TDTS=2*TINT
则实际采样频率为F=1/2(1/2*72MHZ)=18MHZ
当N(采样次数)=4时,最大有效频率为18/4=4.25MHZ
即大于4.25MHZ的波被滤掉
注意:TI1F滤波后的有效波形有N个延时
四,输出比较单元
此处应注意的是输出通道和输入通道是同一条,应进行设置!
PWM(脉冲宽度调制)
是用数字信号对模拟信号的一种表达,上下两个波形的面积相等,上图为模拟信号,下图是转换的PWM 波形~ b的高度相同,只需改变宽度就可表示上图分隔的面积~
PWM共有两种模式:PWM模式1和PWM模式2 两种模式计数方式相反
重点在占空比:
占空比:在一串理想的脉冲周期序列中(如方波),正脉冲的持续时间与脉冲总周期的比值。(百度)简单来说就是高电平在整个时钟周期所占的比值
影响占空比的两个因素: 1,PWM周期 2 ,CCR寄存器里的预先放入的比较数 (可以看做高电平)
影响PWM 周期两个因素:1 ,ARR寄存器里重装载数值(可以看做时钟的周期) 2 ,计数模式
所以占空比=(TIMx_CRR/TIMx_ARR)%100%;
定时器编程步骤:
1. 配置优先级; 2. 使能时钟 3. 配置GPIO;4. 配置TIME;5.使能计数器;6.开中断;7.清除标志位;
具体配置如下:
(1) NVIC_Configuration(void);配置优先级
(2) void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)使能时钟
(3) void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);配置GPIO
(4) TIM_Configuration (void);
(5) TIM_Cmd(TIM7, ENABLE);使能定时器
(6) TIM_ITConfig(TIM7,TIM_IT_Update,ENABLE);使能中断
(7) TIM_ClearFlag(TIM7, TIM_FLAG_Update);清除标志位
奋斗板例程:
main.c
#include "stm32f10x.h"#include "stm32f10x_tim.h"#include "misc.h"unsigned int CCR2_Val=13100; extern void time_ini(void);/* 名 称:void RCC_Configuration(void)* 功 能:系统时钟配置为72MHZ, 外设时钟配置* 入口参数:无* 出口参数:无* 说 明:* 调用方法:无 / void RCC_Configuration(void){SystemInit(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD| RCC_APB2Periph_GPIOE , ENABLE);}/* 名 称:void NVIC_Configuration(void)* 功 能:中断源配置* 入口参数:无* 出口参数:无* 说 明:* 调用方法:无 / void NVIC_Configuration(void){NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);NVIC_InitStructure.NVIC_IRQChannel =TIM3_IRQn ; //配置定时器中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure); }/* 名 称:int main(void)* 功 能:主函数* 入口参数:无* 出口参数:无* 说 明:* 调用方法:无 / int main(void){ RCC_Configuration(); //系统时钟设置及外设时钟使能 NVIC_Configuration(); //中断源配置time_ini(); //定时器3的初始化while(1);}
tim.c
#include "stm32f10x_tim.h"#include "stm32f10x_gpio.h"#includevoid time_ini(void);extern unsigned int CCR2_Val;TIM_TimeBaseInitTypeDef TIM3_TimeBaseStructure;TIM_OCInitTypeDef TIM3_OCInitStructure;TIM_BDTRInitTypeDef TIM3_BDTRInitStructure;/* 名 称:void time_ini(void)* 功 能:TIM3初始化* 入口参数:无* 出口参数:无* 说 明:* 调用方法:无 / void time_ini(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //定时器3 时钟使能GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //PB5复用为TIM3的通道2GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);/* TIM3局部复用功能开启 在TIM3的局部复用开启时,PB5会被复用为TIM3_CH2*/GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3 , ENABLE); /* Time Base configuration *//*-------------------------------------------------------------------TIM3CLK=72MHz 预分频系数Prescaler=63 经过分频 定时器时钟为1.125MHz捕获/比较寄存器2 TIM3_CCR2= CCR2_Val 2通道产生的更新频率是=1.125MHz/CCR2_Val=25Hz-------------------------------------------------------------------*/TIM3_TimeBaseStructure.TIM_Prescaler = 63; //预
stm32定时 相关文章:
- 使用STM32的定时器进行输入脉冲的计数(12-02)
- STM32定时器中断设置方法(12-02)
- STM32 定时器产生PWM彻底应用(12-02)
- 转两个stm32定时器的使用代码(11-30)
- stm32高级定时器重新学习(11-30)
- 关于stm32的定时器主从模式概念(11-30)