RT-Thread 三步实现利用DMA进行串口发送


应某些网友需求,说网上根本找不到基于Rt-Thread DMA串口发送代码,只有官方开源的串口DMA接收。

其实这些东西并不难,只要你细心去看哪些闲置的驱动文件且都是包装好的,通过关键字去查询或点开源文件查看,花不了几分钟,都很简单的。

一、更改驱动文件

在官方提供的驱动函数中,都赋予了static关键字限制或一些宏定义的限制,如果你需要用到这些限制函数,你只需要注释static关键字或打开宏定义即可。
在这里插入图片描述

二、打开宏定义

想要使用串口的DMA发送,需要在board.h打开相关宏定义在这里插入图片描述
在串口驱动文件drv_usart.c中可以发现关于dma操作的函数只有两个,所以只需要删除两句函数开头的static关键字

三、串口配置传输

    config.baud_rate = BAUD_RATE_115200;        //修改波特率为 115200
    config.data_bits = DATA_BITS_8;           //数据位 8
    config.stop_bits = STOP_BITS_1;           //停止位 1
    config.bufsz     = 128;                   //修改缓冲区 buff size 为 128
    config.parity    = PARITY_NONE;           //无奇偶校验位

    rt_device_control(serial, RT_DEVICE_CTRL_CONFIG, &config);    /*控制串口设备。通过控制接口传入命令控制字,与控制参数 */
    rt_device_open(serial, RT_DEVICE_FLAG_DMA_RX);   /* 以 DMA 接收及轮询发送方式打开串口设备 */
    rt_device_set_rx_indicate(serial, uart_input);   /* 设置接收回调函数 */

    stm32_dma_config(serial,RT_DEVICE_FLAG_DMA_TX);
    stm32_dma_transmit(serial, "123", 4,RT_SERIAL_DMA_TX);

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Dustinthewine/article/details/134790448
今日推荐