我是在精英板PWM例程上做的修改,保留了原本的PB5的PWM输出,这样可以马上输出波形并观测。在Timer.c中添加了PA0定时器5的代码,波形通过PA0检测,并把OLED显示添加到了工程,最后以OLED显示输出。用示波器测PB5输出频率为9542,stm32检测为9545,误差不大。可以在主函数中调整TIM3_PWM_Init(7542,0);来修改频率,PB5输出PWM频率=72000000/7542=9545HZ,修改第一个入口参数即可修改率 ,修改TIM_SetCompare2(TIM3,3999);可以调整占空比,占空比=3999/7542 。
制作出来的实物图如下:
单片机源程序如下:
- #include "led.h"
- #include "delay.h"
- #include "key.h"
- #include "sys.h"
- #include "usart.h"
- #include "timer.h"
- #include "oled.h"
- /*u32 fq;
- u32 CNT=0;
-
- void TIM5_IRQHandler(void)
- {
- if(TIM_GetITStatus(TIM5,TIM_IT_Update)!= RESET)
- {
- TIM_ClearITPendingBit(TIM5,TIM_IT_Update);
-
- CNT=TIM_GetCounter(TIM2);
- fq=CNT;
- printf("当前频率为:%d Hz\r\n",fq);
-
-
-
- TIM_SetCounter(TIM2,0);
- }
- }
- */
- int main(void)
- {
- delay_init(); //延时函数初始化
- //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
- uart_init(115200); //串口初始化为115200
- LED_Init(); //LED端口初始化
-
- TIM2_Init();
- TIM5_Int_Init(9999,7199);
- TIM3_PWM_Init(7542,0);
- TIM_SetCompare2(TIM3,3999);
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- OLED_Init();
- OLED_Refresh_Gram();
- //不分频。PWM频率=72000000/900=80Khz
- while(1)
- {
- TIM_Cmd(TIM2, ENABLE);
- TIM_Cmd(TIM3, ENABLE);
- TIM_Cmd(TIM5, ENABLE);
- OLED_Refresh_Gram();
-
- OLED_ShowNum(20,30,frequence,7,16);
-
- }
-
- }
复制代码
所有资料51hei提供下载:
频率计.7z
(197.89 KB, 下载次数: 108)
|