|
|
- #include "stm32f10x.h"
- // 初始化TIM3_CH1(PA6)為PWM輸出
- void TIM3_PWM_Init(uint16_t arr, uint16_t psc)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- TIM_OCInitTypeDef TIM_OCInitStructure;
- // 使能時(shí)鐘
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); // 使能TIM3時(shí)鐘
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 使能GPIOA時(shí)鐘
- // 配置PA6為復(fù)用推挽輸出(TIM3_CH1)
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 復(fù)用推挽輸出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- // 初始化TIM3時(shí)基單元
- TIM_TimeBaseStructure.TIM_Period = arr; // 自動(dòng)重裝載值
- TIM_TimeBaseStructure.TIM_Prescaler = psc; // 預(yù)分頻值
- TIM_TimeBaseStructure.TIM_ClockDivision = 0; // 時(shí)鐘分頻
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上計(jì)數(shù)
- TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
- // 初始化TIM3_CH1為PWM模式
- TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; // PWM模式1
- TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 使能輸出
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; // 輸出極性高
- TIM_OC1Init(TIM3, &TIM_OCInitStructure); // 配置通道1
- // 使能TIM3預(yù)裝載寄存器
- TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
- TIM_ARRPreloadConfig(TIM3, ENABLE);
- // 啟動(dòng)TIM3
- TIM_Cmd(TIM3, ENABLE);
- }
- int main(void)
- {
- uint16_t pwm_val = 0;
- uint8_t dir = 1;
- // 初始化系統(tǒng)時(shí)鐘(72MHz)
- SystemInit();
- // 初始化TIM3:PWM頻率 = 72MHz / [(psc+1)*(arr+1)]
- // 此處配置為 72MHz/(71+1)/(999+1) = 1000Hz(1kHz)
- TIM3_PWM_Init(999, 71);
- while (1)
- {
- // 緩慢改變占空比(0~100%循環(huán))
- if (dir)
- pwm_val++;
- else
- pwm_val--;
- if (pwm_val > 999)
- dir = 0;
- if (pwm_val == 0)
- dir = 1;
- // 設(shè)置PWM占空比(通過(guò)比較值控制)
- TIM_SetCompare1(TIM3, pwm_val);
- // 延時(shí)約10ms
- for (int i = 0; i < 720000; i++);
- }
- }
復(fù)制代碼 |
評(píng)分
-
查看全部評(píng)分
|