stm32f767 pwm频率计算问题(求指教)

2019-07-20 04:40发布

    使用库函数的方式配置TIM10和TIM14两个定时器为PWM波发生器,使用相同的时钟源、预分频和重新装载值。
但测出的最终频率TIM10为300Hz,TIM14为150Hz,相差一倍。不知是什么原因,请大神请教!源码如下:

main.c
[mw_shl_code=applescript,true]int main(void)
{
    u8 dir=1;
    u16 led0pwmval=0;
    Cache_Enable();                 //´ò¿ªL1-Cache
    HAL_Init();                                        //³õʼ»¯HAL¿â
    Stm32_Clock_Init(432,25,2,9);   //ÉèÖÃʱÖÓ,216Mhz
    delay_init(216);                //ÑÓʱ³õʼ»¯
                uart_init(115200);                        //´®¿Ú³õʼ»¯
       
                TIM10_PWM_Init(2500-1,288);
                TIM14_PWM_Init(2500-1,288);
                while(1);
}[/mw_shl_code]

timer.c
[mw_shl_code=c,true]//TIM10 PWM²¿·Ö³õʼ»¯
//PWMÊä³ö³õʼ»¯
//arr£º×Ô¶¯ÖØ×°Öµ
//psc£ºÊ±ÖÓÔ¤·ÖƵÊý
void TIM10_PWM_Init(u16 arr,u16 psc)
{
          GPIO_InitTypeDef GPIO_Initure;
       
                __HAL_RCC_TIM10_CLK_ENABLE();                                   /* ?????10                 */
                __HAL_RCC_GPIOF_CLK_ENABLE();                                   /* ??GPIOF??                */
                GPIO_Initure.Pin        = GPIO_PIN_6;                           /* PF6                          */
                GPIO_Initure.Mode       = GPIO_MODE_AF_PP;                      /* ??????                 */
                GPIO_Initure.Pull       = GPIO_PULLDOWN;                        /* ??                         */
                GPIO_Initure.Speed      = GPIO_SPEED_HIGH;                      /* ??                         */
                GPIO_Initure.Alternate  = GPIO_AF3_TIM10;                       /* PF6 ???TIM10              */
                HAL_GPIO_Init(GPIOF, &GPIO_Initure);
       
    TIM10_Handler.Instance=TIM10;            //¶¨Ê±Æ÷3
    TIM10_Handler.Init.Prescaler=psc;       //¶¨Ê±Æ÷·ÖƵ
    TIM10_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;//ÏòÉϼÆÊýģʽ
    TIM10_Handler.Init.Period=arr;          //×Ô¶¯ÖØ×°ÔØÖµ
    TIM10_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;
    HAL_TIM_PWM_Init(&TIM10_Handler);       //³õʼ»&#175WM
   
    TIM10_CH4Handler.OCMode=TIM_OCMODE_PWM1; //ģʽѡÔ&#241WM1
    TIM10_CH4Handler.Pulse=arr/2;            //ÉèÖñȽÏÖµ,´ËÖµÓÃÀ´È·¶¨Õ¼¿Õ±È£¬
                                            //ĬÈϱȽÏֵΪ×Ô¶¯ÖØ×°ÔØÖµµÄÒ»°ë,¼´Õ¼¿Õ±ÈΪ50%
    TIM10_CH4Handler.OCPolarity=TIM_OCPOLARITY_LOW; //Êä³ö±È½Ï¼«ÐÔΪµÍ
    HAL_TIM_PWM_ConfigChannel(&TIM10_Handler,&TIM10_CH4Handler,TIM_CHANNEL_1);//ÅäÖÃTIM3ͨµÀ4
    HAL_TIM_PWM_Start(&TIM10_Handler,TIM_CHANNEL_1);//¿ªÆ&#244WMͨµÀ4
}

//TIM14 PWM²¿·Ö³õʼ»¯
//PWMÊä³ö³õʼ»¯
//arr£º×Ô¶¯ÖØ×°Öµ
//psc£ºÊ±ÖÓÔ¤·ÖƵÊý
void TIM14_PWM_Init(u16 arr,u16 psc)
{
          GPIO_InitTypeDef GPIO_Initure;
       
                __HAL_RCC_TIM14_CLK_ENABLE();                                   /* ?????10                 */
                __HAL_RCC_GPIOF_CLK_ENABLE();                                   /* ??GPIOF??                */
                GPIO_Initure.Pin        = GPIO_PIN_9;                           /* PF9                          */
                GPIO_Initure.Mode       = GPIO_MODE_AF_PP;                      /* ??????                 */
                GPIO_Initure.Pull       = GPIO_PULLDOWN;                        /* ??                         */
                GPIO_Initure.Speed      = GPIO_SPEED_HIGH;                      /* ??                         */
                GPIO_Initure.Alternate  = GPIO_AF9_TIM14;                       /* PF9 ???TIM14              */
                HAL_GPIO_Init(GPIOF, &GPIO_Initure);
       
    TIM14_Handler.Instance=TIM14;            //¶¨Ê±Æ÷3
    TIM14_Handler.Init.Prescaler=psc;       //¶¨Ê±Æ÷·ÖƵ
    TIM14_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;//ÏòÉϼÆÊýģʽ
    TIM14_Handler.Init.Period=arr;          //×Ô¶¯ÖØ×°ÔØÖµ
    TIM14_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;
    HAL_TIM_PWM_Init(&TIM14_Handler);       //³õʼ»&#175WM
   
    TIM14_CH4Handler.OCMode=TIM_OCMODE_PWM1; //ģʽѡÔ&#241WM1
    TIM14_CH4Handler.Pulse=arr/2;            //ÉèÖñȽÏÖµ,´ËÖµÓÃÀ´È·¶¨Õ¼¿Õ±È£¬
                                            //ĬÈϱȽÏֵΪ×Ô¶¯ÖØ×°ÔØÖµµÄÒ»°ë,¼´Õ¼¿Õ±ÈΪ50%
    TIM14_CH4Handler.OCPolarity=TIM_OCPOLARITY_LOW; //Êä³ö±È½Ï¼«ÐÔΪµÍ
    HAL_TIM_PWM_ConfigChannel(&TIM14_Handler,&TIM14_CH4Handler,TIM_CHANNEL_1);//ÅäÖÃTIM3ͨµÀ4
    HAL_TIM_PWM_Start(&TIM14_Handler,TIM_CHANNEL_1);//¿ªÆ&#244WMͨµÀ4
}[/mw_shl_code]

结果:
微信图片_20181205105550.jpg

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。