RT Thread Studio使用经验——GPIO驱动实现(LED闪烁)

本文介绍了如何使用RTThreadStudio进行GPIO驱动配置,以实现STM32F103RCT6开发板上LED的闪烁功能。主要步骤包括环境准备、项目创建、RT-ThreadSettings配置、main函数编写、编译和烧录。在main函数中通过设置GPIO模式和电平变化实现了LED的周期性开关。

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

一、环境准备

使用STM32F103RCT6(正点原子Mini开发板)开发,Flash大小为256k,LED对应引脚为PA8,使用ST-Link调试器烧录。

二、项目创建

创建RT Thread标准版本项目,选择芯片开发并选择好对应的芯片型号。如图:
在这里插入图片描述

三、RT - Thread Settings配置

找到Drivers里的Pin图标左键将其点亮并保存:
在这里插入图片描述
这一步相当于要使用该芯片的GPIO资源。
此时头文件rtdevice.h的内容就会发生改变:
在这里插入图片描述
很明显drivers/pin.h被包含道工程中了,这也是设置GPIO所需要的头文件。

四、main函数编写

找到applications文件夹里的main.c,此时应该有一个伴随项目创建时的示例main程序。只需要对原有的main程序稍加改动就可以实现简单的GPIO控制了。
原本的示例代码时这样的:

/*
 * Copyright (c) 2006-2023, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2023-03-16     RT-Thread    first version
 */

#include <rtthread.h>

#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>

int main(void)
{
    int count = 1;

    while (count++)
    {
        LOG_D("Hello RT-Thread!");
        rt_thread_mdelay(1000);
    }

    return RT_EOK;
}

为了能够设置GPIO,我们首先知道设置GPIO引脚的电平需要几步:

1.导入对应的头文件rtdevice.h,上文已经讲过:

#include <rtthread.h>
#include <rtdevice.h> //RT thread标准项目中添加芯片资源的头文件
#include <drv_common.h>//驱动常用代码头文件
#include <rtdbg.h>

2.通过宏定义设置对应引脚

#define LED0_PIN    GET_PIN(A, 8) //将PA8的引脚号定义为LED0_PIN

3.在main函数中开始写程序,首先是初始化GPIO引脚,设置为推挽输出模式:

rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);//初始化GPIO引脚,设置为推挽输出模式

4.编写LED闪烁的逻辑代码:

//LED闪烁的逻辑代码
 while (1)
    {
       		 rt_pin_write(LED0_PIN, PIN_HIGH);//拉高PA8的引脚电平
             rt_thread_mdelay(500);//延时500ms
             rt_pin_write(LED0_PIN, PIN_LOW);//拉低PA8的引脚电平
             rt_thread_mdelay(500);//延时500ms
    }

5.总体代码

main.c

/*
 * Copyright (c) 2006-2023, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2023-03-16     RT-Thread    first version
 */

#include <rtthread.h>
#include <rtdevice.h>//RT thread标准项目中添加芯片资源的头文件
#include <drv_common.h>//驱动常用代码头文件
#include <rtdbg.h>

#define DBG_TAG "main"
#define DBG_LVL DBG_LOG

#define LED0_PIN    GET_PIN(A, 8) //将PA8的引脚号定义为LED0_PIN

int main(void)
{
    rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);//初始化GPIO引脚,设置为推挽输出模式

    //LED闪烁的逻辑代码
     while (1)
        {
                 rt_pin_write(LED0_PIN, PIN_HIGH);//拉高PA8的引脚电平
                 rt_thread_mdelay(500);//延时500ms
                 rt_pin_write(LED0_PIN, PIN_LOW);//拉低PA8的引脚电平
                 rt_thread_mdelay(500);//延时500ms
        }
    return RT_EOK;
}

五、编译并烧录

点击左上角的为项目"xxx"构建“Debug”,图标是一个小锤子,或者按快捷键CTRL+B编译项目。
没有问题的话,控制台会出现这个画面:
在这里插入图片描述
烧录程序快捷键CTRL+ALT+D,烧录程序到开发板。
没有问题会出现这个画面:
在这里插入图片描述

六、好啦

### 如何在 RT-Thread Studio使用 IO 功能 #### 1. 初始化 GPIO 引脚配置 为了在 RT-Thread Studio使用 IO 功能,首先需要初始化 GPIO 引脚。这通常涉及到设置引脚模式(输入/输出)、速度以及上下拉电阻等参数。 ```c #include "rtthread.h" #include "board.h" int main(void) { /* 配置 LED使用GPIO */ rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT); // 设置为输出模式[^1] while (1) { rt_thread_mdelay(500); rt_pin_write(LED_PIN, PIN_LOW); // 关闭LED rt_thread_mdelay(500); rt_pin_write(LED_PIN, PIN_HIGH); // 开启LED } } ``` 这段代码展示了如何通过 `rt_pin_mode` 函数来设定指定引脚的工作方式,并利用 `rt_pin_write` 来控制该引脚的状态变化。这里假设有一个名为 `LED_PIN` 的宏定义指向实际硬件上的某个 GPIO 引脚编号。 #### 2. 控制外部设备 除了简单的高低电平切换之外,在某些情况下可能还需要读取传感器数据或将信号发送给其他外围模块。此时可以借助于更高级别的 API 或者特定库函数来进行操作: ```c /* 假设存在一个温度传感器连接至 ADC 输入通道 */ uint16_t read_temperature(void) { uint16_t value; adc_enable(); // 启动ADC转换器 value = adc_read_channel(CH_0); // 从第一个通道获取采样值 adc_disable(); // 禁用ADC return value; // 返回测量结果 } // 调用此函数可获得当前环境温度对应的模拟量数值 temperature_value = read_temperature(); ``` 上述例子中提到的操作依赖具体的外设接口标准;对于不同的传感元件或执行机构而言,具体实现细节可能会有所不同。因此建议查阅相关器件的数据手册以获取最准确的信息[^2]。 #### 3. 处理中断事件 当应用程序需要响应来自物理世界的异步触发条件时——比如按键按下、光敏电阻光照强度改变等情况,则可以通过注册回调处理程序的方式捕获这些瞬态现象的发生时刻及其状态转变情况。 ```c void button_irq_handler(int pin) { static int count = 0; if(rt_pin_read(pin) == PIN_LOW){ count++; printf("Button pressed %d times\n",count); } rt_pin_attach_irq(BUTTON_PIN, PIN_IRQ_MODE_FALLING, button_irq_handler, NULL); // 绑定下降沿触发的IRQ处理器 } ``` 在此基础上还可以进一步扩展逻辑分支结构以便区分多种类型的外部刺激源并作出恰当反应。值得注意的是,编写高效的ISR(Interrupt Service Routine)至关重要,因为它们直接影响系统的实时性能表现[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值