stm32f103显示和按键
更多
在STM32F103上实现显示和按键功能,通常需要以下步骤(以OLED显示和独立按键为例):
一、硬件连接
-
OLED显示模块(I²C接口)
- SCL → PB6(I²C1时钟)
- SDA → PB7(I²C1数据)
- VCC → 3.3V
- GND → GND
-
独立按键
- KEY1 → PA0(配置为上拉输入,按键接地)
- KEY2 → PA1
- 按键另一端接GND
二、软件实现
1. OLED显示驱动
// I²C初始化(CubeMX配置)
void MX_I2C1_Init(void) {
hi2c1.Instance = I2C1;
hi2c1.Init.ClockSpeed = 400000;
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
// ...其他配置
}
// OLED初始化函数
void OLED_Init(void) {
// 发送初始化指令序列
OLED_WriteCmd(0xAE); // 关闭显示
// ...更多初始化命令
OLED_WriteCmd(0xAF); // 开启显示
}
// 显示字符串示例
void OLED_ShowString(uint8_t x, uint8_t y, char *str) {
while(*str) {
OLED_ShowChar(x, y, *str);
x += 8;
str++;
}
}
2. 按键检测
// 按键初始化(GPIO配置)
void Key_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct = {0};
// 使能PA时钟
__HAL_RCC_GPIOA_CLK_ENABLE();
// PA0 PA1配置
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
// 按键扫描函数(带消抖)
uint8_t Key_Scan(void) {
static uint8_t key_up = 1;
if(key_up && (KEY1==0 || KEY2==0)) {
HAL_Delay(10); // 消抖延时
key_up = 0;
if(KEY1 == 0) return 1;
else if(KEY2 == 0) return 2;
} else if(KEY1==1 && KEY2==1) {
key_up = 1;
}
return 0;
}
3. 主程序逻辑
int main(void) {
HAL_Init();
MX_GPIO_Init();
MX_I2C1_Init();
OLED_Init();
Key_Init();
OLED_ShowString(0, 0, "Press Key:");
while(1) {
uint8_t key = Key_Scan();
if(key == 1) {
OLED_ShowString(0, 2, "KEY1 Pressed ");
} else if(key == 2) {
OLED_ShowString(0, 2, "KEY2 Pressed ");
}
HAL_Delay(50);
}
}
三、关键点说明
-
显示驱动:
- 需要根据具体显示屏型号修改初始化命令
- 可使用现成的OLED驱动库(如中景园驱动)
- 支持ASCII字符和汉字显示(需字库)
-
按键处理:
- 建议采用状态机实现长按/短按识别
- 可使用外部中断提高响应速度
- 按键消抖推荐使用定时器中断扫描
-
资源优化:
- 对于频繁刷新显示,建议使用DMA传输
- 使用双缓冲机制避免屏幕闪烁
四、扩展建议
- 使用FreeRTOS管理任务(显示刷新和按键扫描分离)
- 添加菜单系统(使用结构体实现多级菜单)
- 结合RTC模块实现时间显示
- 增加EEPROM存储用户设置
实际开发中建议:
- 使用STM32CubeMX生成初始化代码
- 分模块测试(先确保显示正常,再测试按键)
- 使用逻辑分析仪检查I²C时序
- 注意电源稳定性(显示屏供电不足会导致花屏)
STM32F103VET6
1970-01-01 08:00:00 至 1970-01-01 08:00:00
stm32f103 flash模拟eeprom
STM32F103是意法半导体(STMicroelectronics)推出的一款32位单片机系列,该系列芯片具有高性能和丰富的外设接口,广泛应用于工业控制、消费电子、汽车电子等领域。其中
2024-01-09 11:21:36
学习STM32F103的ADC功能
三勺最近在学习STM32F103的ADC功能,居然连最简单的独立模式的单通道的电压采集都不能实现,这就不能忍了,这是对智商的侮辱。
2023-10-24 16:06:03
7天热门专题
换一换
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 如何进行编码器的正确接线?接线方法介绍
- 什么是场效应管?它的作用是什么?
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- amoled屏幕和oled区别
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 苹果笔记本macbookpro18款与19款区别
- 通讯隔离作用
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机