OpenEdv-开源电子网

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

关于库函数版本PWM输出的问题

[复制链接]

1

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2017-8-4
在线时间
13 小时
发表于 2017-8-4 15:54:36 | 显示全部楼层 |阅读模式
1金钱
根据库函数版本开发指南里面的例程修改,无法输出两路PWM。首先例程是第十二章 PWM输出实验,使用的是TIM3_CH2,部分重映射。我加了一路TIM_CH1,使用部分重映射到PB.4,PB.5,修改完成后程序应该是没有问题的,但是用示波器测试只有PB.5能输出PWM,PB.4没有。然后我改成完全重映射到PC.6、PC.7后得到了我想要的结果,有大佬可以解释一下吗??

最佳答案

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

这个问题之前遇到过,你要先关闭PB4的JTAG功能,就能输出PWM
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

72

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1197
金钱
1197
注册时间
2017-7-13
在线时间
126 小时
发表于 2017-8-4 15:54:37 | 显示全部楼层
这个问题之前遇到过,你要先关闭PB4的JTAG功能,就能输出PWM
回复

使用道具 举报

1

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2017-8-4
在线时间
13 小时
 楼主| 发表于 2017-8-4 15:55:38 | 显示全部楼层
战舰V3的开发板,STM32F103ZET6
回复

使用道具 举报

1

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2017-8-4
在线时间
13 小时
 楼主| 发表于 2017-8-4 16:48:51 | 显示全部楼层
大佬大佬来指点一下
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165462
金钱
165462
注册时间
2010-12-1
在线时间
2114 小时
发表于 2017-8-7 01:57:44 | 显示全部楼层
你先不映射搞出来吧。。。总是先更一步登天。
回复

使用道具 举报

1

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2017-8-4
在线时间
13 小时
 楼主| 发表于 2017-8-8 17:25:50 | 显示全部楼层
正点原子 发表于 2017-8-7 01:57
你先不映射搞出来吧。。。总是先更一步登天。

不映射也得到了我想要的结果,请指教
回复

使用道具 举报

1

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2017-8-4
在线时间
13 小时
 楼主| 发表于 2017-8-10 10:27:00 | 显示全部楼层
正点原子 发表于 2017-8-7 01:57
你先不映射搞出来吧。。。总是先更一步登天。

解释下呗原子哥
回复

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2017-7-12
在线时间
7 小时
发表于 2017-8-10 10:36:47 | 显示全部楼层
有类似问题,前排坐等
朝九晚九
回复

使用道具 举报

11

主题

72

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1197
金钱
1197
注册时间
2017-7-13
在线时间
126 小时
发表于 2017-8-10 11:49:29 | 显示全部楼层
这问题我之前遇到,已经发过贴,原子哥帮忙解答的。
遇到问题可以现在网站搜贴,找不到后再发帖,这样效率更高。
回复

使用道具 举报

1

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2017-8-4
在线时间
13 小时
 楼主| 发表于 2017-8-10 14:37:17 | 显示全部楼层
zcw 发表于 2017-8-10 11:49
这问题我之前遇到,已经发过贴,原子哥帮忙解答的。
遇到问题可以现在网站搜贴,找不到后再发帖,这样效率 ...

之前不是没搜过贴,谁不会先找,再来发贴,发帖又慢,明明一句话可以解决的事情,这个原子哥硬要卖关子装逼,忍不住想喷他,如此对待客户
回复

使用道具 举报

4

主题

349

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1046
金钱
1046
注册时间
2017-5-19
在线时间
335 小时
发表于 2017-8-10 14:50:33 | 显示全部楼层
热i 发表于 2017-8-10 14:37
之前不是没搜过贴,谁不会先找,再来发贴,发帖又慢,明明一句话可以解决的事情,这个原子哥硬要卖关子装 ...

等你站在他的角度就不会这么想了
回复

使用道具 举报

1

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2017-8-4
在线时间
13 小时
 楼主| 发表于 2017-8-11 09:17:02 | 显示全部楼层
wxjhby 发表于 2017-8-10 14:50
等你站在他的角度就不会这么想了

那当然,钱已经赚到了嘛
回复

使用道具 举报

3

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2016-3-20
在线时间
9 小时
发表于 2017-8-13 16:05:36 | 显示全部楼层
能否上传程序,学习一下?
回复

使用道具 举报

1

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2017-8-4
在线时间
13 小时
 楼主| 发表于 2017-8-13 17:20:32 | 显示全部楼层
李鸿泉55555 发表于 2017-8-13 16:05
能否上传程序,学习一下?

程序就是例程呀,稍做修改就可以了,你去看看完全重映射 部分得映射 和不映射的相关内容就会改了
回复

使用道具 举报

3

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2016-3-20
在线时间
9 小时
发表于 2017-8-13 17:32:35 | 显示全部楼层
热i 发表于 2017-8-13 17:20
程序就是例程呀,稍做修改就可以了,你去看看完全重映射 部分得映射 和不映射的相关内容就会改了

我控制舵机    目前是TIM3- CH2    重映射和完全映射 我能看懂,也调试好了,就是通道CH2 变为CH1/CH3/CH4  我不知道怎么修改,求指教
回复

使用道具 举报

1

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2017-8-4
在线时间
13 小时
 楼主| 发表于 2017-8-14 16:04:57 | 显示全部楼层
李鸿泉55555 发表于 2017-8-13 17:32
我控制舵机    目前是TIM3- CH2    重映射和完全映射 我能看懂,也调试好了,就是通道CH2 变为CH1/CH3/CH ...

这不更简单了吗,把对应数字改了就行了啊,对应的端口,对应的函数,都只要改数字就行了
回复

使用道具 举报

3

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2016-3-20
在线时间
9 小时
发表于 2017-8-15 10:17:27 | 显示全部楼层
热i 发表于 2017-8-14 16:04
这不更简单了吗,把对应数字改了就行了啊,对应的端口,对应的函数,都只要改数字就行了

我用的精英版,程序例程里面我能进行测试的都测试了,还是在CH2,不理解怎么进行更换通道    我都试过 完全映射,但是还在PA7   不知道怎么修改变为PA6,求指教,谢谢
1.jpg
2.jpg
回复

使用道具 举报

1

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2017-8-4
在线时间
13 小时
 楼主| 发表于 2017-8-15 16:11:11 | 显示全部楼层
本帖最后由 热i 于 2017-8-15 16:13 编辑
李鸿泉55555 发表于 2017-8-15 10:17
我用的精英版,程序例程里面我能进行测试的都测试了,还是在CH2,不理解怎么进行更换通道    我都试过 完 ...


//TIM3 PWM部分初始化
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM3_PWM_Init(u16 arr,u16 psc)
{  
        GPIO_InitTypeDef                   GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef        TIM_TimeBaseStructure;
        TIM_OCInitTypeDef                 TIM_OCInitStructure;
        

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);        //使能定时器3时钟
         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);  //使能GPIO外设   
        
//        GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射  TIM3_CH2/1->PB5/4   

    //设置该引脚为复用输出功能,输出TIM3 CH1/2的PWM脉冲波形        GPIOA.6/7
        GPIO_InitStructure.GPIO_Pin        = GPIO_Pin_6|GPIO_Pin_7; //TIM3_CH1/2->PA6/7/   
        GPIO_InitStructure.GPIO_Mode    = GPIO_Mode_AF_PP;  //复用推挽输出
        GPIO_InitStructure.GPIO_Speed   = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIO
        
        //设置该引脚为复用输出功能,输出TIM3 CH3的PWM脉冲波形        GPIOB.0
        GPIO_InitStructure.GPIO_Pin       = GPIO_Pin_0; //TIM3_CH3->PB0   
        GPIO_InitStructure.GPIO_Mode    = GPIO_Mode_AF_PP;  //复用推挽输出
        GPIO_InitStructure.GPIO_Speed   = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO

    //初始化TIM3
        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(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
        
        //初始化TIM3 Channel1 PWM模式         
        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_OC1Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC1
        TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);  //使能TIM3在CCR1上的预装载寄存器               

        //初始化TIM3 Channel2 PWM模式         
        TIM_OCInitStructure.TIM_OCMode              = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
         TIM_OCInitStructure.TIM_OutputState         = TIM_OutputState_Enable; //比较输出使能
        TIM_OCInitStructure.TIM_OCPolarity           = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低
        TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC2        
        TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);  //使能TIM3在CCR2上的预装载寄存器
        
        //初始化TIM3 Channel3 PWM模式         
        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_OC3Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC3        
        TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR3上的预装载寄存器

        TIM_Cmd(TIM3, ENABLE);  //使能TIM3

}
回复

使用道具 举报

1

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2017-8-4
在线时间
13 小时
 楼主| 发表于 2017-8-15 16:15:11 | 显示全部楼层
本帖最后由 热i 于 2017-8-15 16:18 编辑
李鸿泉55555 发表于 2017-8-15 10:17
我用的精英版,程序例程里面我能进行测试的都测试了,还是在CH2,不理解怎么进行更换通道    我都试过 完 ...

我这是战舰V3板,三个通道都输出PWM波形的,没有用映射,你仔细看看对比一下
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-20 17:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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