OpenEdv-开源电子网

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

F407ET6定时器5编码器正交解码问题

[复制链接]

3

主题

7

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2018-10-15
在线时间
6 小时
发表于 2019-9-23 17:27:52 | 显示全部楼层 |阅读模式
5金钱
我自己画的板子,使用了3个编码器,定时器1和定时器8的正交解码模式可以用,为什么定时器5的的就不行呢,配置都是一模一样的。各位大佬求解答啊
  1. void Speed_ENC(void)
  2. {
  3.         GPIO_InitTypeDef GPIO_InitStructure;
  4.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

  5.        
  6.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);          //TIM1时钟使能   
  7.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);         //使能PORTE时钟
  8.        
  9.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);          //TIM5时钟使能   
  10.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);         //使能PORTA时钟       
  11.        
  12.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8,ENABLE);          //TIM8时钟使能   
  13.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);         //使能PORTC时钟       
  14.        
  15.         /************定时器1引脚初始化******************/
  16.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_11; //PTE9 PTE11
  17.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  18.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;       
  19.         GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
  20.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //浮空输入,其实默认就是浮空输入
  21.        
  22.         GPIO_Init(GPIOE,&GPIO_InitStructure);
  23.         /***********************************************/
  24.        
  25.        
  26.         /************定时器5引脚初始化******************/
  27.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; //PTA0 PTA1
  28.         GPIO_Init(GPIOA,&GPIO_InitStructure);
  29.         /***********************************************/
  30.        
  31.        
  32.         /***********定时器8引脚初始化*******************/
  33.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7; //PTC6 PTC7
  34.         GPIO_Init(GPIOC,&GPIO_InitStructure);
  35.         /***********************************************/
  36.        
  37.         GPIO_PinAFConfig(GPIOE,GPIO_PinSource9,GPIO_AF_TIM1); //复用位定时器1
  38.         GPIO_PinAFConfig(GPIOE,GPIO_PinSource11,GPIO_AF_TIM1); //复用位定时器1
  39.        
  40.         GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPIO_AF_TIM5); //复用位定时器5
  41.         GPIO_PinAFConfig(GPIOA,GPIO_PinSource1,GPIO_AF_TIM5); //复用位定时器5
  42.        
  43.         GPIO_PinAFConfig(GPIOC,GPIO_PinSource6,GPIO_AF_TIM8); //复用位定时器8
  44.         GPIO_PinAFConfig(GPIOC,GPIO_PinSource7,GPIO_AF_TIM8); //复用位定时器8
  45.           
  46.         TIM_TimeBaseStructure.TIM_Prescaler=0;  //定时器分频
  47.         TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  48.         TIM_TimeBaseStructure.TIM_Period=65535;   //自动重装载值
  49.        
  50.         TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);
  51.         TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure);
  52.         TIM_TimeBaseInit(TIM8,&TIM_TimeBaseStructure);
  53.        

  54.        
  55.         TIM_EncoderInterfaceConfig(TIM1,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);
  56.         TIM_EncoderInterfaceConfig(TIM5,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);
  57.         TIM_EncoderInterfaceConfig(TIM8,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);

  58.         TIM_Cmd(TIM1, ENABLE);         //使能定时器1
  59.         TIM_Cmd(TIM5, ENABLE);         //使能定时器5
  60.         TIM_Cmd(TIM8, ENABLE);         //使能定时器8


  61. }

  62. //***************TIM1计数寄存器赋值**************
  63. void TIM1_Encoder_Write(int data)
  64. {
  65.     TIM1->CNT = data;
  66. }

  67. //*************读计数TIM1个数**************
  68. int TIM1_Encoder_Read(void)
  69. {
  70.         s16 data;
  71.         data=(s16)(TIM_GetCounter(TIM1));
  72.         return (int)data;
  73. }

  74. //***************TIM5计数寄存器赋值**************
  75. void TIM5_Encoder_Write(int data)
  76. {
  77.     TIM5->CNT = data;
  78. }

  79. //*************读计数TIM5个数**************
  80. int TIM5_Encoder_Read(void)
  81. {
  82.         s16 data;
  83.         data=(s16)(TIM_GetCounter(TIM5));
  84.         return (int)data;
  85. }

  86. //***************TIM8计数寄存器赋值**************
  87. void TIM8_Encoder_Write(int data)
  88. {
  89.     TIM8->CNT = data;
  90. }

  91. //*************读计数TIM8个数**************
  92. int TIM8_Encoder_Read(void)
  93. {
  94.         s16 data;
  95.         data=(s16)(TIM_GetCounter(TIM8));
  96.         return (int)data;
  97. }
复制代码


最佳答案

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

自己解决了,检查了一下午程序,最后发现焊核心板时PA0和PA1短接了... 这篇帖子就当作f407编码器正交解码模式的参考吧 对了 定时器5是32为定时器,我的重新装载数值写错了,应该给0xffffffff
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

7

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2018-10-15
在线时间
6 小时
 楼主| 发表于 2019-9-23 17:27:53 | 显示全部楼层
本帖最后由 Nofish 于 2019-9-23 18:11 编辑

自己解决了,检查了一下午程序,最后发现焊核心板时PA0和PA1短接了...  这篇帖子就当作f407编码器正交解码模式的参考吧      对了 定时器5是32为定时器,我的重新装载数值写错了,应该给0xffffffff
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-16 19:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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