|
给51黑电子论坛的朋友们分享一个基于STM32F4单片机的可调PWM发生器设计,包含源码
实验目的:
学习定时器的PWM功能
硬件资源:
1,DS0(连接在PF9)
2,定时器14(TIM14),使用TIM14的通道1(CH1),将TIM14_CH1输出到PF9. 从而实
现PWM输出控制DS0亮度.
实验现象:
本实验,DS0由暗到亮,再由亮到暗,再由暗到亮,依次循环.
主程序:
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "key.h"
- #include "pwm.h"
- #include "stm32f4xx_tim.h"
- //by zplove57
- //data 2016.11.10
- u32 temp1,temp2,temp3,temp4;
- u8 keyval,con1,con2,con3,con4;
- int main(void)
- {
- temp1=temp2=temp3=temp4=0;
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
- delay_init(168); //初始化延时函数
- KEY_Init();
- TIM10_PWM_Init(5000-1,112); //112M/112=1Mhz的计数频率,重装载值500,所以PWM频率为 XM/500=2Khz.(ARR,PSC)
- TIM11_PWM_Init(5000-1,112);
- while(1) //
- {
- keyval=KEY_Scan(0);
- if(keyval==1)
- {
- if (temp1==6)
- temp1=0;
- else
- temp1++;
- }
- else if(keyval==2)
- {
- if (temp2==8)
- temp2=0;
- else
- temp2++;
- }
- else if(keyval==3)
- {
- if(temp3==8)
- temp3=0;
- else
- temp3++;
- }
- else if(keyval==4)
- {
- if(temp4==8)
- temp4=0;
- else
- temp4++;
- }
- else
- {
- temp1=temp1;temp2=temp2;temp3=temp3;temp4=temp4;
- }
- switch(temp1)
- {
- case 1:TIM_SetCompare1(TIM10,3500);break;//%30
- case 2:TIM_SetCompare1(TIM10,2750);break;//%45
- case 3:TIM_SetCompare1(TIM10,2000);break;//%60
- case 4:TIM_SetCompare1(TIM10,1250);break;//%75
- case 5:TIM_SetCompare1(TIM10,500);break;//%90
- default :TIM_SetCompare1(TIM10,4250);//15%
- }
- switch(temp2)
- {
- case 1:TIM_SetCompare1(TIM11,3750);break;//%25
- case 2:TIM_SetCompare1(TIM11,3250);break;//%35
- case 3:TIM_SetCompare1(TIM11,3000);break;//%40
- case 4:TIM_SetCompare1(TIM11,2750);break;//%50
- case 5:TIM_SetCompare1(TIM11,2250);break;//%60
- case 6:TIM_SetCompare1(TIM11,1750);break;//%65
- case 7:TIM_SetCompare1(TIM11,1500);break;//%70
- default :TIM_SetCompare1(TIM11,4000);//20%
- }
- switch(temp3)
- {
- case 1:TIM10->PSC=75-1;break;//300HZ
- case 2:TIM10->PSC=56-1;break;//400HZ
- case 3:TIM10->PSC=45-1;break;//500HZ
- case 4:TIM10->PSC=37-1;break;//600HZ
- case 5:TIM10->PSC=32-1;break;//700HZ
- case 6:TIM10->PSC=28-1;break;//800HZ
- case 7:TIM10->PSC=25-1;break;//900HZ
- default :TIM10->PSC=120-1;//200HZ
- }
- switch(temp4)
- {
- case 1:TIM11->PSC=56-1;break;//400HZ
- case 2:TIM11->PSC=38-1;break;//600HZ
- case 3:TIM11->PSC=28-1;break;//800HZ
- case 4:TIM11->PSC=22-1;break;//1000HZ
- case 5:TIM11->PSC=19-1;break;//1200HZ
- case 6:TIM11->PSC=16-1;break;//1400HZ
- case 7:TIM11->PSC=15-1;break;//1500HZ
- default :TIM11->PSC=111;//200HZ
- }
- }
- }
复制代码
完整代码下载:
Keil代码.7z
(298.62 KB, 下载次数: 44)
|
|