您的位置 首页 测评

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) NV%&&&&&%_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"#include  	void 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;						//预分频器TIM3_PSC=63	 TIM3_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;		//计数器向上计数形式 TIM3_CR1[4]=0TIM3_TimeBaseStructure.TIM_Period =0xffff;				        //主动重装载寄存器TIM3_APR      		     TIM3_TimeBaseStructure.TIM_ClockDivision = 0x0;					//时钟分频因子 TIM3_CR1[9:8]=00TIM_TimeBaseInit(TIM3,&TIM3_TimeBaseStructure);					//写TIM3各寄存器参数TIM3_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle ;				//TIM3_CCMR1[14:12]=011  翻转 当TIM3_CCR2=TIM3_CNT时,翻转OC2REF的电平 // TIM3_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2 ;TIM3_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;	//输入/捕获2输出答应  OC2信号输出到对应的输出引脚PB5TIM3_OCInitStructure.TIM_Pulse =CCR2_Val;						    //若CC1通道装备为输出:CCR2是装入当时捕获/比较2 TIM3_CCR2寄存器的值(预装载值)。//当时捕获/比较寄存器包含了与计数器TIM3_CNT比较的值,并且在OC端口上输出信号TIM3_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;			//输出极性  低电平有用 TIM3_CCER[5]=1;TIM_OC2Init(TIM3, &TIM3_OCInitStructure);TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Disable);			    //TIM3_CCMR1[1]=0  制止TIM3_CCR2寄存器的预装载功用,可随时写入TIM3_CCR2//且新值立刻起作用	  TIM_Cmd(TIM3,ENABLE);											//发动定时器3 TIM3_CR1[0]=1;  TIM_ITConfig(TIM3,TIM_IT_CC2,ENABLE); 							//TIM3_DIER[2]=1  答应捕获/比较2中止}

it.c

void TIM3_IRQHandler(void){if(TIM_GetITStatus(TIM3,TIM_IT_CC2)!=RESET){TIM_ClearITPendingBit (TIM3,TIM_IT_CC2);capture1=TIM_GetCapture2(TIM3);TIM_SetCompare2(TIM3,capture1+CCR2_Val);  	}}

当咱们把tim.c中的TIM3_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle ;

换成:TIM3_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2 ;时能够看到占空一个近似于1:2的占空比波形图

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/277416.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部