K_A22_005 基于STM32驱动360度编码器模块 串口与数码管双显示
所有资源导航
其他资料目录 直戳跳转
一、资源说明
单片机型号 | 测试条件 | 模块名称 | 代码功能 |
---|---|---|---|
STM32F103C8T6 | 晶振8M/系统时钟72M | 360度编码器模块 | STM32F103C8T6驱动360度编码器模块 串口与OLED0.96双显示 |
二、基本参数
引脚说明
360度编码器模块 | 引脚说明 |
---|---|
VCC(+) | 正极 3.3-5V供电 |
GND(-) | GND 电源负极 |
A | 信号输出A |
B | 信号输出B |
C | 与GND相通 |
三、驱动说明
对应程序:
STM32 程序:
//中断配置:
/**
* @brief 配置嵌套向量中断控制器NVIC
* @param 无
* @retval 无
*/
static void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* 配置NVIC为优先级组1 */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
/* 配置中断源:按键1 */
NVIC_InitStructure.NVIC_IRQChannel = ECC11_A_INT_EXTI_IRQ;
/* 配置抢占优先级 */
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
/* 配置子优先级 */
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
/* 使能中断通道 */
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
// /* 配置中断源:按键2,其他使用上面相关配置 */
// NVIC_InitStructure.NVIC_IRQChannel = ECC11_B_INT_EXTI_IRQ;
// NVIC_Init(&NVIC_InitStructure);
}
/**
* @brief 配置 IO为EXTI中断口,并设置中断优先级
* @param 无
* @retval 无
*/
void EXTI_Key_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
/*开启按键GPIO口的时钟*/
RCC_APB2PeriphClockCmd(ECC11_A_INT_GPIO_CLK,ENABLE);
/* 配置 NVIC 中断*/
NVIC_Configuration();
/*--------------------------ECC11_A配置-----------------------------*/
/* 选择按键用到的GPIO */
GPIO_InitStructure.GPIO_Pin = ECC11_A_INT_GPIO_PIN;
/* 配置为浮空输入 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(ECC11_A_INT_GPIO_PORT, &GPIO_InitStructure);
/* 选择EXTI的信号源 */
GPIO_EXTILineConfig(ECC11_A_INT_EXTI_PORTSOURCE, ECC11_A_INT_EXTI_PINSOURCE);
EXTI_InitStructure.EXTI_Line = ECC11_A_INT_EXTI_LINE;
/* EXTI为中断模式 */
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
/* 下降沿中断 */
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
/* 使能中断 */
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
// /*--------------------------ECC11_B配置-----------------------------*/
// /* 选择按键用到的GPIO */
GPIO_InitStructure.GPIO_Pin = ECC11_B_INT_GPIO_PIN;
/* 配置为浮空输入 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(ECC11_B_INT_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
/* 配置为浮空输入 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
中断服务函数:
void ECC11_A_IRQHandler(void)
{
//确保是否产生了EXTI Line中断
if(EXTI_GetITStatus(ECC11_A_INT_EXTI_LINE) != RESET)
{
if(!(GPIO_ReadInputDataBit(ECC11_A_INT_GPIO_PORT, ECC11_A_INT_GPIO_PIN)))
{
A_B_Flag=1;
}
if((GPIO_ReadInputDataBit(ECC11_A_INT_GPIO_PORT, ECC11_A_INT_GPIO_PIN))&&A_B_Flag)
{
EC11_flag=1;
A_B_Flag=0;
if(GPIO_ReadInputDataBit(ECC11_B_INT_GPIO_PORT, ECC11_B_INT_GPIO_PIN))
{
timer--;
if(timer>=255)
{
timer=0;
}
}
else
{
timer++;
if(timer>=255)
{
timer=255;
}
}
}
//清除中断标志位
EXTI_ClearITPendingBit(ECC11_A_INT_EXTI_LINE);
}
}
四、部分代码说明
1、接线引脚定义
需要自定义引脚可在此处更改,STM32要自定义引脚的话也要注意引脚时钟使能的更改
STM32F103C8T6+360度编码器模块
//360度编码器模块引脚定义
//360度编码器模块引脚定义
#define ECC11_A_INT_GPIO_PORT GPIOA
#define ECC11_A_INT_GPIO_CLK (RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO)
#define ECC11_A_INT_GPIO_PIN GPIO_Pin_4
#define ECC11_B_INT_GPIO_PORT GPIOA
#define ECC11_B_INT_GPIO_CLK (RCC_APB2Periph_GPIOA)
#define ECC11_B_INT_GPIO_PIN GPIO_Pin_5
//数码管模块引脚定义
#define DIN_GPIO_PORT GPIOA /* GPIO端口 */
#define DIN_GPIO_CLK RCC_APB2Periph_GPIOA /* GPIO端口时钟 */
#define DIN_GPIO_PIN GPIO_Pin_1
#define CS_GPIO_PORT GPIOA /* GPIO端口 */
#define CS_GPIO_CLK RCC_APB2Periph_GPIOA /* GPIO端口时钟 */
#define CS_GPIO_PIN GPIO_Pin_2
#define CLK_GPIO_PORT GPIOA /* GPIO端口 */
#define CLK_GPIO_CLK RCC_APB2Periph_GPIOA /* GPIO端口时钟 */
#define CLK_GPIO_PIN GPIO_Pin_3
//无源蜂鸣器引脚定义PA6
GPIOA->ODR ^= GPIO_Pin_6;
五、基础知识学习与相关资料下载
1、STC89C52RC程序下载 直戳跳转
2、STM32F103C8T6程序下载
(1)串口下载 直戳跳转
(2)ST-LINK下载 直戳跳转
(3)J-LINK下载 直戳跳转
(4)DAP-LINK下载 直戳跳转
3、OLED0.96程序说明 直戳跳转
4、串口助手下载与使用
(1)安信可调试助手使用 直戳跳转
(2) sscom33串口调试助手使用 直戳跳转
(3)STC-ISP串口调试助手使用 直戳跳转
六、视频效果展示与程序资料获取
视频连接 直戳跳转
资料获取 ( 滑到最后添加群号看公告免费获取)
七、注意事项
1、VCC GND请勿接反,接反易烧
2、OLED显示异常时,排除接线接触不良
八、接线说明
STM32F103C8T6
/************************************************************************************
// 生成日期 : 2021-6-21
// 最近修改 : 2021-11-21
// 功能描述 :360度编码器测试程序
// 测试条件 : STM32F103C8T6 晶振8M 系统时钟 72M
接线
360度编码器-----------------------------STM32F103C8T6
VCC-- ----------------------------------3.3V
GND- -----------------------------------GND
A --------------------------------------PA4
B---------------------------------------PA5
数码管(MAX7219-------------------------STM32F103C8T6
VCC-- ----------------------------------5V
GND- -----------------------------------GND
DIN- -----------------------------------PA1 //
CS-- -----------------------------------PA2 //
CLK- -----------------------------------PA3 //
无源蜂鸣器模块---------------------------STM32F103C8T6
VCC-- ----------------------------------5V
GND- -----------------------------------GND
SCL- -----------------------------------PA6 //SCL
************************************************************************************/