|
給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)
2022-12-15 18:24 上傳
點擊文件名下載附件
|
|