- #include "at32f10x.h"
- void pwm_pb13_init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- TIM_OCInitTypeDef TIM_OCInitStructure;
- // 1. 使能 GPIOB 和 TIM1 时钟
- RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOB | RCC_APB2PERIPH_TIM1, ENABLE);
- // 2. 配置 PB13 为复用推挽输出(TIM1_CH1N)
- GPIO_InitStructure.GPIO_Pin = GPIO_Pins_13;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- // 3. 初始化 TIM1 基本定时参数(设定 PWM 周期)
- TIM_TimeBaseStructure.TIM_Period = 999; // 自动重装值 ARR
- TIM_TimeBaseStructure.TIM_Prescaler = 71; // 预分频器 PSC(72MHz / (71+1) = 1MHz)
- TIM_TimeBaseStructure.TIM_ClockDivision = 0;
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
- // 4. 配置 PWM 模式,通道1
- TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
- TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable; // CH1 不输出
- TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; // 启用 CH1N 输出
- TIM_OCInitStructure.TIM_Pulse = 500; // 比较值,控制占空比(占空比 = Pulse / (Period+1))
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
- TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
- TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
- TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
- TIM_OC1Init(TIM1, &TIM_OCInitStructure);
- // 5. 启用定时器 PWM 输出
- TIM_CtrlPWMOutputs(TIM1, ENABLE); // 高级定时器需要显式开启主输出
- TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
- TIM_ARRPreloadConfig(TIM1, ENABLE);
- // 6. 启动 TIM1
- TIM_Cmd(TIM1, ENABLE);
- }
|