你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32f301使用tim15产生PWM输出无反应,求解

[复制链接]
xxk-43976 提问时间:2017-9-6 14:50 /
源代码如下:
/**
  * @brief  ÅäÖÃTIM15¸´ÓÃÊä³öPWMʱÓõ½µÄI/O
  * @param  ÎÞ
  * @retval ÎÞ
  */
static void TIM15_GPIO_Config(void)
{
                /*¶¨ÒåÒ»¸öGPIO_InitTypeDefÀàÐ͵ĽṹÌå*/
                GPIO_InitTypeDef GPIO_InitStructure;

                /*¿ªÆôµç»úÏà¹ØµÄGPIOÍâÉèʱÖÓ*/
                RCC_AHBPeriphClockCmd(MOTOR_TIM_GPIOA_CLK, ENABLE);

                GPIO_PinAFConfig(MOTOR_P_GPIO_PORT,MOTOR_P_PINSOURCE,MOTOR_P_AF);
                GPIO_PinAFConfig(MOTOR_N_GPIO_PORT,MOTOR_N_PINSOURCE,MOTOR_N_AF);
       
                /*µç»úÕý¼«*/                                                                                                                          
                GPIO_InitStructure.GPIO_Pin = MOTOR_P_PIN;       
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;   
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                GPIO_Init(MOTOR_P_GPIO_PORT, &GPIO_InitStructure);
               
               
    /*µç»ú¸º¼«*/                                                                                                                          
                GPIO_InitStructure.GPIO_Pin = MOTOR_N_PIN;       
    GPIO_Init(MOTOR_N_GPIO_PORT, &GPIO_InitStructure);       
//                GPIO_InitStructure.GPIO_Pin = MOTOR_N_PIN;       
//                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;   
//    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
//    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
//                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//                GPIO_Init(MOTOR_N_GPIO_PORT, &GPIO_InitStructure);
                GPIO_SetBits(MOTOR_P_GPIO_PORT,MOTOR_P_PIN);       
                GPIO_ResetBits(MOTOR_N_GPIO_PORT,MOTOR_N_PIN);               


                   
}



/**
  * @brief  ÅäÖÃMOTOR_TIMxÊä³öµÄPWMÐźŵÄģʽ£¬ÈçÖÜÆÚ¡¢¼«ÐÔ
  * @param  ÎÞ
  * @retval ÎÞ
  */
static void TIM15_Mode_Config(void)
{
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;


        // ¿ªÆôTIMx_CLK,x[2,3,4,5]
  MOTOR_TIM_APBxClock_FUN(MOTOR_TIM_CLK, ENABLE);
       
  /* ÀÛ¼Æ TIM_Period¸öºó²úÉúÒ»¸ö¸üлòÕßÖжÏ*/                 
  TIM_TimeBaseStructure.TIM_Period = 256-1;       //µ±¶¨Ê±Æ÷´Ó0¼ÆÊýµ½255£¬¼´Îª256´Î£¬ÎªÒ»¸ö¶¨Ê±ÖÜÆÚ
       
        //¶¨Ê±Æ÷ʱÖÓÔ´TIMxCLK = 2 * PCLK1  
  //                                PCLK1 = HCLK / 4
  //                                => TIMxCLK = HCLK / 2 = SystemCoreClock /2
        // ¶¨Ê±Æ÷ƵÂÊΪ = TIMxCLK/(TIM_Prescaler+1) = (SystemCoreClock /2)/((SystemCoreClock/2)/1000000)*30 = 1000000/30 = 1/30MHz

        /*»ù±¾¶¨Ê±Æ÷ÅäÖÃTIM_Prescaler¸ù¾ÝЧ¹ûÀ´ÉèÖü´¿É£¬ÖжÏÖÜÆÚС µÆÉÁ˸¿ì£¬´óÔòÉÁ˸»ºÂý*/
        TIM_TimeBaseStructure.TIM_Prescaler = 1000;//((SystemCoreClock/2)/1000000)*30-1;            
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV2 ;                 //ÉèÖÃʱÖÓ·ÖÆµÏµÊý£º²»·ÖƵ(ÕâÀïÓò»µ½)
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //ÏòÉϼÆÊýģʽ
         
        // ³õʼ»¯¶¨Ê±Æ÷TIMx, x[2,3,4,5]
        TIM_TimeBaseInit(MOTOR_TIM, &TIM_TimeBaseStructure);       
       
       
        /*PWMģʽÅäÖÃ*/
        /* PWM1 Mode configuration: Channel1 */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;                                            //ÅäÖÃΪPWMģʽ1
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;        //ʹÄÜÊä³ö
  TIM_OCInitStructure.TIM_Pulse = 100;                                                                                                                          //ÉèÖóõʼPWMÂö³å¿í¶ÈΪ0       
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;            //µ±¶¨Ê±Æ÷¼ÆÊýֵСÓÚCCR_ValʱΪµÍµçƽ
  //ʹÄÜͨµÀ  
  MOTOR_P_TIM_OCxInit(MOTOR_TIM, &TIM_OCInitStructure);                                                                
        /*ʹÄÜͨµÀÖØÔØ*/
        MOTOR_P_TIM_OCxPreloadConfig(MOTOR_TIM, TIM_OCPreload_Enable);
       
       
        /* PWM1 Mode configuration: Channel2 */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;                                            //ÅäÖÃΪPWMģʽ1
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;        //ʹÄÜÊä³ö
  TIM_OCInitStructure.TIM_Pulse = 100;                                                                                                                          //ÉèÖóõʼPWMÂö³å¿í¶ÈΪ0       
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;            //µ±¶¨Ê±Æ÷¼ÆÊýֵСÓÚCCR_ValʱΪµÍµçƽ
  //ʹÄÜͨµÀ  
  MOTOR_N_TIM_OCxInit(MOTOR_TIM, &TIM_OCInitStructure);                                                                
        /*ʹÄÜͨµÀÖØÔØ*/
        MOTOR_N_TIM_OCxPreloadConfig(MOTOR_TIM, TIM_OCPreload_Enable);
       
        TIM_ARRPreloadConfig(MOTOR_TIM, ENABLE);                        //ʹÄÜTIMÖØÔØ¼Ä´æÆ÷ARR
       
        // ʹÄܼÆÊýÆ÷
        TIM_Cmd(MOTOR_TIM, ENABLE);                                                                                                                                               
}



/********************¶¨Ê±Æ÷ͨµÀ**************************/

#define MOTOR_TIM                                                           TIM15
#define MOTOR_TIM_CLK                                                       RCC_APB2Periph_TIM15
#define MOTOR_TIM_APBxClock_FUN        RCC_APB2PeriphResetCmd

#define MOTOR_TIM_GPIOA_CLK             RCC_AHBPeriph_GPIOA


/************Õý¼«***************/

#define MOTOR_P_PIN                          GPIO_Pin_2                 
#define MOTOR_P_GPIO_PORT        GPIOA                     
#define MOTOR_P_PINSOURCE        GPIO_PinSource2
#define MOTOR_P_AF                        GPIO_AF_9

#define  MOTOR_P_TIM_OCxInit                       TIM_OC1Init            //ͨµÀ³õʼ»¯º¯Êý
#define  MOTOR_P_TIM_OCxPreloadConfig       TIM_OC1PreloadConfig //ͨµÀÖØÔØÅäÖú¯Êý

//ͨµÀ±È½Ï¼Ä´æÆ÷£¬ÒÔTIMx->CCRx·½Ê½¿É·ÃÎʸüĴæÆ÷£¬ÉèÖÃеıȽÏÖµ£¬¿ØÖÆÕ¼¿Õ±È
//ÒÔºê·â×°ºó£¬Ê¹ÓÃÕâÖÖÐÎʽ£ºMOTOR_TIMx->MOTOR_RED_CCRx £¬¿É·ÃÎʸÃͨµÀµÄ±È½Ï¼Ä´æÆ÷
#define  MOTOR_P_CCRx                               CCR1       

/************¸º¼«***************/
#define MOTOR_N_PIN                        GPIO_Pin_3                 
#define MOTOR_N_GPIO_PORT           GPIOA                     
#define MOTOR_N_PINSOURCE            GPIO_PinSource3
#define MOTOR_N_AF                            GPIO_AF_9

#define  MOTOR_N_TIM_OCxInit                      TIM_OC2Init            //ͨµÀ³õʼ»¯º¯Êý
#define  MOTOR_N_TIM_OCxPreloadConfig       TIM_OC2PreloadConfig //ͨµÀÖØÔØÅäÖú¯Êý

//ͨµÀ±È½Ï¼Ä´æÆ÷£¬ÒÔTIMx->CCRx·½Ê½¿É·ÃÎʸüĴæÆ÷£¬ÉèÖÃеıȽÏÖµ£¬¿ØÖÆÕ¼¿Õ±È
//ÒÔºê·â×°ºó£¬Ê¹ÓÃÕâÖÖÐÎʽ£ºMOTOR_TIMx->MOTOR_GREEN_CCRx £¬¿É·ÃÎʸÃͨµÀµÄ±È½Ï¼Ä´æÆ÷
#define  MOTOR_N_CCRx                       CCR2


配置参数检查多次,没有发现有问题,求大哥大姐们看看问题出在哪里,谢谢了




收藏 2 评论2 发布时间:2017-9-6 14:50

举报

2个回答
努力的人 回答时间:2018-1-24 10:54:43
把这两句删了,试一下
GPIO_SetBits(MOTOR_P_GPIO_PORT,MOTOR_P_PIN);        
GPIO_ResetBits(MOTOR_N_GPIO_PORT,MOTOR_N_PIN);

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

xmshao 回答时间:2018-1-24 12:09:44
时钟配置、管脚复用配置,好好检查下。整体上配置不复杂。
TIM15 只支持通道1/2.

你可以使用STM32CUBEMX配置测试下。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版