STM32CubeMX EC11旋转编码器驱动

本文介绍了如何在STM32开发中使用CubeMX进行配置,包括设置时钟和引脚,实现K2和K3引脚的电平检测,以及编写处理编码器输入的`Encoder_EC11_Scan`函数。主要内容涉及GPIO操作和串口通信,以及`main.c`中的关键代码段。
摘要由CSDN通过智能技术生成

一、接线图,外接上拉

二、CubeMX配置

时钟配置

引脚配置

 打开串口一,选择异步

生成工程

三、代码

K2引脚的下降沿检测K3引脚的电平
K2引脚的上升沿检测K3引脚的电平

串口重定向和定义引脚

/* USER CODE BEGIN Includes */

#include "stdio.h"
#define EC11_DATA_A HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_3) 
#define EC11_DATA_B   HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4)
#define EC11_DATA_key  HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5)
int fputc(int ch,FILE *f)
{
    HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,0xFFFF);
    return ch;
}
/* USER CODE END Includes */

 此处需要打开use MicroLIB

顺便打开烧录自动复位

 并取消pack选项

main.c中

/* USER CODE BEGIN 0 */
int16_t Encoder_EC11_Scan(int16_t key,int16_t EC11_A,int16_t EC11_B) 
{
  static int8_t sta=0,sta_key=0;
  int16_t ScanResult = 0;   
  if(sta_key==0 && key==1){sta_key=1;}
  else if(sta_key==1){
    if(key==0){sta_key=2;}
  }
  else if(sta_key==2){
    if(key==1){
      sta_key=0;
      ScanResult=3;
    }
  }
  if(EC11_A==0 && sta==0){
    sta=1;
  } 
  else if(sta==1){
    if(EC11_A==1){
      if(EC11_B==1){
        if(key==0){ScanResult=2;sta_key=0;}
        else {ScanResult=1;}
      }      
      else if(EC11_B==0){
        if(key==0){ScanResult=-2;sta_key=0;}
        else {ScanResult=-1;}
      }
      sta=0;
    }
  }
  if(ScanResult!=0)printf("%d\r\n",ScanResult);	//输出查看,不需要可删除
  return ScanResult;      //返回值的取值:   0:无动作;  1:正转; -1:反转;  2:按下正转; -2:按下反转; 3:只按下并松开
}

/* USER CODE END 0 */

while

 while (1)
  {	Encoder_EC11_Scan(EC11_DATA_key,EC11_DATA_A,EC11_DATA_B);
			/* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

 运行效果


 

链接: https://pan.baidu.com/s/1pvYa3uHqwQEmemLVQ-cfnA?pwd=7via 提取码: 7via 

您好!对于使用STM32CubeMX配置定时器驱动编码器电机转动,以下是一些基本的步骤: 1. 打开STM32CubeMX并创建一个新的工程。 2. 选择您的目标STM32微控制器型号,并设置所需的时钟配置。 3. 在"Pinout & Configuration"选项卡中,配置您的编码器引脚。通常,编码器包含两个信号线(A相和B相)和一个指示方向的线(Z相)。 4. 在"Configuration"选项卡中,选择并启用定时器。定时器的选择取决于您的STM32微控制器型号和可用的定时器。 5. 在定时器配置中,启用编码器模式。选择正确的计数模式(例如,上升沿、下降沿或两者)和计数方向(正向或反向)。 6. 配置编码器模式的输入引脚。通常,A相信号连接到定时器的输入通道1,B相信号连接到输入通道2,Z相信号连接到输入通道3(如果有的话)。 7. 根据需要,设置定时器的预分频器和自动重载值。这将取决于您的应用要求和编码器的工作频率。 8. 生成代码,并将其导出到您的开发环境中。 9. 在您的代码中,使用生成的HAL库函数来初始化和启动定时器。您还可以使用HAL库函数来读取编码器的计数值。 请注意,以上步骤是基于使用STM32CubeMX和HAL库的方法。如果您使用其他开发工具或库,具体的配置步骤可能会有所不同。此外,还可以根据您的应用需求进行更高级的配置,如编码器计数模式、滤波器设置等。 希望这些信息对您有所帮助!如果您还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chem4111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值