RT_Thread Studio 使用记录(1) 外设PIN
1.外设资源
开发板:正点原子F103 ZET6版本
2.程序开发
添加头文件
#include <rtdevice.h>
#include <board.h>
2.1 点灯
使用RTT提供的相关函数,位置如下
获取引脚号函数:GET_PIN(E,5)
在PIN.H出查看右侧大纲即可快速查找相关代码,主要使用rt_pin_write rt_pin_mode
实验现象如下:
程序代码如下:
#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>
#define LED_IO GET_PIN(E,5)
int main(void)
{
rt_pin_mode(LED_IO, PIN_MODE_OUTPUT);
while(1){
rt_pin_write(LED_IO, 0);
rt_thread_mdelay(500);
rt_pin_write(LED_IO, 1);
rt_thread_mdelay(500);
}
return RT_EOK;
}
2.2 按键
2.2.1 直接读取按键键值
使用print函数将结果打印在终端
rt_kprintf("value:%d\n",rt_pin_read(KEY1_IO));
2.2.2按键中断控制LED
中断相关函数
/*配置中断*/
rt_err_t rt_pin_attach_irq(rt_int32_t pin, rt_uint32_t mode,void (*hdr)(void *args), void *args);
/*中断触发模式*/
#define PIN_IRQ_MODE_RISING 0x00 /* 上升沿触发 */
#define PIN_IRQ_MODE_FALLING 0x01 /* 下降沿触发 */
#define PIN_IRQ_MODE_RISING_FALLING 0x02 /* 边沿触发(上升沿和下降沿都触发)*/
#define PIN_IRQ_MODE_HIGH_LEVEL 0x03 /* 高电平触发 */
#define PIN_IRQ_MODE_LOW_LEVEL 0x04 /* 低电平触发 */
/*中断开启*/
rt_err_t rt_pin_irq_enable(rt_base_t pin, rt_uint32_t enabled)
实验期望:按下按键实现LED反转
程序代码:
#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
//#define DBG_TAG "main"
//#define DBG_LVL DBG_LOG
#include <rtdbg.h>
#define LED_IO GET_PIN(E,5)
#define KEY1_IO GET_PIN(E,3)
#define KEY0_IO GET_PIN(E,4)
int flag=0;
//回调函数
void KEY_CallBack_Function(void *args)
{
flag=!flag;
rt_pin_write(LED_IO, flag);
}
int main(void)
{
rt_pin_mode(LED_IO, PIN_MODE_OUTPUT);
rt_pin_mode(KEY1_IO,PIN_MODE_INPUT);
rt_pin_mode(KEY0_IO,PIN_MODE_INPUT_PULLUP);
rt_pin_write(LED_IO, 1);//默认关灯
rt_pin_attach_irq(KEY1_IO, PIN_IRQ_MODE_FALLING , KEY_CallBack_Function, RT_NULL);
rt_pin_irq_enable(KEY1_IO, PIN_IRQ_ENABLE);
while(1){
rt_kprintf("key:%d\n",rt_pin_read(KEY1_IO));
}
return RT_EOK;
}
实验现象: