PIN设备介绍
RT-Thread使用PIN设备对芯片的GPIO引脚进行管理,应用程序可以通过其提供的一组PIN设备管理接口来操作GPIO。
引脚编号的获取
首先,这里的引脚编号和芯片的引脚号不是同一个概念。
RT-Thread PIN设备驱动程序把芯片的不同引脚赋予不同的编号,操作PIN设备时,需要使用引脚编号来指定对那个引脚进行操作,通常有3种方式可以获取GPIO引脚的编号,分别为API方法,宏定义方法和查看PIN驱动文件方法。
因查看PIN驱动文件方法比较麻烦,我们主要介绍前两种。
API方法
使用rt_pin_get()函数获取引脚编号
pin_number = rt_pin_get("PF.9");//获取PF9引脚编号
宏定义方法获取引脚编号(推荐)
对于STM32芯片,可以使用宏GET_PIN(PORTx, PIN)获取引脚编号
#define LED GET_PIN(F, 9) //LED定义引脚
设置引脚的输入/输出模式
引脚输入输出模式一共有5种,分别是推挽输出,开漏输出,输入,上拉输入,下拉输入。RT-Thread采用不同的宏来区分不同输入/输出模式
宏定义 | 描述 |
PIN_MODE_OUTPUT | 推挽输出 |
PIN_MODE_OUTPUT_OD | 开漏输出,硬件需外加上拉电阻 |
PIN_MODE_INPUT | 输入 |
PIN_MODE_INPUT_PULLUP | 上拉输入,悬空是为高电平 |
PIN_MODE_INPUT_PULLDOWM | 下拉输入,悬空是为低电平 |
引脚在使用前需要先设置好输入/输出模式,通过下面函数完成:
void rt_pin_mode(rt_base_t pin, rt_base_t mode);//引脚编号,输入/输出模式对应的宏
设置引脚的电平值
设置引脚输出电平函数:
void rt_pin_write(rt_base_t pin, rt_base_t value);//引脚编号,输出电平的值
输出电平:PIN_HIGH:高电平,PIN_LOW:低电平。
读取引脚的电平值
读取引脚输入电平函数
int rt_pin_read(rt_base_t pin);//引脚编号
函数返回值:PIN_HIGH:高电平,PIN_LOW:低电平。
绑定引脚中断回调函数
当引脚作为中断输入时,需要设置引脚的中断触发方式,引脚的中断触发方式有5种,分别是上升沿触发,下降沿触发,双边沿触发,高电平触发,低电平触发。
宏定义 | 描述 |
PIN_IRQ_MODE_RISING | 上升沿触发 |
PIN_IRQ_MODE_FALLING | 下降沿触发 |
PIN_IRQ_MODE_RISING_FALLING | 双边沿触发 |
PIN_IRQ_MODE_HIGH_LEVEL | 高电平触发 |
PIN_IRQ_MODE_LOW_LEVEL | 低电平触发 |
当引脚产生中断时,程序需要对中断进行响应,RT-Thread通过回调函数来相应中断。绑定中断回调函数到引脚后,当引脚有中断发生时,就会执行对应的中断回调函数。
可以使用函数将某个引脚配置为某种中断触发模式并绑定一个中断回调函数到对应的引脚:
rt_err_t rt_pin_attach_irq(rt_int32_t pin, rt_uint32_t mode, void(*hdr)(void* args), void *args);
参数 | 描述 |
pin | 引脚编号 |
mode | 中断触发方式 |
hdr | 中断回调函数指针,需要自己编写 |
args | 中断回调函数的参数,不需要写RT_NULL |
返回 | 绑定成功:RT_EOK 绑定失败:错误代码 |
脱离引脚中断回调函数
如果不希望响应中断,或者想要更换中断响应函数:
rt_err_t rt_pin_detach_irq(rt_uint32_t pin);
使能中断
使能或关闭指定引脚的中断
rt_err_t rt_pin_irq_enable(rt_base_t pin, rt_uint32_t enabled);
其中,enabled:PIN_IRQ_ENABLE(使能中断) PIN_IRQ_DISABLE(关闭中断)