上一节讲到了在 RT-Thread 串口驱动框架中,中断方式以及轮询方式的配置。这一节继续讨论 DMA 的配置。 同样的,代码可以在github找到。 初始化 DMA 在stm32_uart_get_config 中如果加入了使用 DMA 的宏,会获得 DMA 的配置信息。 #ifdef BSP_UART1_RX_USING_DMAuart_obj[UART1_INDEX].uart_dma_flag|=RT_D...
serial->serial_rx = rx_fifo;/* configure fifo address and length to low level device */serial->ops->control(serial, RT_DEVICE_CTRL_CONFIG, (void*) RT_DEVICE_FLAG_DMA_RX); 通过RT-Thread的源码可知 DMA buffer 和 serial 的 ringbuffer 公用一个 buffer. 我发送的数据长度为129,发送间隔>250m...
}staticvoidserial_thread_entry(void*parameter){rt_err_tresult;rt_uint8_tc =0;rt_uint8_ti =0, rx_state = SERIAL2_STATE_WAIT_FRAME;rt_device_tserial2 = rt_device_find("uart2");structframe_msgmsg;while(1) {/* 使用信号量触发接收数据 */switch(rx_state) {caseSERIAL2_STATE_WAIT_FRAM...
`rt_forceinline rt_size_t _serial_fifo_calc_data_len(struct rt_serial_fifo *fifo)` 计算 fifo 中写入的数据量 `rt_forceinline void _serial_fifo_push_data(struct rt_serial_fifo *fifo, rt_uint8_t ch)` 压入一个数据(不完整实现,具体见下文) `rt_forceinline rt_uint8_t _serial_fifo_pop_...
最后,依旧公开测试代码,本次测试使用的代码可以在 [serialX]( https://gitee.com/thewon/serialX ) 仓库找到。近期,笔者也会将 serialX 提交到 rt-thread 主仓库。 提前预告,下次我们来聊聊 serialX 在做控制台串口时遇到的问题已经解决方案(包括使用中断 DMA 收发模式打开的串口设备)。
RT-Thread学习笔记八 ---USART DMA方式发送 老规矩,首先说一下我的配置 STM32F207IGT6 MDK RTT 1.1.0 使用UART2作为finsh组件,UART3作为串口输出 /* register uart2 */ rt_hw_serial_register(&uart2_device,"uart2",RT_DEVICE_FLAG_RDWR| RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM,&uart2); ...
测试配置:DMA 二级缓存 32 个字节,串口收发缓存各 512 字节。 注:本串口驱动工作特性请参阅前一篇文章rt-thread 驱动篇(一) serialX 框架理论 STM32 中断模式测试 以下是三组连续发收测试: 1. 定时间隔20ms,发送250字节数据,持续发送2600w,接收发送数据量相等 ...
我们的 serialX 支持中断收发、DMA 收发。所以我们可以随意组合使用 中断收、中断发、DMA 收、DMA 发,共四种组合(前提是对应芯片底层驱动支持 DMA)。 登录后复制if (rt_device_open(new_device, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_STREAM | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_INT_TX ) == ...
在DMA发送中断中,`stm32_transmit`函数会调用`HAL_UART_Transmit_DMA`,并通过设置的中断回调函数处理发送完成或半完成状态。发送完成后,会向上层发送`RT_SERIAL_EVENT_TX_DMADONE`事件以告知发送任务已完成。总之,RT-Thread串口框架中的DMA配置和中断处理机制确保了高效的数据传输,提高了串口通信的...
其中stm32_uart的定义如下,主要是定义了 dma的传输完成回调函数,和一些串口本身的数据 stm32_uart继承于->rt_serial_device继承于->rt_device /* stm32 uart dirver class */structstm32_uart{UART_HandleTypeDefhandle;//管理串口的句柄,类型里面是一些简单的数据类型structstm32_uart_config*config;#ifdef RT_...