请教大神,我模仿网上的程序写了一个输出一路pwm,示波器显示pwm输出正常。但控制电机时,电机只在程序刚烧进去的时候工作了一个周期吧。后面就没反应了。。
#include "pwm.h"
/*******************************************************************************
* º¯ Êý Ãû : pwm_init
* º¯Êý¹¦ÄÜ : IO¶Ë¿Ú¼°TIM3³õʼ»¯º¯Êý
* Êä Èë : ÎÞ
* Êä ³ö : ÎÞ
*******************************************************************************/
void pwm_init()
{
GPIO_InitTypeDef GPIO_InitStructure; //ÉùÃ÷Ò»¸ö½á¹¹Ìå±äÁ¿£¬ÓÃÀ´³õʼ»¯GPIO
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//ÉùÃ÷Ò»¸ö½á¹¹Ìå±äÁ¿£¬ÓÃÀ´³õʼ»¯¶¨Ê±Æ÷
TIM_OCInitTypeDef TIM_OCInitStructure;//¸ù¾ÝTIM_OCInitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèTIMx
/* ¿ªÆôʱÖÓ */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//ledʱÖÓ
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//¶¨Ê±Æ÷3ʱÖÓ
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//pwm¹Ü½Å¸´ÓÃʱÖÓ
/* ÅäÖÃGPIOµÄģʽºÍIO¿Ú */
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//¸´ÓÃÍÆÍìÊä³ö£¨Êä³öpwmÒª²ÉÓø´ÓÃÍÆÍ죩
GPIO_Init(GPIOC,&GPIO_InitStructure);
//TIM3¶¨Ê±Æ÷³õʼ»¯
TIM_TimeBaseInitStructure.TIM_Period = 900; //²»·ÖƵ,PWM ƵÂÊ=72000/900=8Khz//ÉèÖÃ×Ô¶¯ÖØ×°ÔؼĴæÆ÷ÖÜÆÚµÄÖµ
TIM_TimeBaseInitStructure.TIM_Prescaler = 0;//ÉèÖÃÓÃÀ´×÷ΪTIMxʱÖÓƵÂÊÔ¤·ÖƵֵ£¬100Khz¼ÆÊýƵÂÊ
TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;//ÉèÖÃʱÖÓ·Ö¸î:TDTS = Tck_tim
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIMÏòÉϼÆÊýģʽ
TIM_TimeBaseInit(TIM3, & TIM_TimeBaseInitStructure);
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);//¸Ä±äÖ¸¶¨¹Ü½ÅµÄÓ³Éä //pC7
//PWM³õʼ»¯ //¸ù¾ÝTIM_OCInitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèTIMx
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//pwmģʽ
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//PWMÊä³öʹÄÜ
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//Êä³ö¼«ÐÔ
TIM_OC2Init(TIM3,&TIM_OCInitStructure);
//×¢Òâ´Ë´¦³õʼ»¯Ê±TIM_OC2Init¶ø²»ÊÇTIM_OCInit£¬·ñÔò»á³ö´í¡£ÒòΪ¹Ì¼þ¿âµÄ°æ±¾²»Ò»Ñù¡£
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);//ʹÄÜ»òÕßʧÄÜTIMxÔÚCCR2ÉϵÄԤװÔؼĴæÆ÷
TIM_Cmd(TIM3,ENABLE);//ʹÄÜ»òÕßʧÄÜTIMxÍâÉè
}
int main()
{
u32 ti=400;
pwm_init(); //PWM³õʼ»¯
TIM_SetCompare2(TIM3,ti);//½«tiÖµ·ÅÈëTIM_CCRxÀï
while(1)
{
}
} |