[STM32F1] 定时器1 PWM输出为什么会存在延迟

[复制链接]
1333|0
 楼主| grace75 发表于 2014-8-31 18:29 | 显示全部楼层 |阅读模式
PC13是发光二极管

在STM32F103C8T6上运行的时候,C13的电平变化和PWM输出不是同时的 总是存在延迟
用其他通用定时器测试过就没有类似的问题
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);        
  2.         //²»·ÖƵ¡£PWMƵÂÊ=72000000/900=80Khz
  3.         /* ---------------------------------------------------------------
  4.         TIM3CLK ¼´PCLK1=36MHz
  5.         TIM3 Configuration: generate 1 PWM signals :
  6.     TIM3CLK = 36 MHz, Prescaler = 0x0, TIM3 counter clock = 36 MHz
  7.     TIM3 ARR Register = 900 => TIM3 Frequency = TIM3 counter clock/(ARR + 1)
  8.     TIM3 Frequency = 36 KHz.
  9.     TIM3 Channel2 duty cycle = (TIM3_CCR2/ TIM3_ARR)* 100
  10.         TIM3CLK = 36 MHz, Prescaler = 0, TIM3 counter clock = 36MHz
  11.         --------------------------------------------------------------- */
  12.         /* Time base configuration */
  13.         TIM_TimeBaseStructure.TIM_Period = 20000-1; //ÉèÖÃÔÚÏÂÒ»¸ö¸üÐÂʼþ×°Èë»î¶¯µÄ×Ô¶¯ÖØ×°ÔؼĴæÆ÷ÖÜÆÚµÄÖµ         50Hz
  14.         TIM_TimeBaseStructure.TIM_Prescaler =72-1; //ÉèÖÃÓÃÀ´×÷ΪTIMxʱÖÓÆµÂʳýÊýµÄÔ¤·ÖƵֵ  ²»·ÖƵ
  15.         TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV2; //ÉèÖÃʱÖÓ·Ö¸î:TDTS = Tck_tim
  16.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIMÏòÉϼÆÊýģʽ
  17.         TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //¸ù¾ÝTIM_TimeBaseInitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯TIMxµÄʱ¼ä»ùÊýµ¥Î»
  18.         
  19.         /* Output Compare Active Mode configuration: Channel1 */
  20.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //Ñ¡Ôñ¶¨Ê±Æ÷ģʽ:TIMÂö³å¿í¶Èµ÷ÖÆÄ£Ê½2
  21.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable; //±È½ÏÊä³öʹÄÜ
  22.         TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
  23.         TIM_OCInitStructure.TIM_Pulse = 0; //ÉèÖôý×°Èë²¶»ñ±È½Ï¼Ä´æÆ÷µÄÂö³åÖµ
  24.         TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;     //??????  
  25.          TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;     //??????  

  26.         TIM_OC1Init(TIM1, &TIM_OCInitStructure);  //¸ù¾ÝTIM_OCInitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèTIMx
  27.         TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  //ʹÄÜTIMxÔÚCCR3ÉϵÄÔ¤×°ÔØ¼Ä´æÆ÷
  28.         TIM_OC2Init(TIM1, &TIM_OCInitStructure);  //¸ù¾ÝTIM_OCInitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèTIMx
  29.         TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);  //ʹÄÜTIMxÔÚCCR3ÉϵÄÔ¤×°ÔØ¼Ä´æÆ÷
  30.         TIM_OC3Init(TIM1, &TIM_OCInitStructure);  //¸ù¾ÝTIM_OCInitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèTIMx
  31.         TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);  //ʹÄÜTIMxÔÚCCR3ÉϵÄÔ¤×°ÔØ¼Ä´æÆ÷
  32.         
  33.         
  34.         TIM_ARRPreloadConfig(TIM1, ENABLE); //ʹÄÜTIMxÔÚARRÉϵÄÔ¤×°ÔØ¼Ä´æÆ÷
  35.         TIM_CtrlPWMOutputs(TIM1,ENABLE);
  36.         /* TIM3 enable counter */
  37.         TIM_Cmd(TIM1, ENABLE);  //ʹÄÜTIMxÍâÉè
  1. int main(void)
  2. {
  3.   //u16 k=0;
  4.         RCC_Configuration();
  5.   GPIO_Configuration();
  6.   PWM_Configuration();         
  7.   delay_init(72);
  8.         //USART2_Config();           //³õʼ»¯ ÅäÖÃUSART2 £¨ÓÃÓÚ½ÓÊÕMPU6050Êý¾Ý£©         
  9.         //nRF24L01_Configuration();
  10.         
  11.         
  12. #ifdef OLED
  13.         OLED_Init();
  14. #endif
  15.         /*   Æô¶¯Ç°ÏµÍ³²âÊÔ     */               
  16.   while(1)
  17.         {
  18.         delay_ms(1000);
  19.         
  20.         GPIO_WriteBit(GPIOC, GPIO_Pin_13, 1);
  21.         TIM_SetCompare3(TIM1,1500);
  22.         
  23.         delay_ms(1000);
  24.         
  25.         
  26.         GPIO_WriteBit(GPIOC, GPIO_Pin_13, 0);
  27.         TIM_SetCompare3(TIM1,2800);

  28.         }
  29. }


您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

68

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部