以下是使用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秒。可以根据实际需求修改占空比和延时时间

使用N32G435CBL7芯片写出PA6引脚输出PWM的示例程序

原文地址: http://www.cveoy.top/t/topic/izJt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录