OpenEdv-开源电子网

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

F407的TIM4读取编码器失败

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2022-7-16
在线时间
1 小时
发表于 2022-7-17 11:29:28 | 显示全部楼层 |阅读模式
1金钱
上代码
  1. void encode_TIM4_Init(void)
  2. {
  3.     TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  4.     TIM_ICInitTypeDef TIM_ICInitStructure;
  5.     GPIO_InitTypeDef GPIO_InitStructure;

  6.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);

  7. #if 1 // PB6|PB7
  8.     RCC_APB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
  9.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
  10.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  11.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  12.     GPIO_InitStructure.GPIO_OType = configEncode_GPIO_OType; //GPIO_OType_OD
  13.     GPIO_InitStructure.GPIO_PuPd = configEncode_GPIO_PuPd;   //GPIO_PuPd_NOPULL
  14.     GPIO_Init(GPIOB, &GPIO_InitStructure);

  15.     GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_TIM4);
  16.     GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_TIM4);
  17. #endif

  18. #if 0 // PD12|PD13
  19.     RCC_APB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);

  20.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13;
  21.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  22.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  23.     GPIO_InitStructure.GPIO_OType = configEncode_GPIO_OType;
  24.     GPIO_InitStructure.GPIO_PuPd = configEncode_GPIO_PuPd;
  25.     GPIO_Init(GPIOD, &GPIO_InitStructure);

  26.     GPIO_PinAFConfig(GPIOD, GPIO_PinSource12, GPIO_AF_TIM4);
  27.     GPIO_PinAFConfig(GPIOD, GPIO_PinSource13, GPIO_AF_TIM4);
  28. #endif

  29.     TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
  30.     TIM_TimeBaseStructure.TIM_Prescaler = 0x0;
  31.     TIM_TimeBaseStructure.TIM_Period = 0XFFFF;
  32.     TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  33.     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  34.     TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

  35.     TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);
  36.     TIM_ICStructInit(&TIM_ICInitStructure);

  37.     TIM_ICInitStructure.TIM_ICFilter = configEncode_ICFilter;
  38.     TIM_ICInit(TIM4, &TIM_ICInitStructure);

  39.     TIM_ClearFlag(TIM4, TIM_FLAG_Update);
  40.     TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);

  41.     TIM_SetCounter(TIM4, 0);
  42.     TIM_Cmd(TIM4, ENABLE);
  43. }

  44. int encode_read(TIM_TypeDef *tim)
  45. {
  46.     int cnt;
  47.     cnt = (short)tim->CNT;
  48.     tim->CNT = 0;
  49.     return cnt;
  50. }
复制代码
TIM2、3可成功读取。在实验的过程中发现一个情况,若先初始化TIM编码器再初始化UART1,会导致编码器读数(CNT)为0。先初始化UART1再初始化编码器则可进行读数。但目前TIM4仍未能读取到编码器

最佳答案

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

已解决,是GPIO的RC时钟未正确开启,错误地用到了RCC_APB1PeriphClockCmd
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2022-7-16
在线时间
1 小时
 楼主| 发表于 2022-7-17 11:29:29 | 显示全部楼层
已解决,是GPIO的RC时钟未正确开启,错误地用到了RCC_APB1PeriphClockCmd
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2021-3-3
在线时间
6 小时
发表于 2022-8-20 14:18:10 | 显示全部楼层
kk23 发表于 2022-7-17 17:35
已解决,是GPIO的RC时钟未正确开启,错误地用到了RCC_APB1PeriphClockCmd

能否贴出改后的代码,我的F4 TIM4也计数不了。
回复

使用道具 举报

2

主题

74

帖子

0

精华

高级会员

Rank: 4

积分
835
金钱
835
注册时间
2019-12-14
在线时间
53 小时
发表于 2022-10-7 18:43:03 | 显示全部楼层
原来解决的方法很简单,但找到问题却不容易。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 01:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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