rt_device_open(new_device, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_STREAM); _console_device = new_device; } return old_device; } 以上代码的逻辑非常清晰,根据char *name去找设备,使用标准接口rt_device_open()打开设备,并更新old_device指针,若_console_device没有关闭,就关闭它。在rt_device_open()...
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); RT_ASSERT(result == RT_EOK); } return result; } 创建UART设备。对UART设备来说,在驱动开发时需要先从struct rt_serial_device结构中派生出新的串口设备模型,然后根据自己的设备类型定...
void *rt_memcpy(void *dst, const void *src, rt_ubase_t count) rt_int32_t rt_memcmp(const void *cs, const void *ct, rt_ubase_t count) char *rt_strstr(const char *s1, const char *s2) rt_size_t rt_strlen(const char *s) rt_int32_t rt_snprintf(char *buf, rt_size_t size...
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 设备注...
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; } #endif 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ...
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...
RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, uart); return0; } INIT_BOARD_EXPORT(rt_hw_usart_init); /* 使用组件自动初始化机制 */ 上述代码中rt_hw_usart_init()会被系统自动调用。 在系统启动框图中,有两个函数rt_components_board_init()与rt_components_init(),其后的带底色方框内部的函数表...
/* register a character device */ rt_device_register(&_hw_pin.parent, name, RT_DEVICE_FLAG_RDWR); /* 设备注册接口:注册为具体设备 */ return 0; } 具体设备对接设备框架 /* 具体设备的OPS 实现 */ const static struct rt_pin_ops _stm32_pin_ops = ...
我选用的是PE3 – TX2G1 ,PE2 – RX2G1. 通过寄存器FUNCMCON1 来配置,看看FUNCMCON1的内容: 只要在合适的地方插入下面的语句就可以实现配置。 FUNCMCON1 = ((1u<<8)|(1u<<4)); 1.2 配置GPIO复用的代码应该放在哪里 串口初始化代码在《ab32vg1_hal_msp.c》文件中,下面是修改后的代码,uart0和uart...