1.创建工程模板
相信大家通过学习上一篇文章《1.RTT-环境搭建》现在能熟练的创建一个标准模板了,如果不会就跳回去学习一下吧~~链接:1.RTT-环境搭建_嵌入式路上的流浪的博客-CSDN博客
建立好的工程模板编译并且下载到开发板测试是否正确
如下图下载后开发板复位一下,串口助手有日志输出就可以进行下一步了
2.开始点灯
2.1初始化GPIO硬件外设
按照学习单片机的经验来说在使用GPIO之前需要我们对GPIO的输出/输入模式还有输出速度模式等等一系列参数进行配置,但是在RT-Thread操作系统中PIN框架已经在制作bsp包的时候就已经配置好了,这个可以通过查看Settings来验证如下图
所以我们就可以直接调用RT-Thread的API来对GPIO进行操作。
2.2在main.c中编写点灯代码
以我们之前学习STM32裸机开发的经验来说我们需要在除了main.c文件里面编写代码同时也需要创建led驱动函数文件例如led.c和led.h文件,但是在RTT中由于已经默认初始化了PIN框架,我们可以省去led的驱动编写,现在只需要写led的应用子函数即可,甚至可以直接在main.c中编写控制LED,本次就是直接在main.c中对LED进行控制,然后将写好的代码添加到自动初始化中就可以啦!
战舰V3的LED原理图
#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
/* defined the LED0 pin: PB5 */
#define LED0_PIN GET_PIN(B, 5)
/* defined the LED1 pin: PE5 */
#define LED1_PIN GET_PIN(E, 5)
int main(void)
{
/* set LED0 pin mode to output */
rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
/* set LED1 pin mode to output */
rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);
while (1)
{
rt_pin_write(LED0_PIN, PIN_HIGH);
rt_pin_write(LED1_PIN, PIN_HIGH);
rt_thread_mdelay(500);
rt_pin_write(LED0_PIN, PIN_LOW);
rt_pin_write(LED1_PIN, PIN_LOW);
rt_thread_mdelay(500);
}
}
将代码写在main.c中,编译并且下载后复位开发板,两个LED灯便能每隔0.5s就改变亮灭状态。
3.分析API的用法
代码中有几个API:GET_PIN,rt_pin_mode,rt_pin_write
3.1获取引脚编号
RT-Thread 提供的引脚编号需要和芯片的引脚号区分开来,它们并不是同一个概念,引脚编号由 PIN 设备驱动程序定义,和具体的芯片相关。有3种方式可以获取引脚编号: API 接口获取、使用宏定义或者查看PIN 驱动文件。我们在代码编程中使用的是GET_PIN也就是宏定义来获取引脚编号的。首先介绍宏定义获取法,然后再补充一下另外两种获取引脚编号的方法。
3.1.1GET_PIN宏定义来获取引脚编号
如果使用 rt-thread/bsp/stm32 目录下的 BSP 则可以使用下面的宏获取引脚编号:
GET_PIN(port, pin)
获取引脚号为 PF9 的 LED0 对应的引脚编号的示例代码如下所示:
#define LED0_PIN GET_PIN(F, 9)
3.1.2使用API: rt_pin_get() 获取引脚编号
使用 rt_pin_get() 获取引脚编号,如下获取 PF9 的引脚编号:
pin_number = rt_pin_get("PF.9");
3.1.3查看驱动文件
如果使用其他没有API接口的BSP(即其他没有API:rt_pin_get()接口的开发板)则需要查看 PIN 驱动代码 drv_gpio.c 文件确认引脚编号。此文件里有一个数组存放了每个 PIN 脚对应的编号信息,如下所示(注意:老版本的RTT中是用这种方法查询编号,现在更新的BSP中是没有下面的数组的,现在最新版本BSP基本上都是有API接口的,有API接口建议优先使用API接口):
static const rt_uint16_t pins[] =
{
__STM32_PIN_DEFAULT,
__STM32_PIN_DEFAULT,
__STM32_PIN(2, A, 15),
__STM32_PIN(3, B, 5),
__STM32_PIN(4, B, 8),
__STM32_PIN_DEFAULT,
__STM32_PIN_DEFAULT,
__STM32_PIN_DEFAULT,
__STM32_PIN(8, A, 14),
__STM32_PIN(9, B, 6),
... ...
}
以__STM32_PIN(2, A, 15)为例,2 为 RT-Thread 使用的引脚编号,A 为端口号,15 为引脚号,所以 PA15 对应的引脚编号为 2。
3.2rt_pin_mode设置引脚模式
引脚在使用前需要先设置好输入或者输出模式,通过如下函数完成:
void rt_pin_mode(rt_base_t pin, rt_base_t mode);
目前 RT-Thread 支持的引脚工作模式可取如所示的 5 种宏定义值之一,每种模式对应的芯片实际支持的模式需参考 PIN 设备驱动程序的具体实现:
#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 /* 开漏输出 */
使用例子:
/* set LED0 pin mode to output */
rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
/* set LED1 pin mode to output */
rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);
3.3rt_pin_write设置引脚电平
设置引脚输出电平的函数如下所示:
void rt_pin_write(rt_base_t pin, rt_base_t value);
使用例子:
rt_pin_write(LED0_PIN, PIN_HIGH);
rt_pin_write(LED1_PIN, PIN_LOW);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)