OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7000|回复: 1

STM32产生PWM的问题 30K以上就出不来了

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2012-12-11
在线时间
0 小时
发表于 2013-8-29 17:19:58 | 显示全部楼层 |阅读模式

void TIM4_PWM_init(CHn ch, u32 freq, u32 duty)
{
 TIM_TimeBaseInitTypeDef  TIM4_TimeBaseStructure;//?¨???á????
 TIM_OCInitTypeDef  TIM4_OCInitStructure;
 GPIO_InitTypeDef GPIO_InitStructure;

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);//????GPIOD?°????????IO?±??
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);//????TIM4?±??
 //GPIOA?????????¨?±?÷4??PWM4???¨??????????????
   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //???????ì????
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//I/O?±????50MHz
   GPIO_Init(GPIOD, &GPIO_InitStructure);//?ù?????????¨??????????GPIO?á????
 
 GPIO_PinRemapConfig(GPIO_Remap_TIM4, ENABLE); //??TIM4?????ê????????
 //?¨?±?÷?ù±?????
 TIM4_TimeBaseStructure.TIM_Period =(u16)(36000000/freq-1);//????????1000
 TIM4_TimeBaseStructure.TIM_Prescaler = 2-1;//2·???  36M
 TIM4_TimeBaseStructure.TIM_ClockDivision = 0;//???ù·???0
 TIM4_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//?ò??????
 TIM_TimeBaseInit(TIM4, &TIM4_TimeBaseStructure);

 TIM4_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//?¨?±?÷??????PWM1????
 TIM4_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//TIM????±?????????

 // PWM1?????¨??1
 if(ch==1)
 {
 TIM4_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//?¨??1????????
 TIM4_OCInitStructure.TIM_Pulse =(u16)(36000000/freq/PWM_precision*duty);//???í????200
 TIM_OC1Init(TIM4,&TIM4_OCInitStructure); //?ù??TIM_OCInitStruct?????¨????????????TIM2
 TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); //????TIM2??CCR1?????¤×°???????÷
 }
 // PWM1?????¨??2
 if (ch==2)
 {
 TIM4_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
 TIM4_OCInitStructure.TIM_Pulse =(u16)(36000000/freq/PWM_precision*duty);//???í???
 TIM_OC2Init(TIM4, &TIM4_OCInitStructure);
 TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);//????TIM2??CCR2?????¤×°???????÷
 }
 // PWM1?????¨??3
  if (ch==3)
 {
 TIM4_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
 TIM4_OCInitStructure.TIM_Pulse =(u16)(36000000/freq/PWM_precision*duty);
 TIM_OC3Init(TIM4, &TIM4_OCInitStructure);
 TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);
 }
 // PWM1?????¨??4
 if (ch==4)
 {
 TIM4_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
 TIM4_OCInitStructure.TIM_Pulse =(u16)(36000000/freq/PWM_precision*duty);
 TIM_OC4Init(TIM4, &TIM4_OCInitStructure);
 TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);
 }
 TIM_ARRPreloadConfig(TIM4, ENABLE);//????TIM2??ARR?????¤×°???????÷
 TIM_ClearITPendingBit(TIM4, TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4);//?¤???????ù????????
 /* ????????±????¨??1????*/
 TIM_ITConfig(TIM4,TIM_IT_CC1,DISABLE);
 
 TIM_Cmd(TIM4, ENABLE);//?????¨?±?÷2 
}
大家给看看

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2013-6-3
在线时间
0 小时
发表于 2013-8-29 18:08:21 | 显示全部楼层
             我的,仿真输出了200K,需要加我QQ,272895820
dd
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-14 03:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表