if (uart->uart_dma_flag & RT_DEVICE_FLAG_DMA_RX) ctrl_arg = RT_DEVICE_FLAG_DMA_RX; else ctrl_arg = RT_DEVICE_FLAG_INT_RX; } else if(ctrl_arg & (RT_DEVICE_FLAG_TX_BLOCKING | RT_DEVICE_FLAG_TX_NON_BLOCKING)) { if (uart->uart_dma_flag & RT_DEVICE_FLAG_DMA_TX) ctrl_arg...
RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_INT_TX | uart_obj[i].uart_dma_flag , NULL); 这就上升到串口设备驱动框架层,即serial.c中的实现,在serial.c中,同样有一组串口配置及操作的回调函数,代码如下: rt_err_t rt_hw_serial_register(struct rt_serial_device *serial, c...
| RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_INT_TX | uart_obj[i].uart_dma_flag , NULL); RT_ASSERT(result == RT_EOK); } return result; } 创建UART设备。对UART设备来说,在驱动开发时需要先从struct rt_serial_device结构中派生出新的串口设备模型,然后根据自己的设备类型定义私有数据域。特别是...
登录后复制if (rt_device_open(new_device, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_STREAM | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_INT_TX ) == RT_EOK) { _console_device = new_device; } 或者,先用 poll 模式 set console device 登录后复制/* set new console device */ if (rt_device...
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; } 这个初始化函数直接看上去,只有一个函数我们比较熟悉rt_hw_serial_register,顾名思义,串口设备注册函数,不同于简单的 I/O 设备注...
1) 配置shell使用串口1:RT-Thread Kernel ---> Kernel Device Object ---> 修改the device name for console为uart1。 2) 勾选Using UART1、Using UART2,选择芯片型号为STM32F407ZE,时钟源为外部8MHz,如图所示: 图A.3 使用menuconfig配置串口
case RT_DEVICE_CTRL_CLR_INT: hal_uart_control(uart->handle.instance, UART_RXIT_ENABLE, HAL_DISABLE); break; /* enable interrupt */ case RT_DEVICE_CTRL_SET_INT: hal_uart_clrflag(uart->handle.instance, UART_FLAG_RXPND); hal_uart_control(uart->handle.instance, UART_RXIT_ENABLE, HAL_...
rt_device_open(uart2_serial, RT_DEVICE_FLAG_INT_RX); rt_device_write(uart2_serial, 0, str, (sizeof(str) - 1)); 结语 本文详细介绍了如何在FRDM-MCXA153开发板上扩展RT-Thread的UART驱动支持。这不仅展示了RTThread优秀的可扩展性,也为开发者提供了实用的UART驱动开发参考。希望本文能够帮助更多开发...
RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, &uart1); 这个函数的实现位于serial.c中,我们将在下一小节分析,暂且不表。 显然,函数rt_hw_usart_init,顾名思义,是用于初始化USART硬件的函数,因此这个函数一定会在USART使用之前被调用。搜索工程发现,这个函数是在board.c中rt_hw...
(serial,RT_DEVICE_FLAG_INT_RX)){rt_kprintf("打开串口设备失败!\n");returnRT_ERROR;}rt_kprintf("打开串口设备成功!\n");/* step5:设置接收回调函数 */rt_device_set_rx_indicate(serial,uart_recv_callback);/* step6:数据处理及展示 */while(1){if(1==rk_ok_flag&&0==rt_device_read(...