温州平阳县网站建设兼职,html写的网页怎么在手机上看,自己给公司做网站,wordpress主题 自适应本文代码使用 HAL 库。 文章目录前言一、按键原理图二、CubeMX 创建工程三、代码讲解#xff1a;1. GPIO的输入HAL库函数#xff1a;2. 消抖#xff1a;3. 详细代码四#xff0c;实验现象#xff1a;总结前言
我们继续讲解 stm32 f103#xff0c;这篇文章将详细 为大家讲… 本文代码使用 HAL 库。 文章目录前言一、按键原理图二、CubeMX 创建工程三、代码讲解1. GPIO的输入HAL库函数2. 消抖3. 详细代码四实验现象总结前言
我们继续讲解 stm32 f103这篇文章将详细 为大家讲解 如何 使用 按键点亮 RGB 灯。 一、按键原理图
参考手册
可以 看到 板子有 4 个按键 KEY1, KEY2, KEY3, KEY4。
对应的 io 端口分别是 PA0, PG15, PC13, PE3.
以 KEY1 为例 分析
该电路接了一个 3V 的电压。 当 按键 按下时电流 流向按键然后接地则 PA0 为 低电平 0。 当按键 松开时电流流向 PA0 则 PA0 是 高电平 1。
所以: 当 PA0 为 低电平 0 时按键 按下。 当 PA0 为 高电平1 时按键 松开。
二、CubeMX 创建工程
选择芯片。 选择 Debug 模式。 选择外部时钟。 配置系统时钟在 红框中输入 72 然后点击 回车 两次即可配置好。 配置 io 引脚 为 输入引脚。 配置引脚。 设置工程模式和版本。 选取加入.c /.h文件便于编写代码。 创建工程。
三、代码讲解
由于我们采用 封装的方法来写程序所以 我们将 key 程序用一个.c .h文件封装起来这样便于我们对代码进行修改与移植。
对于 led 的代码可以参考我之前的文章STM32f103 CubeMX封装 led程序
1. GPIO的输入HAL库函数
功能读取一个GPIO引脚的电平。
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);例如 读取 K1 的电平将其重定义。
#define K1 HAL_GPIO_ReadPin(K1_GPIO_Port, K1_Pin)2. 消抖 抖动产生原因 按键按下的 瞬间 引脚的 电平 不是马上 从 高电平 变为 低电平 或者从 低电平 变成 高电平而是有一个抖动。
解决方法 可以使用加 延时 判断的办法消除这个抖动。 例如按下 K1 点亮 led #define K1 HAL_GPIO_ReadPin(K1_GPIO_Port, K1_Pin)#define Red_ON() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET)if(K1 0) {HAL_Delay(100); //消抖,延时 100 msif(K1 0) //如果按键 真的 按下{Red_ON(); //led 亮}else Red_OFF(); //led 熄灭}3. 详细代码
key.h 文件
#include main.h#define K1 HAL_GPIO_ReadPin(K1_GPIO_Port, K1_Pin) //读取 K1 电平
#define K2 HAL_GPIO_ReadPin(K2_GPIO_Port, K2_Pin) //读取 K2 电平
#define K3 HAL_GPIO_ReadPin(K3_GPIO_Port, K3_Pin) //读取 K2 电平
void Key(void);
key.c 文件
#include key.h
#include led.hvoid Key(void)
{if(K1 0){HAL_Delay(100);if(K1 0)Red_ON();else Red_OFF();}else if(K2 0){HAL_Delay(100);if(K2 0)Green_ON();else Green_OFF();}else if(K3 0){HAL_Delay(100);if(K3 0)BlUE_ON();else BlUE_OFF();}
}四实验现象
对于按键 让 RGB 闪烁的实验结果我发在了 B占有兴趣的可以看看
实验现象 总结
下一篇 讲 OLED 显示。