【MSPM0G3507 系列】简单的PWM频率和占空比设置
引言
最近在准备电赛的一些M0的程序,作为笔记也同时会不定期分享一些有关M0方面的小知识以及M0关于测控仪表类的的一些知识。
主要代码
点击查看代码
#include "ti_msp_dl_config.h"
/*
* 函数功能:设置 PWM 频率和占空比
* 输入参数:
* frea:频率,Hz
* duty:占空比,0-1
* Timer:定时器
* Cannel:定时器通道
*/
void Set_Freq_Duty(float_t freq, float_t duty, GPTIMER_Regs * Timer, DL_TIMER_CC_INDEX Channel) {
if (duty > 1.0f) duty = 1.0f;
else if (duty < 0.0f) duty = 0.0f;
uint32_t final_duty_val;
uint32_t final_freq_val;
final_freq_val = CPUCLK_FREQ / freq; // 频率换算
DL_TimerG_setLoadValue(Timer, final_freq_val); // 设置频率
final_duty_val = final_freq_val * (1.0f - duty); // 占空比换算
DL_TimerG_setCaptureCompareValue(Timer, final_duty_val, Channel); // 设置占空比
}
int main(void)
{
SYSCFG_DL_init();
DL_TimerG_startCounter(PWM_0_INST);
DL_TimerG_setCaptureCompareValue(PWM_0_INST, 30400, DL_TIMER_CC_0_INDEX);
while (1) {
if (!DL_GPIO_readPins(GPIO_BUTTON_PORT, GPIO_BUTTON_PIN_BUTTON_PIN)) {
Set_Freq_Duty(1000.0f, 0.05, PWM_0_INST, DL_TIMER_CC_0_INDEX);
DL_GPIO_setPins(GPIO_LED_RED_PORT, GPIO_LED_RED_PIN_LED_RED_PIN);
DL_GPIO_setPins(GPIO_LED_BLUE_PORT, GPIO_LED_BLUE_PIN_LED_BLUE_PIN);
DL_GPIO_setPins(GPIO_LED_GREEN_PORT, GPIO_LED_GREEN_PIN_LED_GREEN_PIN);
} else {
Set_Freq_Duty(500.0f, 0.05, PWM_0_INST, DL_TIMER_CC_0_INDEX);
DL_GPIO_clearPins(GPIO_LED_RED_PORT, GPIO_LED_RED_PIN_LED_RED_PIN);
DL_GPIO_clearPins(GPIO_LED_BLUE_PORT, GPIO_LED_BLUE_PIN_LED_BLUE_PIN);
DL_GPIO_clearPins(GPIO_LED_GREEN_PORT, GPIO_LED_GREEN_PIN_LED_GREEN_PIN);
}
}
}
博客导航
本文来自博客园,作者:膝盖中箭卫兵,转载请注明原文链接:https://www.cnblogs.com/Skyrim-sssuuu/p/18889125

浙公网安备 33010602011771号
https://orcid.org/0000-0001-5102-772X