【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);
}
}
}
博客導航
本文來自博客園,作者:膝蓋中箭衛兵,轉載請注明原文鏈接:http://www.rzrgm.cn/Skyrim-sssuuu/p/18889125

浙公網安備 33010602011771號
https://orcid.org/0000-0001-5102-772X