基于RT-THREAD STM32F429IGT6 BSP的PIN设备应用
硬件平台:野火STM32挑战者 MCU:STM32F429IGT6
开发工具:
- MDK Version:5.25
- VSCode
- env
- STM32CubeMX Version:5.2.1
- rt-thread源码 Version:4.0.1
工具获取
说明:
这次先介绍下PIN设备的操作方法,然后一步一步完成PIN设备的BSP过程。
该BSP主要实现使用PIN设备管理接口
管理按键
和led。
PIN设备的操作方法
应用程序通过RT-Thred提供的pin设备管理接口来操作GPIO,函数接口如下表:
方法名称 | 方法描述 |
---|---|
rt_pin_mode() | 设置引脚模式 |
rt_pin_write() | 设置引脚电平 |
rt_pin_read() | 读取引脚电平 |
rt_pin_attach_irq() | 绑定引脚中断回调函数 |
rt_pin_detach_irq() | 脱离引脚中断回调函数 |
rt_pin_irq_enable() | 使能引脚中断 |
1. 设置引脚模式
在使用引脚之前需要先设定引脚的工作模式,通过下面函数完成:
void rt_pin_mode(rt_base_t pin, rt_base_t mode);
参数 | 描述 |
---|---|
pin | 引脚编号 |
mode | 引脚工作模式 |
返回 | 描述 |
无 | 无 |
1.1 引脚编号获取
引脚编号是由rt-thread的pin设备管理驱动程序定义的,并不是芯片的引脚号。有2种方式可以获取引脚编号:使用宏定义GET_PIN(port, pin)
或者查看PIN 驱动文件drv_gpio.c
。
使用宏定义比较方便。比如要获取led
的引脚编号,硬件图如图1.led原理图
:
代码如下:
#define LEDR_PIN GET_PIN(H, 10)
#define LEDG_PIN GET_PIN(H, 11)
#define LEDB_PIN GET_PIN(H, 12)
再比如要获取key
的引脚编号,硬件图如图2.key原理图
:
代码如下:
#define KEY1_PIN GET_PIN(H, 10)
#define KEY2_PIN GET_PIN(C, 13)
1.2 设置引脚模式
RT-Thread目前支持的模式有下面5种:
#define PIN_MODE_OUTPUT 0x00 /*推挽输出*/
#define PIN_MODE_INPUT 0x01 /*浮空输入*/
#define PIN_MODE_INPUT_PULLUP 0x02 /*上拉输入*/
#define PIN_MODE_INPUT_PULLDOWN 0x03 /*下拉输出*/
#define PIN_MODE_OUTPUT_OD 0x04 /*开漏输出*/
2. 设置引脚电平
设置引脚电平使用如下函数完成:
void rt_pin_write(rt_base_t pin, rt_base_t value);
参数 | 描述 |
---|---|
pin | 引脚编号 |
value | 电平逻辑值:PIN_LOW (低电平),PIN_HIGH(高电平) |
返回 | 描述 |
无 | 无 |
3. 读取引脚电平
读取引脚电平使用如下函数完成:
int rt_pin_read(rt_base_t pin);
参数 | 描述 |
---|---|
pin | 引脚编号 |
value | 电平逻辑值:PIN_LOW (低电平),PIN_HIGH(高电平) |
返回 | 描述 |
PIN_LOW | 低电平 |
PIN_HIGH | 高电平 |
4. 绑定引脚中断回调函数
如果需要使用引脚的中断功能,那么需要使用如下函数将某个引脚设置为某种中断触发模式,并且绑定中断触发回调函数,当中段发生时,执行回调函数:
rt_err_t rt_pin_attach_irq(rt_int32_t pin, rt_uint32_t mode,
void (*hdr)(void *args),