STM32利用定时器1的通道1输出PWM波
注:本程序基于正点原子的第33讲PWM输出
pwm.h文件下的代码:
#ifndef __PWM_H
#define __PWM_H
#include "sys.h"
void TIM1_PWM_Init(u16 arr,u16 psc);
#endif
pwm.c文件下的代码:
#include
过程中遇到的问题:
这句话//TIM_ForcedOC1Config(TIM1,TIM_ForcedAction_Active);不能有,有这句软件仿真结果就一直是高电平。
使用此函数:TIM_ForcedOC1Config(TIM1, TIM_ForcedAction_InActive);可以将定时器端口强制置为低电平,但是PWM开启时使用TIM_ForcedOC1Config(TIM12, TIM_ForcedAction_Active);PWM就无效了。
主函数main.c的代码:
#include
软件仿真
这里要选择:周期性刷新逻辑分析仪屏幕,才能显示波形
观察得到是1MHz的方波
频率的计算:
频率设置的相关参数:
(1)TIM_TimeBaseStructure.TIM_Period ====== ARR
(2)TIM_TimeBaseStructure.TIM_Prescaler ======PSC
(3)TIM_OCInitStructure.TIM_Pulse ====== (ARR+1)/2 ------>占空比为50%
这里TIM_Pulse是设置占空比的
这里:(ARR+1)*(PSC+1) = 72MHz/1MHz =72000000/1000000 =72
(ARR+1)(PSC+1) = 72 = 8*9 → ARR = 7 , PSC = 8,
设置占空比为50%,则TIM_Pulse=(ARR+1)/2 = (7+1)/2 = 4