RT-Thread添加设备驱动(不使用框架)

以led驱动为例

驱动添加

相关头文件和宏定义

#include <rtthread.h>
#include <rtdevice.h>
#include "board.h"
#define LED2_PIN   GET_PIN(E, 2)
#define LED3_PIN   GET_PIN(G, 15)
#define LED4_PIN   GET_PIN(B, 8)

先创建设备实例,然后使用相关函数创建,并且登录设备,因为没有具体设备类型就设置为了字符设备,可读写

int ledb2_config (void){
    rt_device_t ledb2;
    ledb2 = rt_device_create(RT_Device_Class_Char, 64);
    if (ledb2 == NULL){

    }
    ledb2->init =  ledb2_init;
    ledb2->open =  ledb2_open;
    ledb2->close =  ledb2_close;

    rt_device_register(ledb2, "led2", RT_DEVICE_FLAG_RDWR);
    return 0;
}

添加相关方法的函数

rt_err_t ledb2_init(rt_device_t dev){
    rt_pin_mode(LED2_PIN, PIN_MODE_OUTPUT);
    rt_kprintf("初始化成功!");
    return 0;
}
rt_err_t ledb2_open(rt_device_t dev){
    rt_pin_mode(LED2_PIN, PIN_MODE_OUTPUT);
        /* 设置低电平 */
        rt_pin_write(LED2_PIN, PIN_LOW);
        rt_kprintf("led2 on!");
        return 0;
}
rt_err_t ledb2_close(rt_device_t dev){
        /* 设置电平 */
        rt_pin_write(LED2_PIN, PIN_HIGH);
        rt_kprintf("led2 close!");
        return 0;
}

最后添加至预初始化函数

INIT_BOARD_EXPORT(ledb2_config);

驱动使用

void led2_init(void){
    rt_device_t led2;
    led2 = rt_device_find("led2");
    if(led2 == NULL){
        rt_kprintf("can not found device");
    }
    else{
        rt_device_init(led2);
        rt_device_open(led2, RT_DEVICE_OFLAG_OPEN);
    }
}
MSH_CMD_EXPORT(led2_init, open led2);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值