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