《嵌入式系统 – 玩转ART-Pi开发板》第6章 ART-Pi 添加一个串口设备

RTT 中外设作为设备存在,在建立工程的时候,ART-Pi串口4被作为系统调试串口,假如现在有一个串口模块需要和单片机通讯,则可以再初始化一个串口。如果没有驱动,那么第一步就需要写驱动,针对ART-Pi,已经有4个写好的UART驱动设备,只需要打开相应的设备即可,ART-Pi扩展引脚有UART1,因此这里使用UART1,本文给出两种使用方式。

6.1手动添加串口设备

在目前的RTT版本中,可以通过定义board.h中相关的宏定义来添加串口设备。添加一个串口设备需要以下几个步骤:

在 board.h 中已经添加了UART1的引脚定义宏,代码如下:

69Wghj.png

在 rtconfig.h 中打开UART1设备即可,添加代码如下:

#define BSP_USING_UART1

69WW3n.png


在applications新建task.c和task.h文件。

[task.c]

/**
  ******************************************************************************
  * @file                task.c
  * @author              BruceOu
  * @lib version         HAL
  * @version             V1.0
  * @date                2021-02-27
  * @blog                https://blog.bruceou.cn/
  * @Official Accounts   嵌入式实验楼
  * @brief               RTT任务
  ******************************************************************************
  */
/*Includes**********************************************************************/
#include "task.h"

#define THREAD_PRIORITY         2
#define THREAD_STACK_SIZE       512
#define THREAD_TIMESLICE        5

static rt_thread_t tid1 = RT_NULL;

#define SAMPLE_UART_NAME       "uart1"    /* 串口设备名称 */
static rt_device_t serial;                /* 串口设备句柄 */
struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;  /* 初始化配置参数 */

/* 线程 的入口函数 */
static void thread_entry(void *parameter)
{
    rt_uint32_t count = 1;

        char str[] = "hello RT-Thread!\r\n";
        /* step1:查找串口设备 */
        serial = rt_device_find(SAMPLE_UART_NAME);
        /* step2:修改串口配置参数 */
        config.baud_rate = BAUD_RATE_9600;        //修改波特率为 9600
        config.data_bits = DATA_BITS_8;           //数据位 8
        config.stop_bits = STOP_BITS_1;           //停止位 1
        config.bufsz     = 128;                   //修改缓冲区 buff size 为 128
        config.parity    = PARITY_NONE;           //无奇偶校验位

        /* step3:控制串口设备。通过控制接口传入命令控制字,与控制参数 */
        rt_device_control(serial, RT_DEVICE_CTRL_CONFIG, &config);

        /* step4:打开串口设备。以中断接收及轮询发送模式打开串口设备 */
        rt_device_open(serial, RT_DEVICE_FLAG_INT_RX);
        while (count++)
        {
            if(count == 5000)
            {
                count = 1;
            }
            rt_thread_mdelay(2000);
            /* 发送字符串 */         
            rt_device_write(serial, 0, str, (sizeof(str) - 1));
        }

}

/* 线程 */
int thread_serial(void)
{
    /* 创建线程 ,名称是 thread,入口是 thread_entry*/
    tid1 = rt_thread_create("thread",
                            thread_entry, RT_NULL,
                            THREAD_STACK_SIZE,
                            THREAD_PRIORITY, THREAD_TIMESLICE);

    /* 如果获得线程控制块,启动这个线程 */
    if (tid1 != RT_NULL)
        rt_thread_startup(tid1);

    return 0;
}

/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(thread_serial, thread serial);

[task.h]

#ifndef _TASK_H_
#define _TASK_H_

#include <rtthread.h>
#include "rtconfig.h"
#include <rtdevice.h>
#include "drv_common.h"

int thread_serial(void);

#endif

编译,下载。在finish中终端使能thread_serial:

69WO3R.png

使用串口调试助手即可查看uart1的输出信息。

69Wjjx.png

6.2使用Env工具添加串口设备

进入工程环境,打开env控制台,输入 menuconfig 命令后即可打开其界面。依次进入以下选项:

→ Hardware Drivers Config → On-chip Peripheral → Enable UART

使能UART1,保存退出即可。

69fSHO.png

和自动添加串口设备一样,添加相应的应用程序。也就是task.c的内容。

69fZKP.png

目录中运行 scons 命令即可使用默认的 ARM_GCC 工具链编译:

69fmb8.png

编译成功:

69fM5Q.png

如果编译没有问题,现象和手动添加的一样。


如果使用 mdk/iar 来进行项目开发,可以直接使用ART-Pi 中的工程文件或者使用以下命令中的其中一种,重新生成工程,再进行编译下载。

69f18s.png

打开工程,在 rtconfig.h 中则会自动添加UART1的宏定义:

69f32n.png

RT-Thread UART参考



代码获取方法

1.长按下面二维码,关注公众号[嵌入式实验楼]
2.在公众号回复关键词[Art-Pi]获取资料

嵌入式实验楼

Related posts

Leave a Comment