注:本程序已验证可用,但只对本店模块做过适配测试,其他模块我们没法保证一定能用
实物参考链接 直戳跳转
一、资源说明
二、基本参数
引脚说明
三、驱动说明
对应程序:
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);
}
}
四、部分代码说明
接线引脚定义
需要自定义引脚可在此处更改,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;
五、基础知识学习
STC89C52RC程序下载 直戳跳转
STM32F103C8T6程序下载
1、串口下载 直戳跳转
2、ST-LINK下载 直戳跳转
3、J-LINK下载 直戳跳转
4、DAP-LINK下载 直戳跳转
OLED0.96程序说明 直戳跳转
串口助手下载与使用
1、安信可调试助手使用 直戳跳转
2、 sscom33串口调试助手使用 直戳跳转
3、STC-ISP串口调试助手使用 直戳跳转
六、视频效果展示与程序资料获取
实物参考链接 直戳跳转
七、注意事项
1、VCC GND请勿接反,接反易烧
2、OLED显示异常时,排除接线接触不良
八、接线说明
可参考程序main.c最上面接线说明