定时器的输出比较模式产生的PWM波的频率计算

定时器的输出比较模式产生的PWM波的频率计算的公式:72M/((2*(arr+1))*(psc+1) )

比如设置: PWM_Init(1000-1,72-1); (PWM_Init(arr,psc);) 则每路PWM频率为500Hz 。
PWM_Init(arr,psc)
{
TIM_TimeBaseStructure.TIM_Period = arr; TIM_TimeBaseStructure.TIM_Prescaler =psc;
}

GD32定时器可以用来输出PWM形,通常的做法是设置定时器的计数值和预分频值,从而控制输出PWM的周期和占空比。以下是计输出PWM频率的方法: 1. 计定时器的时钟频率 假设定时器使用的是APB2总线时钟,可以通过如下代码计定时器时钟频率: ``` #include "gd32f1x0.h" // 定义APB2时钟频率 #define APB2_CLK_FREQ SystemCoreClock // 计定时器时钟频率 uint32_t timer_clk_freq = APB2_CLK_FREQ; ``` 2. 计预分频值 预分频值可以通过以下公式计得到: ``` timer_prescaler = (timer_clk_freq / pwm_freq) / timer_period ``` 其中,pwm_freq是期望的PWM输出频率,timer_period是定时器的计数值。 例如,如果期望输出1000Hz的PWM形,定时器计数值为100,那么预分频值可以计得到: ``` timer_prescaler = (timer_clk_freq / 1000) / 100 = 72 ``` 3. 设置定时器的预分频值和计数值 根据上面计得到的预分频值和计数值,可以设置定时器的寄存器,从而输出期望的PWM形。以下是设置定时器的代码示例: ``` #include "gd32f1x0.h" // 定义APB2时钟频率 #define APB2_CLK_FREQ SystemCoreClock // 定义PWM输出频率和计数值 #define PWM_FREQ 1000 #define TIMER_PERIOD 100 int main(void) { // 计定时器时钟频率 uint32_t timer_clk_freq = APB2_CLK_FREQ; // 计预分频值 uint32_t timer_prescaler = (timer_clk_freq / PWM_FREQ) / TIMER_PERIOD; // 设置定时器的预分频值和计数值 TIMER_PSC(TIMER0) = timer_prescaler - 1; TIMER_CAR(TIMER0) = TIMER_PERIOD - 1; // 其他定时器设置,如PWM模式输出极性等 // 启动定时器 TIMER_CTL(TIMER0) |= TIMER_CTL_CNTEN; while (1) { // 循环处理其他事情 } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值