OpenEdv-开源电子网

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

TIM5设置为编码器模式,导致原来能输出PWM波的PC6(TIM8 CH1)输出不了PWM

[复制链接]

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2015-7-18
在线时间
15 小时
发表于 2015-10-22 11:44:58 | 显示全部楼层 |阅读模式
5金钱
经过测试,TIM8 CH1(即PC6)本身能产生PWM,但是我在程序中加入TIM5编码模式(TIM5 CH1为PA0,TIM5 CH2为PA1)的程序之后,PC6就不能输出PWM,不知道为啥,也没存在干扰呀?
以下为程序:
1.主函数
[mw_shl_code=c,true]#include "led.h" #include "delay.h" #include "sys.h" #include "pwm.h" int main(void) { u16 led0pwmval=300; u16 ledpwmval=300; u16 Avalue; delay_init(); LED_Init(); ENC_TIM5_Init(); //TIM5编码器程序初始化 TIM8_PWM_Init(899,0); //TIM8 CH1PWM输出初始化 TIM_SetCompare1(TIM8,led0pwmval); while(1) { Avalue = TIM5->CNT; } } [/mw_shl_code]
2.定时器函数

[mw_shl_code=c,true]#include "pwm.h" #include "led.h" //TIM8 CH1 PWM输出,即PC6 void TIM8_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 ; //TIM_CH1 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); TIM_TimeBaseStructure.TIM_Period = arr; TIM_TimeBaseStructure.TIM_Prescaler =psc; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM8, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM8, TIM_OCPreload_Enable); TIM_CtrlPWMOutputs(TIM8,ENABLE); TIM_ARRPreloadConfig(TIM8, ENABLE); TIM_Cmd(TIM8, ENABLE); } //TIM5_CH1 CH2 编码模式,即PA0与PA1 void ENC_TIM5_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_ICInitTypeDef TIM_ICInitStructure; // Encoder unit connected to TIM5 GPIO_InitTypeDef GPIO_InitStructure; // TIM5 clock source enable RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); // Enable GPIOA, clock RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // Configure PA.0,1 as encoder input GPIO_StructInit(&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); // Timer configuration in Encoder mode TIM_DeInit(TIM5); TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); TIM_TimeBaseStructure.TIM_Period = 65535; TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); TIM_EncoderInterfaceConfig(TIM5, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising); TIM_ICStructInit(&TIM_ICInitStructure); TIM_ICInitStructure.TIM_ICFilter = 6; TIM_ICInit(TIM5, &TIM_ICInitStructure); // Clear all pending interrupts TIM_ClearFlag(TIM5, TIM_FLAG_Update); TIM_ITConfig(TIM5, TIM_IT_Update, ENABLE); //Reset counter TIM_SetCounter(TIM5,0); // ENC_Clear_Speed_Buffer(); TIM_Cmd(TIM5, ENABLE); } [/mw_shl_code]
TIM5 CH1 CH2编码器模式下难道与TIM8 CH1有干扰?不应该呀,一个是GPIOC,一个是GPIOA。真是让人郁闷,几天了,都这样,大家帮忙看看!谢谢


最佳答案

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

回复【4楼】bigrats: --------------------------------- 字节对其.
学到老,活到老
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-10-22 11:44:59 | 显示全部楼层
回复【4楼】bigrats:
---------------------------------
字节对其.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2015-7-18
在线时间
15 小时
 楼主| 发表于 2015-10-22 18:29:37 | 显示全部楼层
没有人遇到过这种情况吗?求解呀
学到老,活到老
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-10-22 21:47:53 | 显示全部楼层
帮顶....
回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2015-7-18
在线时间
15 小时
 楼主| 发表于 2015-10-22 22:36:09 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子哥,请问一般这种“加了一段另外的功能程序之后,原来已有程序的功能无法实现”,问题是出在哪?谢谢!
学到老,活到老
回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2015-7-18
在线时间
15 小时
 楼主| 发表于 2015-10-23 15:04:50 | 显示全部楼层
多谢原子哥,问题已经解决,就是你说的那个问题——字节对齐!厉害原子君
学到老,活到老
回复

使用道具 举报

21

主题

68

帖子

0

精华

高级会员

Rank: 4

积分
938
金钱
938
注册时间
2014-2-18
在线时间
177 小时
发表于 2016-6-25 15:17:48 | 显示全部楼层
字节对齐是什么意思啊,听不懂呢
回复

使用道具 举报

8

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2015-10-16
在线时间
45 小时
发表于 2016-6-27 15:49:53 | 显示全部楼层
bigrats 发表于 2015-10-23 15:04
多谢原子哥,问题已经解决,就是你说的那个问题——字节对齐!厉害原子君

楼主你好 请问什么是字节对齐 求解答~
回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2015-7-18
在线时间
15 小时
 楼主| 发表于 2016-6-27 15:53:10 | 显示全部楼层
就是main里面那几个定义的变量让它对齐就好了
学到老,活到老
回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2015-7-18
在线时间
15 小时
 楼主| 发表于 2016-6-27 16:02:11 | 显示全部楼层
吸血神童 发表于 2016-6-27 15:49
楼主你好 请问什么是字节对齐 求解答~

让main里面那几个定义的变量让它对齐就好了,就相当于word里的左对齐
学到老,活到老
回复

使用道具 举报

8

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2015-10-16
在线时间
45 小时
发表于 2016-6-27 16:03:25 | 显示全部楼层
bigrats 发表于 2016-6-27 16:02
让main里面那几个定义的变量让它对齐就好了,就相当于word里的左对齐

定义变量是否对齐会产生这么大的影响??? 楼主没开玩笑吧
回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2015-7-18
在线时间
15 小时
 楼主| 发表于 2016-6-27 16:09:12 | 显示全部楼层
吸血神童 发表于 2016-6-27 16:03
定义变量是否对齐会产生这么大的影响??? 楼主没开玩笑吧

不太确定,但有时候就是有影响。反正我更改过,字节对齐之后就没问题了
学到老,活到老
回复

使用道具 举报

8

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2015-10-16
在线时间
45 小时
发表于 2016-6-27 16:11:47 | 显示全部楼层
bigrats 发表于 2016-6-27 16:09
不太确定,但有时候就是有影响。反正我更改过,字节对齐之后就没问题了

奥奥 谢谢了~
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 18:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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