微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32学习笔记6(TIM模块定时器)

STM32学习笔记6(TIM模块定时器)

时间:11-28 来源:互联网 点击:

//Step4.中断服务子程序:void TIM1_UP_IRQHandler(void){GPIOC->

  • //TIM1_OC1模块设置TIM_OCStructInit(& TIM_OCInitStructure);TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;//管脚输出模式:翻转TIM_OCInitStructure.TIM_Pulse = 2000;//翻转周期:2000个脉冲TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//使能TIM1_CH1通道TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//输出为正逻辑TIM_OC1Init(TIM1, &TIM_OCInitStructure);//写入配置

    //清中断TIM_ClearFlag(TIM1, TIM_FLAG_CC1);

    //TIM1中断源设置,开启相应通道的捕捉比较中断TIM_ITConfig(TIM1, TIM_IT_CC1, ENABLE);

    //TIM1开启TIM_Cmd(TIM1, ENABLE);//通道输出使能TIM_CtrlPWMOutputs(TIM1, ENABLE);}

    Step5.中断服务子程序void TIM1_CC_IRQHandler(void){u16 capture;if(TIM_GetITStatus(TIM1, TIM_IT_CC1) == SET){TIM_ClearITPendingBit(TIM1, TIM_IT_CC1 );capture = TIM_GetCapture1(TIM1);TIM_SetCompare1(TIM1, capture + 2000);//这里解释下://将TIM1_CCR1的值增加2000,使得下一个TIM事件也需要2000个脉冲,//另一种方式是清零脉冲计数器//TIM_SetCounter(TIM2,0x0000);}}

    关于TIM的操作,要注意的是STM32处理器因为低功耗的需要,各模块需要分别独立开启时钟,所以,一定不要忘记给用到的模块和管脚使能时钟,因为这个原因,浪费了我好多时间阿~~!

    九九的STM32笔记(二)TIM模块产生PWM

    这个是STM32的PWM输出模式,STM32的TIM1模块是增强型的定时器模块,天生就是为电机控制而生,可以产生3组6路PWM,同时每组2路PWM为互补,并可以带有死区,可以用来驱动H桥。下面的代码,是利用TIM1模块的1、2通道产生一共4路PWM的代码例子,类似代码也可以参考ST的固件库中相应exampleC语言: TIM1模块产生PWM,带死区//Step1.开启TIM和相应端口时钟//启动GPIORCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD,ENABLE);//启动AFIORCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//启动TIM1RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

    //Step2. GPIO做相应设置,为AF输出//PA.8/9口设置为TIM1的OC1输出口GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);

    //PB.13/14口设置为TIM1_CH1N和TIM1_CH2N输出口GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);

    //Step3. TIM模块初始化void TIM_Configuration(void){TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;TIM_OCInitTypeDef TIM_OCInitStructure;TIM_BDTRInitTypeDef TIM_BDTRInitStructure;

    //TIM1基本计数器设置(设置PWM频率)//频率=TIM1_CLK/(ARR+1)TIM_BaseInitStructure.TIM_Period = 1000-1;TIM_BaseInitStructure.TIM_Prescaler = 72-1;TIM_BaseInitStructure.TIM_ClockDivision = 0;TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_BaseInitStructure.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM1, &TIM_BaseInitStructure);//启用ARR的影子寄存器(直到产生更新事件才更改设置)TIM_ARRPreloadConfig(TIM1, ENABLE);

    //TIM1_OC1模块设置(设置1通道占空比)TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;TIM_OCInitStructure.TIM_Pulse = 120;TIM_OC1Init(TIM1, &TIM_OCInitStructure);//启用CCR1寄存器的影子寄存器(直到产生更新事件才更改设置)TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);

    //TIM2_OC2模块设置(设置2通道占空比)TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;TIM_OCInitStructure.TIM_Pulse = 680;TIM_OC2Init(TIM1, &TIM_OCInitStructure);//启用CCR2寄存器的影子寄存器(直到

  • Copyright © 2017-2020 微波EDA网 版权所有

    网站地图

    Top