STM32F103C8T6:
stm32的pwm輸出只要設(shè)置好在主循環(huán)前調(diào)用一次即可, 對(duì)用的IO就可以持續(xù)的輸出PWM
TIM4配置PWM過(guò)程程序:
J-LINK仿真配置 1. 選擇“ Options for Target” 選項(xiàng)
2. 在“ Debug” 中選擇“Use Simulator" 注意下面的配置
3. 配置好編譯下
4. 選擇Debug模式調(diào)試
5. 進(jìn)入Debug模式后選擇
6. 配置pwm輸出引腳
配置好輸出引腳直接”close“掉 7. 開(kāi)始仿真運(yùn)行
貼一下程序記錄下:
- /*
- //TIM4 CH1 PWM 輸出設(shè)置
- //PWM 輸出初始化
- //arr:自動(dòng)重裝值
- //psc:時(shí)鐘預(yù)分頻數(shù)
- STM32F103C8T6
- PB6 - TIM4_CH1
- PB7 - TIM4_CH2
- PB8 - TIM4_CH3
- PB9 - TIM4_CH4
- */
- void Tim4_PWM_Init(u16 arr,u16 psc)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- TIM_OCInitTypeDef TIM_OCInitStructure;
-
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //使能 TIMx 外設(shè)
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能 PB 時(shí)鐘
- TIM_DeInit(TIM4);
-
- //設(shè)置該引腳為復(fù)用輸出功能,輸出 TIM4 CH1 的 PWM 脈沖波形
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; //TIM4_CH1
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復(fù)用功能輸出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化 GPIO
-
- TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)置自動(dòng)重裝載周期值
- TIM_TimeBaseStructure.TIM_Prescaler =psc; //設(shè)置預(yù)分頻值 不分頻
- TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上計(jì)數(shù)
- TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //初始化 TIMx
-
-
- TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //CH1 PWM2 模式
- TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
- TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
-
-
- TIM_OCInitStructure.TIM_Pulse = 200; //設(shè)置待裝入捕獲比較寄存器的脈沖值
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //OC1 高電平有效
- TIM_OC1Init(TIM4, &TIM_OCInitStructure); //根據(jù)指定的參數(shù)初始化外設(shè) TIMx
- TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable); //CH1 預(yù)裝載使能
-
-
- TIM_OCInitStructure.TIM_Pulse = 400; //設(shè)置待裝入捕獲比較寄存器的脈沖值
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //OC2 高電平有效
- TIM_OC2Init(TIM4, &TIM_OCInitStructure); //根據(jù)指定的參數(shù)初始化外設(shè) TIMx
- TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable); //CH2 預(yù)裝載使能
-
-
- TIM_OCInitStructure.TIM_Pulse = 600; //設(shè)置待裝入捕獲比較寄存器的脈沖值
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //OC1 高電平有效
- TIM_OC3Init(TIM4, &TIM_OCInitStructure); //根據(jù)指定的參數(shù)初始化外設(shè) TIMx
- TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable); //CH3 預(yù)裝載使能
-
-
- TIM_OCInitStructure.TIM_Pulse = 800; //設(shè)置待裝入捕獲比較寄存器的脈沖值
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //OC1 高電平有效
- TIM_OC4Init(TIM4, &TIM_OCInitStructure); //根據(jù)指定的參數(shù)初始化外設(shè) TIMx
- TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable); //CH4 預(yù)裝載使能
-
-
- TIM_ARRPreloadConfig(TIM4, ENABLE); //使能 TIMx 在 ARR 上的預(yù)裝載寄存器
- // TIM_CtrlPWMOutputs(TIM4,ENABLE); //MOE 主輸出使能,高級(jí)定時(shí)器必須開(kāi)啟
- TIM_Cmd(TIM4, ENABLE); //使能 TIMx
- }
復(fù)制代碼
|