OpenEdv-开源电子网

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

TIM1输出PWM的问题

[复制链接]

15

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2014-4-29
在线时间
299 小时
发表于 2014-5-21 21:35:04 | 显示全部楼层 |阅读模式
楼主是新手,而且第一次发帖,分享一下自己遇到的一个小问题。

我用的是战舰开发板,想用tim1输出pwm。于是根据例程里面的 实验9 PWM输出实验 修改成TIM1的配置。
使用TIM1 的channel2输出,为PA.9管脚,因为同时也是USART1_TX管脚,所以我拔下了串口1的跳帽,用电线接到PB.5管脚(控制led0的),并把PB.5 IO口配置成了输入。
改好程序后,发现led0一直亮,并没有明暗的渐变过程,说明channel2即PA.9一直输出高电平,pwm没有正常输出。
我就去百度,了解到使用高级定时器输出pwm时必须加上这样一个配置    TIMx->BDTR |= 1<<15;  它是在把TIM1 的 BDTR寄存器的MOE位置位(第15位)
技术手册里如此描述:
MOE:  主输出使能 (Main output enable)  位15
一旦刹车输入有效,该位被硬件异步清’0’。根据AOE位的设置值,该位可以由软件清’0’或被自
动置1。它仅对配置为输出的通道有效。
0:禁止OC和OCN输出或强制为空闲状态;
1 :如果设置了相应的使能位(TIMx_CCER 寄存器的CCxE、CCxNE位) ,则开启OC和OCN输
出。

我增加了这样一行代码,果然好使了。
接下来
因为我在使用库函数版本的例程来学习stm32,所以我又去找到了执行这个功能的 库函数,并加到程序里面,同样是好用的。
   TIM_CtrlPWMOutputs(TIM1,ENABLE);


下面是配置TIM1的代码。
[mw_shl_code=c,true]void TIM1_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //?????¨?±?÷3?±?? RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); //????GPIO???è??AFIO???????????é?±?? //GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3??·??????? TIM3_CH2->B5 //?è??????????????????????,????TIM1 CH2??PWM?????¨?? GPIOA.9 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //TIM_CH2 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //???????ì???? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);//??????GPIO //??????TIM1 TIM_TimeBaseStructure.TIM_Period = arr; //?è???????????ü??????×°????????×?????×°???????÷???????? TIM_TimeBaseStructure.TIM_Prescaler =psc; //?è??????×÷??TIMx?±?????????????¤·????? TIM_TimeBaseStructure.TIM_ClockDivision = 0; //?è???±??·???:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM?ò?????????? TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //?ù??TIM_TimeBaseInitStruct?????¨????????????TIMx???±???ù?????? //??????TIM1 Channel2 PWM???? //TIM1->BDTR |= 1<<15; //????BDTR?????÷??MOE(?÷??????????),TIM1,TIM8?????¨?±?÷±??? // ?????????????ò???????ó???????????????????? TIM_CtrlPWMOutputs(TIM1,ENABLE); // ???????????ù??????????°?±??? TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //?????¨?±?÷????:TIM?????í???÷??????2 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //±??????????? TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //????????:TIM????±????????? TIM_OC2Init(TIM1, &TIM_OCInitStructure); //?ù??T???¨???????????????èTIM1 OC2 TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable); //????TIM1??CCR2?????¤×°???????÷ TIM_Cmd(TIM1, ENABLE); //????TIM1 }[/mw_shl_code]

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-21 22:17:52 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-7 22:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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