无论什么开发板,最先调试的肯定是GPIO,一般用来用作指示灯或者按键输入。本篇只是很简单的GPIO应用,没有具体分析RTT框架实现。
首先先创建一个BSP文件夹,里面可以放各种板级驱动:
然后依次再在文件夹里创建相关文件:
然后再把头文件路径添加进去:
然后把新增的头文件目录添加进去:
准备工作做好,就可以添加驱动代码。这里我的开发板上的LED是PE3,按键输入是PC13 。
在led.c中代码十分简单:
#include <rtthread.h>
#include <rtdevice.h>
#include "led.h"
void led_on(void *args)
{
rt_pin_write(LED_PIN_NUM, PIN_HIGH);
}
void led_off(void *args)
{
rt_pin_write(LED_PIN_NUM, PIN_LOW);
}
void led_init(void)
{
rt_pin_mode(LED_PIN_NUM, PIN_MODE_OUTPUT);
rt_pin_write(LED_PIN_NUM, PIN_LOW);
}
这个LED_PIN_NUM其实就是PE3的索引,我在led.h中定义它:
#ifndef BSP_INC_LED_H_
#define BSP_INC_LED_H_
#ifndef LED_PIN_NUM
#define LED_PIN_NUM 67 /* PE3 */
#endif
void led_init(void);
#endif /* BSP_INC_LED_H_ */
它是怎么得到的呢?我们需要在drv_gpio.h中查询:
在这个文件中定义了一个数组,数组里面包含STM32最大引脚个数的所有引脚索引:
因为我们选择好MCU后RTT Studio就知道了我们芯片的封装,它会自动根据你芯片封装确定你芯片引脚个数,从而知道你的芯片有哪几个GPIO组,这些都不用我们关系和设置。从这个表里可以查到所有引脚的索引,比如我这里的:
然后看一下具体的引脚设置:
可以看到极其简单,其中引脚模式有几种:
然后按键使用了中断,具体设置如下:
至此框架已经搭建完毕,可以写个按键开关LED灯的测试代码:
只需要在key.c中添加:
#include <rtthread.h>
#include <rtdevice.h>
#include "key.h"
#include "led.h"
void key_irq(void *args)
{
if(rt_pin_read(LED_PIN_NUM))
rt_pin_write(LED_PIN_NUM, 0);
else
rt_pin_write(LED_PIN_NUM, 1);
}
void key_init(void)
{
led_init();
rt_pin_mode(KEY_PIN_NUM, PIN_MODE_INPUT_PULLDOWN);
rt_pin_attach_irq(KEY_PIN_NUM, PIN_IRQ_MODE_RISING, key_irq, RT_NULL);
rt_pin_irq_enable(KEY_PIN_NUM, PIN_IRQ_ENABLE);
}
然后在main.c中调用即可:
测试完成可以开始后续模块开发。