当前位置: 首页 > news >正文

【stm32简单外设篇】- EC11 旋转编码器(带按键)

一、适用场景
适用场景:菜单/参数旋转选择(电子设备 UI)、音量/亮度调节、机器人舵机微调、编码器计步/测速(低速)、人机交互(旋钮 + 按键)、嵌入式入门 GPIO/EXTI/TIM 实验。

二、器材清单
EC11 增量式旋转编码器(常见带按键)×1
stm32f103(或其它 STM32)开发板 ×1
若干杜邦线(公对母)×1组

三、工作原理(要点)

旋转输出信号:EC11 通常输出两路相位相差 90° 的方波(A、B),属于增量式正交编码器(quadrature encoder)。通过识别 A/B 的相位顺序即可判断旋转方向与步进。

按键信号:EC11 多带中间压下按键(SW),按键需要去抖与短/长按判定。

四、接线示意

VCC → +5V

GND → GND

标准库

PC3 →CLK

PA0 →DT

HAL库

PA6 →CLK

PA7 →DT

五、示例代码
标准库

#include "stm32f10x.h"
#include "stdio.h"
#include "bsp_SysTick.h"
#include "bsp_usart.h"int TEMP,NUM;
int cnt=0;
char show[20];void gpio_init()
{GPIO_InitTypeDef PA,PC;//使能时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);PA.GPIO_Pin = GPIO_Pin_0;PA.GPIO_Mode = GPIO_Mode_IPU;PA.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&PA);PC.GPIO_Pin = GPIO_Pin_3;	 PC.GPIO_Mode = GPIO_Mode_IPU; PC.GPIO_Speed =	GPIO_Speed_50MHz;	 GPIO_Init(GPIOC, &PC);	}
int main()
{SysTick_Init();	    	 //延时函数初始化USART_Config();	gpio_init();TEMP=GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_3);while(1){NUM = GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_3);///旋钮事件if(NUM != TEMP){if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) != NUM){ // 顺时针旋转cnt++;if(cnt>20)cnt=20;sprintf(show,"正转,num:%d\n",cnt);Usart_SendString(USART1,show);}else{ // 逆时针旋转cnt--;if(cnt<0)cnt=0;sprintf(show,"反转,num:%d\n",cnt);Usart_SendString(USART1,show);}}TEMP = NUM;}
}

HAL库

int main(void)
{/* USER CODE BEGIN 1 */char show[20]={0};/* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_TIM3_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */HAL_TIM_Encoder_Start(&htim3,TIM_CHANNEL_1);HAL_TIM_Encoder_Start(&htim3,TIM_CHANNEL_2);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){uint16_t cnt = __HAL_TIM_GET_COUNTER(&htim3)/2;sprintf(show,"Encoder=%u\r\n",cnt);HAL_UART_Transmit(&huart1,show,strlen(show),HAL_MAX_DELAY);HAL_Delay(200);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}

    六、讲解视频

    https://www.bilibili.com/video/BV1sPsPzYEnX/?spm_id_from=333.1387.upload.video_card.click&vd_source=f7dfe1b14f260b9cc3a146d2dbfd0719

    https://www.bilibili.com/video/BV1sPsPzYERd/?spm_id_from=333.1387.upload.video_card.click&vd_source=f7dfe1b14f260b9cc3a146d2dbfd0719

    https://www.bilibili.com/video/BV1bRsAzzEUa/?spm_id_from=333.1387.upload.video_card.click&vd_source=f7dfe1b14f260b9cc3a146d2dbfd0719

    http://www.dtcms.com/a/577744.html

    相关文章:

  • R语言机器学习算法实战系列(三十)多组ROC曲线分析教程
  • Linux使用tomcat发布vue打包的dist或html
  • 网站设计大概在什么价位营销型网站设计稿
  • map和set,咕咕咕!
  • .net 面试题目
  • 多光谱图像融合:IHS、PCA与小波变换的MATLAB实现
  • Responder工具在内网渗透中的应用
  • 公积金网站怎么做增员做一个网站的价格
  • 如何解析网站十堰响应式网站建设
  • 海光K100对决NVIDIA A800,AI算力谁更强?
  • h5网站建设建站网站建设后的专人维护
  • mac电脑composer命令如何指定PHP版本
  • 【代码随想录算法训练营——Day60】图论——94.城市间货物运输I、95.城市间货物运输II、96.城市间货物运输III
  • 用C++编写一个PCL可视化交互操作的简单范例
  • 建设部网站官工程质量手册农村自建房设计图120平方二层
  • 南京网站推广费用网站宣传文案有哪些
  • 安防监控领域中常用设备AI枪机摄像机
  • matlab 命令pdist, pdist2
  • 有效的括号详解 | C语言用动态数组实现栈解决
  • 2024年上半年试题一:论大数据lambda架构
  • 北斗GNSS位移监测是什么?主要有哪几种应用?
  • 【芯片设计中的时序约束:Multicycle Path与False Path深度解析】
  • 学院网站建设需求分析调研表wordpress做dropping
  • centos7利docker compose 快速部署 Elasticsearch + Kibana
  • 网站流量建设设计广告设计
  • 个体工商户可以搞网站建设免费人脉推广
  • 谷歌浏览器Google Chrome离线安装包
  • Profinet IO从站数据 转IEC104项目案例
  • 嵌入式学习笔记 - SH79F6441芯片之8051的寻址空间,位寻址与字节地址寻址
  • 项目推荐:BettaFish (微舆) - 当多智能体遇上“论坛”协作机制