OpenEdv-开源电子网

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

stm32f4最小系统板的,编码器读数问题

[复制链接]

0

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2025-3-23
在线时间
2 小时
发表于 2025-4-12 23:23:08 | 显示全部楼层 |阅读模式
4金钱
本帖最后由 是你黑哥啊 于 2025-4-12 23:27 编辑

使用stm32f4最小系统板,配置了两个定时器来读两个编码器的值遇到问题。编码器是轮趣科技的MG513XP28电机上自带的霍尔编码器,驱动板是轮趣科技的D153C。我再配置TIM8,PC6、PC7引脚读电机1的编码值是可以读取的,但是我试了TIM1、TIM3、TIM9都读不出电机2的编码值,初始化的代码都是从TIM8上复制过来改的。然后我试了将电机二的线接在电机一的引脚上,发现可以读取电机二的,这就证明不是线的问题,也不是驱动板的问题、也不是电机编码器的问题,就是引脚配置问题,但是我已经换了几个复用的引脚就是不行。下面附上原码,希望有佬可以解答!//读电机2(注释可以不用管)
void TIM1_Int_Init(void)
{
        
        GPIO_InitTypeDef GPIO_InitStruct = {0};
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct = {0};
    TIM_ICInitTypeDef TIM_ICInitStruct = {0};

    // 1. 使能时钟(TIM8属于APB2总线)
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);

    // 2. GPIO配置(PC6=TIM8_CH1, PC7=TIM8_CH2)
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;        // 复用功能模式
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;        // 上拉电阻[5,12](@ref)
    GPIO_Init(GPIOE, &GPIO_InitStruct);

    // 3. 引脚复用映射
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource13, GPIO_AF_TIM1);  // PC6复用为TIM8_CH1
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource14, GPIO_AF_TIM1);  // PC7复用为TIM8_CH2

    // 4. 定时器基础配置
    TIM_TimeBaseStruct.TIM_Prescaler = 0;
    TIM_TimeBaseStruct.TIM_Period = 0xFFFF;
    TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStruct);

    // 5. 编码器接口配置
    TIM_EncoderInterfaceConfig(TIM1, TIM_EncoderMode_TI12,
                               TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);

    // 6. 输入捕获滤波
    TIM_ICInitStruct.TIM_ICFilter = 6;               // 参数与TIM9保持一致[12](@ref)
    TIM_ICInit(TIM1, &TIM_ICInitStruct);

    // 7. 启动定时器
    TIM_Cmd(TIM1, ENABLE);
        
}

//读电机1
void TIM8_Int_Init(void)
{
        
        GPIO_InitTypeDef GPIO_InitStruct = {0};
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct = {0};
    TIM_ICInitTypeDef TIM_ICInitStruct = {0};

    // 1. 使能时钟(TIM8属于APB2总线)
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);

    // 2. GPIO配置(PC6=TIM8_CH1, PC7=TIM8_CH2)
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;        // 复用功能模式
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;        // 上拉电阻[5,12](@ref)
    GPIO_Init(GPIOC, &GPIO_InitStruct);

    // 3. 引脚复用映射
    GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_TIM8);  // PC6复用为TIM8_CH1
    GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_TIM8);  // PC7复用为TIM8_CH2

    // 4. 定时器基础配置
    TIM_TimeBaseStruct.TIM_Prescaler = 0;
    TIM_TimeBaseStruct.TIM_Period = 0xFFFF;
    TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStruct);

    // 5. 编码器接口配置
    TIM_EncoderInterfaceConfig(TIM8, TIM_EncoderMode_TI12,
                               TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);

    // 6. 输入捕获滤波
    TIM_ICInitStruct.TIM_ICFilter = 6;               // 参数与TIM9保持一致[12](@ref)
    TIM_ICInit(TIM8, &TIM_ICInitStruct);

    // 7. 启动定时器
    TIM_Cmd(TIM8, ENABLE);
        
}

//读编码值
int Read_Encoder(u8 TIMX)
{
   int Encoder_TIM;   
   switch(TIMX)
         {
           case 1:  Encoder_TIM= (short)TIM1 -> CNT;  TIM1 -> CNT=0;break;        
           case 8:  Encoder_TIM= (short)TIM8 -> CNT;  TIM8 -> CNT=0;break;                 
           default: Encoder_TIM=0;
         }
//         if(Encoder_TIM<0)  Encoder_TIM=-Encoder_TIM;
                return Encoder_TIM;
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2025-3-23
在线时间
2 小时
 楼主| 发表于 2025-4-12 23:24:18 | 显示全部楼层
回复

使用道具 举报

14

主题

144

帖子

0

精华

高级会员

Rank: 4

积分
583
金钱
583
注册时间
2018-11-2
在线时间
118 小时
发表于 7 天前 | 显示全部楼层
用cubeMX吧
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2025-3-23
在线时间
2 小时
 楼主| 发表于 6 天前 | 显示全部楼层

就是想用标准库写出来
回复

使用道具 举报

14

主题

144

帖子

0

精华

高级会员

Rank: 4

积分
583
金钱
583
注册时间
2018-11-2
在线时间
118 小时
发表于 4 天前 | 显示全部楼层
是你黑哥啊 发表于 2025-4-15 17:06
就是想用标准库写出来

你先用CubeMX生成一下配置然后用标准库照着写,大差不差
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-21 11:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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