RT-Thread 之 PIN设备驱动调试

2023-12-22 10:25:47

一、新建工程

根据所用开发板,根据对应芯片创建工程(本例程基于STM32F103ZET6)。
在这里插入图片描述

二、PIN外设配置

步骤1:将时钟源换成外部高速时钟。

在board.h 修改时钟为外部时钟
在这里插入图片描述

步骤2:PIN应用层文件新建

新建pin_user.c以及pin_user.h文件,将应用层代码放进。
1,在工程文件夹里面进行文件新建。
在这里插入图片描述
2,在工作区刷新工程,将这两个文件夹加入到工程里面。
在这里插入图片描述

步骤3:查看原理图,配置pin脚模式以及宏定义

1,所用引脚IO口(灯用的是PE5,且输出低电平,LED亮,输出高电平,LED灭,按键用的PE2与PE3,且低电平有效。)
在这里插入图片描述
在这里插入图片描述

2,配置pin脚模式,与宏定义(引脚编号,通过查看设备驱动文件drv_gpio.c确定)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

三、编写PIN驱动用户层代码与测试

1.具体测试代码如下:

/*
 * 程序清单:这是一个 PIN 设备使用例程
 * 例程导出了 pin_beep_sample 命令到控制终端
 * 命令调用格式:pin_beep_sample
 * 程序功能:通过按键控控制LED灯
*/

#include <rtthread.h>
#include <rtdevice.h>

/* 引脚编号,通过查看设备驱动文件drv_gpio.c确定 */
#ifndef LED_PIN_NUM
    #define LED_PIN_NUM            69  /* PE5 */
#endif
#ifndef KEY0_PIN_NUM
    #define KEY0_PIN_NUM            66  /* PE2 */
#endif
#ifndef KEY1_PIN_NUM
    #define KEY1_PIN_NUM            67  /* PE3 */
#endif

void led_on(void *args)
{
    rt_kprintf("turn on led!\n");
    rt_pin_write(LED_PIN_NUM, PIN_LOW);

}

void led_off(void *args)
{
    rt_kprintf("turn off led!\n");
    rt_pin_write(LED_PIN_NUM, PIN_HIGH);

}

static void pin_led_sample(void)
{
    /* led引脚为输出模式 */
    rt_pin_mode(LED_PIN_NUM, PIN_MODE_OUTPUT);
    /* 默认低电平 */
    rt_pin_write(LED_PIN_NUM, PIN_HIGH);

    /* 按键0引脚为输入模式 */
    rt_pin_mode(KEY0_PIN_NUM, PIN_MODE_INPUT_PULLUP);
    /* 绑定中断,下降沿模式,回调函数名为beep_on */
    rt_pin_attach_irq(KEY0_PIN_NUM, PIN_IRQ_MODE_FALLING, led_on, RT_NULL);
    /* 使能中断 */
    rt_pin_irq_enable(KEY0_PIN_NUM, PIN_IRQ_ENABLE);

    /* 按键1引脚为输入模式 */
    rt_pin_mode(KEY1_PIN_NUM, PIN_MODE_INPUT_PULLUP);
    /* 绑定中断,下降沿模式,回调函数名为beep_off */
    rt_pin_attach_irq(KEY1_PIN_NUM, PIN_IRQ_MODE_FALLING, led_off, RT_NULL);
    /* 使能中断 */
    rt_pin_irq_enable(KEY1_PIN_NUM, PIN_IRQ_ENABLE);
}

INIT_APP_EXPORT(pin_led_sample);



2.具体测试结果如下:

通过串口1将led灯的状态变化打印发送至串口助手。
在这里插入图片描述

文章来源:https://blog.csdn.net/HEbo_123/article/details/132781638
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。