原理图分析引脚
由此可见:
LED(blue)为PI8(低电平触发) LED(red)为PC15 (低电平触发) usekey为PH4 高为按下 (下降沿触发)
常见引脚函数
函数 | 描述 |
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_pin_attach_irq(rt_int32_t pin, rt_uint32_t mode,void (*hdr)(void *args), void *args)
事列: rt_pin_attach_irq(key1_PIN, PIN_IRQ_MODE_FALLING, flip_led, RT_NULL);
如果key1发生,下降沿,执行flip_led
启用引脚中断:
流水灯代码:
#include <rtthread.h>
#include <rtdevice.h>
#include "drv_common.h"
#define LED_PIN GET_PIN(I, 8)
#define LED_PIN1 GET_PIN(C, 15)
int main(void)
{
rt_uint32_t count = 1;
rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT);
rt_pin_mode(LED_PIN1, PIN_MODE_OUTPUT);
while(count++)
{
rt_thread_mdelay(500);
rt_pin_write(LED_PIN, PIN_HIGH);
rt_thread_mdelay(500);
rt_pin_write(LED_PIN1, PIN_HIGH);
rt_thread_mdelay(500);
rt_pin_write(LED_PIN, PIN_LOW);
rt_thread_mdelay(500);
rt_pin_write(LED_PIN1, PIN_LOW);
}
return RT_EOK;
}
按键点灯大师
#include <rtthread.h>
#include <rtdevice.h>
#include "drv_common.h"
#define LOG_TAG "button_app"
#define LOG_LVL LOG_LVL_DBG
#include <ulog.h>
#define LED1_PIN GET_PIN(I, 8)
#define key1_PIN GET_PIN(H, 4)
//按键ISR
void flip_led()
{
//读取LED_PIN_B引脚电平
int status = rt_pin_read(LED1_PIN);
//翻转LED_PIN_B引脚电平
rt_pin_write(LED1_PIN, !status);
//ISR中打印信息
LOG_D("Button is pushed!\r\n");
}
int main(void)
{
//设置LED_PIN_B引脚为输出模式
rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);
//设置USER_KEY引脚为输入模式
rt_pin_mode(key1_PIN, PIN_MODE_INPUT);
//绑定USER_KEY引脚中断回调函数
rt_pin_attach_irq(key1_PIN, PIN_IRQ_MODE_FALLING, flip_led,RT_NULL);
//PIN_IRQ_MODE_FALLING为下降沿
//使能USER_KEY引脚中断
rt_pin_irq_enable(key1_PIN, PIN_IRQ_ENABLE);
//开机将LED_PIN_B引脚设为高。
//rt_pin_write(LED1_PIN, PIN_HIGH);
return RT_EOK;
}