RT_Thread学习笔记(1) 外设PIN

本文介绍如何在RT-ThreadStudio中利用外设PIN进行点灯实验及按键控制LED的操作。主要内容包括开发环境配置、外设资源介绍、程序开发流程、点灯实验与按键中断控制LED的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}

实验现象:

在这里插入图片描述

### RT-Thread STM32F103 开发配置与示例 #### 一、开发环境搭建 为了基于 RT-Thread 操作系统进行 STM32F103 的开发,首先需要完成开发环境的搭建。通常情况下,可以选择 MDK5 或其他支持的 IDE 进行工程创建。 进入 `rt-thread\bsp\stm32` 文件夹下的特定硬件目录,例如德飞莱开发板对应的路径为 `rt-thread\bsp\stm32\stm32f103-fire-arbitrary`[^1]。在此路径下找到并双击 `project.uvprojx` 文件即可打开 MDK5 工程。此操作适用于大多数基于 RT-Thread 提供的标准 BSP 软件包中的项目初始化过程。 此外,RT-Thread 官方还提供了针对不同硬件平台的支持文档,其中提到该 BSP 不仅兼容 MDK4 和 MDK5,同时也支持 IAR 及 GCC 编译器环境[^2]。因此,在实际开发过程中可以根据个人习惯选择合适的工具链。 --- #### 二、UART 配置实例 对于 UART 外设的功能实现,可以参考官方提供的具体案例来完成串口通信功能的设计。以下是关于如何启用 UART2 中断接收以及轮询发送的一个典型流程: 1. **修改驱动头文件** 打开位于 `driver/board.h` 的驱动程序配置文件,并增加如下宏定义以支持 UART2 初始化: ```c #define BSP_USING_UART2 ``` 2. **GPIO 接口设置** 在同一文件中进一步指定 GPIO 映射关系,确保 TX/RX 引脚被正确定义用于数据传输。例如: ```c #ifdef BSP_USING_UART2 #define UART2_TX_PIN GET_PIN(A, 2) /* PA2 */ #define UART2_RX_PIN GET_PIN(A, 3) /* PA3 */ #endif ``` 3. **主函数调整** 最后一步是在项目的入口文件 `main.c` 中调用相应的 API 来启动服务。通过注册回调函数处理接收到的数据帧或者直接利用简单的打印语句验证基本连通性测试效果良好。 下面展示了一个简化版代码片段作为示范用途: ```c #include <rtthread.h> #include <board.h> int main(void) { rt_hw_board_init(); // 系统初始化 /* 创建线程或其他资源管理逻辑 */ while (1) { rt_kprintf("Hello RT-Thread!\n"); // 测试输出消息到终端窗口 rt_thread_delay(RT_TICK_PER_SECOND); // 延迟一秒再循环执行一次 } } ``` 上述方法能够帮助快速构建起基础框架结构以便于后续扩展更复杂的应用场景需求[^4]。 --- #### 三、注意事项与其他资料获取途径 值得注意的是,尽管本文档尽可能详尽描述了每一步骤的操作指南,但由于版本迭代频繁等原因可能导致某些细节存在差异。如果遇到任何疑问,则建议查阅最新发布的官方手册或是参与社区讨论寻求解决方案[^5]。 另外值得一提的是除了上述提及的内容之外还有许多额外的学习材料可供下载使用,比如大厂面试经验分享笔记等等这些都可以成为提升技能水平的重要参考资料之一。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值