简介
本文涉及如下内容:
- RT-Thread 引脚配置
- RT-Thread 引脚中断配置
- RT-Thread 读取引脚电平
- RT-Thread 设置引脚电平
- RT-Thread使用ulog软件包输出控制台信息
默认情况下,RT-Thread Studio创建的模板工程就是一个blink例程。下面我们基于ART-Pi开发板创建一个模板工程,然后通过ART-Pi的User Key按键来控制板载的蓝色LED开关。
PIN设备相关接口
应用程序通过 RT-Thread 提供的 PIN 设备管理接口来访问 GPIO,相关接口如下所示:
函数 | 描述 |
---|---|
rt_pin_mode() | 设置引脚模式 |
rt_pin_write() | 设置引脚电平 |
rt_pin_read() | 读取引脚电平 |
rt_pin_attach_irq() | 绑定引脚中断回调函数 |
rt_pin_irq_enable() | 使能引脚中断 |
rt_pin_detach_irq() | 脱离引脚中断回调函数 |
GET_PIN(port, pin) | 获取引脚编号(RT-Thread 提供的引脚编号需要和芯片的引脚号区分开来) |
创建模板工程
RT-Thread菜单:文件-新建-RT-Thread项目
,选择基于开发板
,开发板选择STM32H750-RT-ART-Pi
。
启用ulog以及中断服务程序打印
双击左侧的RT-Thread Settings
,然后右侧单击ulog日志
让它变为彩色即为启用。
双击ulog日志
,选中使能ISR日志
。目的是在ISR中打印信息。
代码
首先我们看原理图中蓝色LED和用户按键的引脚设置,分别是PI8和PH4:
代码如下:
#include <rtthread.h>
#include <rtdevice.h>
#include "drv_common.h"
//启用ulog相关头文件和宏定义
#define LOG_TAG "push_button_app"
#define LOG_LVL LOG_LVL_DBG
#include <ulog.h>
//获取蓝色LED和用户按键的引脚编号
#define LED_PIN_B GET_PIN(I, 8)
#define USER_KEY GET_PIN(H,4)
//按键ISR
void flip_led()
{
//读取LED_PIN_B引脚电平
int status = rt_pin_read(LED_PIN_B);
//翻转LED_PIN_B引脚电平
rt_pin_write(LED_PIN_B, !status);
//ISR中打印信息
LOG_D("Button is pushed!\r\n");
}
int main(void)
{
//设置LED_PIN_B引脚为输出模式
rt_pin_mode(LED_PIN_B, PIN_MODE_OUTPUT);
//设置USER_KEY引脚为输入模式
rt_pin_mode(USER_KEY, PIN_MODE_INPUT);
//绑定USER_KEY引脚中断回调函数
rt_pin_attach_irq(USER_KEY, PIN_IRQ_MODE_FALLING, flip_led, RT_NULL);
//使能USER_KEY引脚中断
rt_pin_irq_enable(USER_KEY, PIN_IRQ_ENABLE);
//开机将LED_PIN_B引脚设为高。
rt_pin_write(LED_PIN_B, PIN_HIGH);
return RT_EOK;
}
#include "stm32h7xx.h"
static int vtor_config(void)
{
/* Vector Table Relocation in Internal QSPI_FLASH */
SCB->VTOR = QSPI_BASE;
return 0;
}
INIT_BOARD_EXPORT(vtor_config);
然后每次按下User Key就会开启或者关闭蓝色LED。