OpenEdv-开源电子网

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

求助,PWM例程如何换通道

[复制链接]

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2775
金钱
2775
注册时间
2015-6-1
在线时间
394 小时
发表于 2017-8-5 13:44:34 | 显示全部楼层 |阅读模式
1金钱
F103板子,PWM例程用的PB5,我想改成PB0,一直实现不了。想问问都需要改哪些语句
我目前是把部分映射这句去掉了,并且把PB5引脚改为PB0,再也没动别的。
如何才能更换通道呢?一个是TIM3 CH3,另一个是TIM3 CH2.没有改通道的代码呀。难道理论上四个通道应该是一起有波形吗?

最佳答案

查看完整内容[请看2#楼]

这个好解决 一般通道有变换要改三个地方TIM_OCXInit TIM_OCXPreloadConfig TIM_SetCompareX 如果你是外加LED的话 需要修改一下定时器模式TIM_OCMode
自在随心
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2017-8-1
在线时间
21 小时
发表于 2017-8-5 13:44:35 | 显示全部楼层
这个好解决   一般通道有变换要改三个地方TIM_OCXInit   TIM_OCXPreloadConfig  TIM_SetCompareX   
如果你是外加LED的话   需要修改一下定时器模式TIM_OCMode
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2775
金钱
2775
注册时间
2015-6-1
在线时间
394 小时
 楼主| 发表于 2017-8-5 13:47:05 | 显示全部楼层
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2    这句里面备注是通道2,我改为GPIO_Pin_0了,但是不知道怎么改为通道3
自在随心
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2775
金钱
2775
注册时间
2015-6-1
在线时间
394 小时
 楼主| 发表于 2017-8-5 13:56:56 | 显示全部楼层
        TIM_OC3Init(TIM3, &TIM_OCInitStructure);  //¸ù¾YTÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèTIM3 OC2

        TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);  //ê1ÄüTIM3ÔúCCR2éÏμÄÔ¤×°ÔØ¼Ä′æÆ÷
刚刚又改了这两句,好像是改通道的,不过还是不行。
我把OC2改为OC3了
自在随心
回复

使用道具 举报

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2015-3-23
在线时间
27 小时
发表于 2017-8-5 16:51:39 | 显示全部楼层
问题出在端口的设置上,按照如下配置端口:
void LED_Init(void)
{

GPIO_InitTypeDef  GPIO_InitStructure;
       
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);         //ê1ÄüPB,PE¶Ë¿úê±Öó
       
//        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);  //ê1ÄüGPIOíaéèoíAFIO¸′óÃ1|ÄüÄ£¿éê±Öó
//  GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer32¿·ÖÖØó3éä  TIM3_CH2->B5   

   //éèÖøÃòy½ÅÎa¸′óÃêä3ö1|Äü,êä3öTIM3 CH2μ&#196WMÂö3å2¨DΠ       GPIOB.5
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7; //TIM_CH2
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //¸′óÃíÆíìêä3ö
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);//3õê¼»ˉGPIO
       
       
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                             //LED1-->E.5 ¶Ë¿úÅäÖÃ, íÆíìêä3ö
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //¸′óÃíÆíìêä3ö
GPIO_Init(GPIOE, &GPIO_InitStructure);                                           //íÆíìêä3ö £¬IO¿úËù¶èÎa50MHz
GPIO_SetBits(GPIOE,GPIO_Pin_5);                                                  //PE.5 êä3ö¸ß

  
}
回复

使用道具 举报

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2015-3-23
在线时间
27 小时
发表于 2017-8-5 16:55:34 | 显示全部楼层
原子是重映射了端口,你再重映射个端口PB4,即使映射对,调试发现PB4也始终处于SETBIT状态,肯定不会出现PWM,把端口改为正常PA6,PA7复用。CH1和CH2就可以正确输出PWM。
回复

使用道具 举报

2

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2017-6-24
在线时间
18 小时
发表于 2017-8-5 17:50:50 来自手机 | 显示全部楼层
你要根据定时器复用功能通道对应在哪一个端口,然后将端口设置为复用推挽模式,再设置定时器,定时器对应的通道复用可以在芯片手册中查
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2775
金钱
2775
注册时间
2015-6-1
在线时间
394 小时
 楼主| 发表于 2017-10-24 16:08:42 | 显示全部楼层
很久没确认答案了。
这个东西是一定要看手册的,当时是落了一个东西没改,好像就是OCX的X落了一个。
自在随心
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 15:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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