更改完时钟源后,我们接下来就进行GPIO点灯,成为点灯大师
我们打开正点原子精英版的原理图,找到LED,可以看到有两个LED灯给我们进行配置,分别是PB5和PE5,根据二极管导通,为低电平即点亮,高电平熄灭
接下来就进行GPIO配置实现点灯
我们在工程的drv_common.h中可以找到一个宏,这是一个获取相应的GPIO管脚定义好的宏
#define GET_PIN(PORTx,PIN) (rt_base_t)((16 * ( ((rt_base_t)__STM32_PORT(PORTx) - (rt_base_t)GPIOA_BASE)/(0x0400UL) )) + PIN)
我们在工程的pin.c中可以找到配置GPIO的相关的函数
void rt_pin_mode(rt_base_t pin, rt_uint8_t mode)
设定指定引脚的工作模式
参数
pin: 引脚编号
mode: 工作模式
PIN_MODE_OUTPUT 普通输出模式
PIN_MODE_INPUT 输入模式
PIN_MODE_INPUT_PULLUP 上拉输入
PIN_MODE_INPUT_PULLDOWN 下拉输入
PIN_MODE_OUTPUT_OD 开漏输出模式
void rt_pin_write(rt_base_t pin, rt_uint8_t value)
设定指定引脚的输出电平
参数
pin: 引脚编号
value: 电平逻辑值
PIN_LOW 低电平
PIN_HIGH 高电平
rt_int8_t rt_pin_read(rt_base_t pin)
读取指定引脚的当前电平
参数
pin: 引脚编号
返回
PIN_LOW 低电平
PIN_HIGH 高电平
接下来我们就用上面的宏和函数,点亮开灯,成为点灯大师
#include <rtthread.h>
#include <drv_common.h>
#include <rtdevice.h>
#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>
#define RED_LED GET_PIN(B,5)
#define GREEN_LED GET_PIN(E,5)
int main(void)
{
int count = 1;
rt_pin_mode(RED_LED, PIN_MODE_OUTPUT);
rt_pin_mode(GREEN_LED, PIN_MODE_OUTPUT);
rt_pin_write(RED_LED, PIN_LOW);
rt_pin_write(GREEN_LED, PIN_LOW);
while (count++)
{
LOG_D("Hello RT-Thread!");
rt_thread_mdelay(1000);
}
return RT_EOK;
}
编译烧录,可以看到成功点灯
我们还可以通过ms级延时函数,实现流水灯和跑马灯等花式点灯
rt_err_t rt_thread_mdelay(rt_int32_t ms)
将使当前线程延迟几毫秒
参数
ms: 延时时间
返回
RT_EOK