您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > STM32f103PWM(用于电调)程序
#includetimer.h#includeled.h//定时器3中断服务程序voidTIM3_IRQHandler(void){if(TIM3-SR&0X0001)//溢出中断{//LED1=!LED1;}TIM3-SR&=~(10);//清除中断标志位}//通用定时器中断初始化//这里时钟选择为APB1的2倍,而APB1为36M//arr:自动重装值。//psc:时钟预分频数//这里使用的是定时器3!voidTIM3_Int_Init(u16arr,u16psc){RCC-APB1ENR|=11;//TIM3时钟使能TIM3-ARR=arr;//设定计数器自动重装值TIM3-PSC=psc;//预分频器设置TIM3-DIER|=10;//允许更新中断TIM3-CR1|=0x01;//使能定时器3MY_NVIC_Init(1,3,TIM3_IRQn,2);//抢占1,子优先级3,组2}voidTIM2_PWM_Init(u16arr,u16psc){//此部分需手动修改IO口设置RCC-APB1ENR|=10;//TIM2时钟使能RCC-APB2ENR|=12;//使能PORTA时钟PA0,PA1,PA2,PA3GPIOA-CRL&=0XFFFFFFF0;//PA0清除之前的设置GPIOA-CRL|=0X0000000B;//复用功能输出1011每四位控制一个IO低八位用CRL高八位CRH//后两位00表示输入状态;此时前两位00模拟输入;01浮空输入;10上拉/下拉输入;11保留//后两位01/10/11分别表示10/20/50MHz的输出速度;此时前两位00通用推完输出;01通用开漏输出;10复用推挽;11复用开漏GPIOA-CRL&=0XFFFFFF0F;//PA1清除之前的设置GPIOA-CRL|=0X000000B0;//复用功能输出GPIOA-CRL&=0XFFFFF0FF;//PA2清除之前的设置GPIOA-CRL|=0X00000B00;//复用功能输出GPIOA-CRL&=0XFFFF0FFF;//PA3清除之前的设置GPIOA-CRL|=0X0000B000;//复用功能输出TIM2-ARR=arr;//设定计数器自动重装值TIM2-PSC=psc;//预分频器不分频TIM2-CCMR1|=64;//CH1PWM1模式TIM2-CCMR1|=612;//CH2PWM1模式TIM2-CCMR2|=64;//CH3PWM1模式TIM2-CCMR2|=612;//CH4PWM1模式TIM2-CCMR1|=13;//CH1预装载使能TIM2-CCMR1|=111;//CH2预装载使能TIM2-CCMR2|=13;//CH3预装载使能TIM2-CCMR2|=111;//CH4预装载使能//TIM2-CCER|=10;//OC1输出使能//TIM2-CCER|=11;//OC1低电平有效TIM2-CCER|=10;//OC1输出使能,高电平有效TIM2-CCER|=14;//OC2输出使能,高电平有效TIM2-CCER|=18;//OC3输出使能,高电平有效TIM2-CCER|=112;//OC4输出使能,高电平有效//TIM2-CCER|=30;//OC1输出使能,低电平有效//TIM2-CCER|=34;//OC2输出使能,低电平有效//TIM2-CCER|=38;//OC3输出使能,低电平有效//TIM2-CCER|=312;//OC4输出使能,低电平有效TIM2-CR1|=17;//ARPE使能自动重载预装载TIM2-CR1|=10;//使能定时器2}#ifndef__TIMER_H#define__TIMER_H#includesys.h/********************************************************************************本程序中共预设了八个通道的PWM输出,使用高级定时器1和通用定时器2********************************************************************************///#defineLED0_PWM_VALTIM1-CCR1#defineCH11_PWM_VALTIM1-CCR1#defineCH12_PWM_VALTIM1-CCR2#defineCH13_PWM_VALTIM1-CCR3#defineCH14_PWM_VALTIM1-CCR4#defineCH21_PWM_VALTIM2-CCR1#defineCH22_PWM_VALTIM2-CCR2#defineCH23_PWM_VALTIM2-CCR3#defineCH24_PWM_VALTIM2-CCR4voidTIM3_Int_Init(u16arr,u16psc);voidTIM1_PWM_Init(u16arr,u16psc);voidTIM2_PWM_Init(u16arr,u16psc);#endif下面用于电调初始化设置intmain(void)while(1)//状态判断{if(NRF24L01_RxPacket(tmp_buf)==0)//若收到数据信息.{TIM2_PWM_Init(19999,71);//定时器2初始化启动//71+1分频;计数频率1000000Hz;PWM频率=1000000/(19999+1)=50Hzif(tmp_buf[8]==0x00&tmp_buf[9]==0x00)//判断是否为一般遥控模式{CH21_PWM_VAL=1000;//设置最小值CH22_PWM_VAL=1000;//设置最小值CH23_PWM_VAL=1000;//设置最小值CH24_PWM_VAL=1000;//设置最小值break;//跳出死循环}if(tmp_buf[8]==0xf0&tmp_buf[9]==0x00)//判断是否为设置电调最大值{CH21_PWM_VAL=2000;//设置最大值CH22_PWM_VAL=2000;//设置最大值CH23_PWM_VAL=2000;//设置最大值CH24_PWM_VAL=2000;//设置最大值}if(tmp_buf[8]==0xf0&tmp_buf[9]==0xf0)//判断是否为设置电调最小值{CH21_PWM_VAL=1000;//设置最小值CH22_PWM_VAL=1000;//设置最小值CH23_PWM_VAL=1000;//设置最小值CH24_PWM_VAL=1000;//设置最小值}}}
本文标题:STM32f103PWM(用于电调)程序
链接地址:https://www.777doc.com/doc-2403327 .html