求助各位大俠。我寫了一個關于PWM的程序,程序的功能是 有一個計數器,計數的時間時1MS 然后在主程序中判斷如果計數次數是20次(大約20MS的時間)我啟動PWM中斷,這時PWM 中斷開始工作,當 產生32次中斷的時候,PWM停止,這樣就實現了每20MS 產生一個占空比是50%,PWM次數是32次的方波。但我在用示波器查看的時候,發現偶爾有抖動。不知道是我示波器的問題,還是程序的問題。示波器是泰克的TBS1072B 70MHZ 1GS/s .1個PWM 的周期是8uS。用的是STM32RCT6 PA0 口 ,定時器T2
IO 初始化 和PWM初始化程序如下:
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //TIM_CH1
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
--------------------------------------------------------------------------------------------------------------------------------------
TIM_TimeBaseStructure.TIM_Period = (pwm_arr-1); //設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =pwm_psc; //設置用來作為TIMx時鐘頻率除數的預分頻值 不分頻
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設置時鐘分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計數模式
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根據TIM_TimeBaseInitStruct中指定的參數初始化TIMx的時間基數單位
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時器模式:TIM脈沖寬度調制模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
TIM_OCInitStructure.TIM_Pulse = (pwm_arr>>1); //設置待裝入捕獲比較寄存器的脈沖值
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//TIM_OCPolarity_Low ; //輸出極性:TIM輸出比較極性高
TIM_OC1Init(TIM2, &TIM_OCInitStructure); //根據TIM_OCInitStruct中指定的參數初始化外設TIMx
TIM_ARRPreloadConfig(TIM2, ENABLE); //使能TIMx在ARR上的預裝載寄存器
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); //使能或者失能指定的 TIM2 中斷
}
|