使用N32G435CBL7芯片写出PA6引脚输出PWM的示例程序
以下是使用N32G435CBL7芯片编写PA6引脚输出PWM的示例程序:
#include "n32g43x.h"
void delay_ms(uint32_t ms) {
uint32_t i, j;
for (i = 0; i < ms; i++) {
for (j = 0; j < 2000; j++) {
// 延时约1ms,根据实际情况调整
}
}
}
void PWM_Init() {
RCC->APB1ENR1 |= RCC_APB1ENR1_TIM3EN; // 使能TIM3时钟
RCC->AHB2ENR |= RCC_AHB2ENR_GPIOAEN; // 使能GPIOA时钟
// 配置PA6引脚为复用功能
GPIOA->MODER &= ~GPIO_MODER_MODE6;
GPIOA->MODER |= GPIO_MODER_MODE6_1;
GPIOA->AFR[0] &= ~GPIO_AFRL_AFRL6;
GPIOA->AFR[0] |= GPIO_AFRL_AFRL6_0 | GPIO_AFRL_AFRL6_1; // 复用功能为TIM3_CH1
// 配置TIM3时基
TIM3->CR1 = 0; // 禁止TIM3
TIM3->ARR = 1000 - 1; // 计数器自动重装载值,设置为1000,频率为1kHz
TIM3->PSC = 80 - 1; // 预分频器,设置为80,计数频率为1MHz
TIM3->CR1 |= TIM_CR1_ARPE; // 自动重装载使能
// 配置TIM3通道1为PWM模式
TIM3->CCMR1 &= ~TIM_CCMR1_OC1M;
TIM3->CCMR1 |= TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2; // PWM模式1
TIM3->CCMR1 |= TIM_CCMR1_OC1PE; // 输出比较预装载使能
TIM3->CCER &= ~TIM_CCER_CC1P; // 输出极性高电平有效
TIM3->CCER |= TIM_CCER_CC1E; // 通道1使能
TIM3->CR1 |= TIM_CR1_CEN; // 使能TIM3
}
void PWM_SetDutyCycle(uint16_t dutyCycle) {
TIM3->CCR1 = dutyCycle; // 设置占空比,取值范围为0-999
}
int main() {
PWM_Init();
while (1) {
PWM_SetDutyCycle(500); // 设置占空比为50%
delay_ms(1000); // 延时1秒
PWM_SetDutyCycle(250); // 设置占空比为25%
delay_ms(1000); // 延时1秒
}
}
上述示例程序通过TIM3定时器和PA6引脚实现了PWM输出。在PWM_Init()函数中,配置了TIM3定时器为PWM模式,设置了频率为1kHz,占空比为50%。PWM_SetDutyCycle()函数用于设置占空比,通过修改TIM3的通道1比较寄存器的值来调整占空比。在main()函数中,循环设置占空比为50%和25%,并延时1秒。可以根据实际需求修改占空比和延时时间
原文地址: http://www.cveoy.top/t/topic/izJt 著作权归作者所有。请勿转载和采集!