主控芯片:STM32F407ZG 1. 适配问题 本项目工程一开始使用的主控是STM32L496,正常移植使用serial_v2没有问题。将工程复制下来后使用rtthread studio的修改工程-芯片型号将主控型号更改为STM32F407ZG后自动联网下载STM32F4的SDK包。如下图所示(是因为我的环境中一直没下载过这个SDK包)因为我的版本是4.0.5所以我下...
`rt_console_flush` 既考虑启用设备框架也考虑未启用设备框架两种情况。`rt_device_flush(_console_device)` 会调用上文的 `rt_serial_flush` ;`rt_hw_console_flush` 和 `rt_hw_console_output` 类似用于不使用设备框架,自定义 `rt_kprintf` 底层接口时要实现的。视实际情况实现 `rt_hw_console_flush` 。
本次测试使用的代码可以在 serialX 仓库找到。近期,笔者也会将 serialX 提交到 rt-thread 主仓库。
登录后复制rt_bool_t ab32_int_txing(struct rt_serial_device *serial) { struct ab32_uart *uart; RT_ASSERT(serial != RT_NULL); uart = rt_container_of(serial, struct ab32_uart, serial); return uart->intTxing; } static void ab32_start_tx(struct rt_serial_device *serial, rt_uint8...
1.查找设备 随后回到我们需要使用串口的.c文件 定义设备句柄rt_device_t dev_uart4; 串口配置结构体struct serial_configure uart4_config; 在mian或自己主函数中输入 dev_uart4=rt_device_find("uart4"); //此处查找uart4 if(dev_uart4==RT_NULL) rt_kprintf("SearchFailed\n"); //若查找失败则打印 ...
以串口设备为例,不管下层是 STM32、GD32 还是别的平台的,只要都是串口设备,都对接到 RT-Thread 的串口设备类——如图所绘,多个硬件对象对接同一个父类对象接口。同理,从设备驱动框架层到IO设备管理接口层,又是多对一,又是再一次的屏蔽差异,再一次的抽象。——面向对象的思想贯穿其中。
在使用rt-thread的serial_v2框架时遇到了一个坑,论坛上也没说的太清楚。 起因是想将rtthread项目中的串口由v1改为v2,但是更改之后发现编译通不过,且v2和v1的一些结构体定义不同,但是在uart_config.h文件中多了引脚名字,导致编译出错。 同样,在v1版本中,驱动代码会对串口引脚进行初始化,并能找到相应初始化代码...
(1) 配置 shell 使用串口 1:RT-Thread Kernel —-> Kernel Device Object —-> 修改 the device name for console 为 uart1。 (2) 勾选 Using UART1、Using UART2,选择芯片型号为 STM32F407ZG,时钟源为外部 8MHz,如图所示: 输入命令 scons —target=mdk5 -s 生成 keil 工程,打开工程后先修改 MCU ...
串口接收和发送使用的缓存大小是一样的,如果想改变串口缓存大小,请修改 RT_SERIAL_FIFO_BUFSZ 的值。如果想改变 DMA 二级缓存大小,请修改 RT_SERIAL_DMA_BUFSZ 的值。定义一个收发通用 fifo:struct rt_serial_fifo { rt_uint32_t buf_sz; /* software fifo */ rt_uint8_t *buffer; rt_uint16_t put_...
通过RT-Thread的源码可知 DMA buffer 和 serial 的 ringbuffer 公用一个 buffer. 我发送的数据长度为129,发送间隔>250ms(就是象征性表示这个速度不快),连续发几帧(没摸到规律,一般是4帧有时候也不一定),就会出现这个问题. 当然之前发送的是192+bytes的数据,现象一样的. ...