STM32F103C8T6:
stm32的pwm輸出只要設置好在主循環前調用一次即可, 對用的IO就可以持續的輸出PWM
TIM4配置PWM過程程序:
J-LINK仿真配置 1. 選擇“ Options for Target” 選項
2. 在“ Debug” 中選擇“Use Simulator" 注意下面的配置
3. 配置好編譯下
4. 選擇Debug模式調試
5. 進入Debug模式后選擇
6. 配置pwm輸出引腳
配置好輸出引腳直接”close“掉 7. 開始仿真運行
貼一下程序記錄下:
- /*
- //TIM4 CH1 PWM 輸出設置
- //PWM 輸出初始化
- //arr:自動重裝值
- //psc:時鐘預分頻數
- 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 外設
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能 PB 時鐘
- TIM_DeInit(TIM4);
-
- //設置該引腳為復用輸出功能,輸出 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; //復用功能輸出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化 GPIO
-
- TIM_TimeBaseStructure.TIM_Period = arr; //設置自動重裝載周期值
- TIM_TimeBaseStructure.TIM_Prescaler =psc; //設置預分頻值 不分頻
- TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設置時鐘分割:TDTS = Tck_tim
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上計數
- 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; //設置待裝入捕獲比較寄存器的脈沖值
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //OC1 高電平有效
- TIM_OC1Init(TIM4, &TIM_OCInitStructure); //根據指定的參數初始化外設 TIMx
- TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable); //CH1 預裝載使能
-
-
- TIM_OCInitStructure.TIM_Pulse = 400; //設置待裝入捕獲比較寄存器的脈沖值
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //OC2 高電平有效
- TIM_OC2Init(TIM4, &TIM_OCInitStructure); //根據指定的參數初始化外設 TIMx
- TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable); //CH2 預裝載使能
-
-
- TIM_OCInitStructure.TIM_Pulse = 600; //設置待裝入捕獲比較寄存器的脈沖值
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //OC1 高電平有效
- TIM_OC3Init(TIM4, &TIM_OCInitStructure); //根據指定的參數初始化外設 TIMx
- TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable); //CH3 預裝載使能
-
-
- TIM_OCInitStructure.TIM_Pulse = 800; //設置待裝入捕獲比較寄存器的脈沖值
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //OC1 高電平有效
- TIM_OC4Init(TIM4, &TIM_OCInitStructure); //根據指定的參數初始化外設 TIMx
- TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable); //CH4 預裝載使能
-
-
- TIM_ARRPreloadConfig(TIM4, ENABLE); //使能 TIMx 在 ARR 上的預裝載寄存器
- // TIM_CtrlPWMOutputs(TIM4,ENABLE); //MOE 主輸出使能,高級定時器必須開啟
- TIM_Cmd(TIM4, ENABLE); //使能 TIMx
- }
復制代碼
|