RT-Thread 学习笔记--串口的使用

Rt thread  的串口 

需要了解下它的 串口关系

 

要使用 串口  简单做几个宏定义即可:比如要使用串口2和6 (其中串口2给RT的控制台用,6为用户使用)

在rtconfig.h中 出现 下面几个定义即可;

#define BSP_USING_UART
#define BSP_USING_UART2
#define BSP_USING_UART6

 

这些定义不是手动改的,而是通过 env环境 配置的 ,官方的例子 默认有串口2的配置 ,要添加串口6的配置 需要手动编辑 Kconfig文件 ,这涉及到Kconfig语法,是另一个知识范围;

假如不从env配置的方式添加串口 ,可以直接在board.h中直接添加自己想做的 定义  #define BSP_USING_UART6 以及相关的定义

不建议在rtconfig.h 中修改,因为这个文件是自动生成的,

然后说 串口的 初始化

在 路径 HAL_Drivers文件夹下  的 drv_usart.c 中   有    int rt_hw_usart_init(void) 函数  用于初始化串口;

 

int rtthread_startup(void)   函数 加载了   RT_WEAK void rt_hw_board_init()  , 其中包含了串口的初始化 int rt_hw_usart_init(void)

 

而 rt_hw_usart_init  不是简单的配置串口硬件 ,而是把 串口作为一个设备类 进行配置和 系统注册 ;

这个函数会自动配置和注册系统默认控制台所用的串口 和 用户激活的串口(宏定义)

至于为什么添加个 宏定义就能 把串口的驱动配好并添加进系统 ,这是基于一系列的 宏定义处理和系统函数处理;

依据宏定义的串口号,可以得出 串口结构体的 大小,即反映出串口使用数量和相关参数,进而逐个对串口进行配置注册,函数如下: 

int rt_hw_usart_init(void)
{
    rt_size_t obj_num = sizeof(uart_obj) / sizeof(struct stm32_uart);
    struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;
    rt_err_t result = 0;

    stm32_uart_get_dma_config();

    for (int i = 0; i < obj_num; i++)
    {
        /* init UART object */
        uart_obj[i].config = &uart_config[i];
        uart_obj[i].serial.ops    = &stm32_uart_ops;
        uart_obj[i].serial.config = config;

        /* register UART device */
        result = rt_hw_serial_register(&uart_obj[i].serial, uart_obj[i].config->name,
                                       RT_DEVICE_FLAG_RDWR
                                       | RT_DEVICE_FLAG_INT_RX
                                       | RT_DEVICE_FLAG_INT_TX
                                       | uart_obj[i].uart_dma_flag
                                       , NULL);
        RT_ASSERT(result == RT_EOK);
    }

    return result;
}

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值