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

STM32的PWM波问题

[复制链接]
kingsings 提问时间:2015-10-19 23:39 /
本帖最后由 kingsings 于 2015-10-21 21:06 编辑

           我用的是STM32F407,8MHz外部晶振,设置TIM3定时器,预分配系数84-1,重装载数2500-1,目标400Hz(2500us),但是用示波器测量是2580us,不知道这是本来就会这样,还是我的配置不对。请教高人!谢谢。
           配置代码如下:
         
  1. //主函数部分

  2. #include "drivers_usart.h"
  3. #include "drivers_oled.h"
  4. #include "drivers_keyboard.h"
  5. #include "drivers_pwm.h"

  6. bool view;

  7. void Delay(__IO uint32_t nCount);
  8. void Delay(__IO uint32_t nCount)
  9. {
  10.     while(nCount--){}
  11. }


  12. int main(void)
  13. {

  14.         TIM3_PWM_Init(2499,83);

  15.         while(1)
  16.         {
  17.                        
  18.         }//end of while(1)
  19. }

  20. //TIM3_PWM_Init函数
  21. void TIM3_PWM_Init(u32 arr,u32 psc)
  22. {
  23.   GPIO_InitTypeDef GPIO_InitStructure;
  24.   TIM_TimeBaseInitTypeDef    TIM_TimeBaseStructure;
  25.   TIM_OCInitTypeDef    TIM_OCInitStructure;

  26.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //TIM3 时钟使能
  27.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //使能porta时钟

  28.   GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_TIM3); //GA6复用为TIM3

  29.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;                        //GPIOA6
  30.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;            
  31.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
  32.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;            
  33.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;               
  34.   GPIO_Init(GPIOA,&GPIO_InitStructure);                           

  35.   TIM_TimeBaseStructure.TIM_Prescaler=psc;   
  36.   TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
  37.   TIM_TimeBaseStructure.TIM_Period=arr;   
  38.   TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
  39.   TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);

  40.   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  41.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  42.   TIM_OCInitStructure.TIM_Pulse = 0xff;
  43.   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  44.   TIM_OC1Init(TIM3, &TIM_OCInitStructure);   

  45.   TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);   

  46.   TIM_ARRPreloadConfig(TIM3,ENABLE);
  47.   TIM_Cmd(TIM3, ENABLE);   
  48. }// end of void TIM14_PWM_Init(u32 arr,u32 psc)
复制代码

     
  1. ************************ PLL Parameters *************************************/
  2. #if defined (STM32F40_41xxx) || defined (STM32F427_437xx) || defined (STM32F429_439xx) || defined (STM32F401xx)
  3. /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
  4. #define PLL_M      8     //原来为25
  5. #else /* STM32F411xE */
  6. #if defined (USE_HSE_BYPASS)
  7. #define PLL_M      8   
  8. #else /* STM32F411xE */   
  9. #define PLL_M      16
  10. #endif /* USE_HSE_BYPASS */
  11. #endif /* STM32F40_41xxx || STM32F427_437xx || STM32F429_439xx || STM32F401xx */
复制代码

               还有系统文件的HSE_VALUE已经设置为8000000。

收藏 2 评论15 发布时间:2015-10-19 23:39

举报

15个回答
神棍狗大侠 回答时间:2015-10-20 07:57:21
把你的配置代码贴上来 大家可以看看
f145f145 回答时间:2015-10-20 09:00:45
分频精度不高导致误差太大?
你好我好大家好! 回答时间:2015-10-20 09:11:24
帮顶                    
废鱼 回答时间:2015-10-20 09:24:38
楼主把配置代码发一下。
黑驴蹄子 回答时间:2015-10-20 09:33:28
代码看一下算下时间
yanlinwei 回答时间:2015-10-20 11:50:23
配置代码看看,算算呗
aoxiangwode2008 回答时间:2015-10-20 13:35:26
发代码看一下。
kingsings 回答时间:2015-10-21 21:06:22
神棍狗大侠 发表于 2015-10-20 07:57
把你的配置代码贴上来 大家可以看看

已经贴上代码了,帮忙看一下
kingsings 回答时间:2015-10-21 21:07:10

已经贴上代码了,帮忙看一下
kingsings 回答时间:2015-10-21 21:09:12
yanlinwei 发表于 2015-10-20 11:50
配置代码看看,算算呗

已经贴上代码了,帮忙看一下
kingsings 回答时间:2015-10-21 21:10:46
安 发表于 2015-10-20 09:24
楼主把配置代码发一下。

已经贴上代码了,帮忙看一下
wenyangzeng 回答时间:2015-10-21 21:55:50
楼主好像没有初始化系统时钟,通电默认是内部时钟而非外部8M晶振
pwdzsj 回答时间:2015-10-21 23:39:44
可以用官方历程试一下哦
Cux 回答时间:2015-10-21 23:53:41
帮顶
12下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版