参考这里
步骤
cubeMX
1 | 打开 cubeMX,开启 USB_OTG, 使用 device 模式,启用 usb otg 的全局中断,配置时钟,生成代码,复制到项目 |
Kconfig
1 | config BSP_USING_USBD_FS |
menuconfig
1 | Hardware Drivers Config > |
测试代码
1 |
|
参考这里
1 | 打开 cubeMX,开启 USB_OTG, 使用 device 模式,启用 usb otg 的全局中断,配置时钟,生成代码,复制到项目 |
1 | config BSP_USING_USBD_FS |
1 | Hardware Drivers Config > |
1 |
|
外挂 flash 上使用 lfs
参考的 这里
先按照外挂 flash 的配置配置好
1 | RT-Thread Components ---> Device virtual file system |
w25q128_lfs_demo.c
1 |
|
demo 代码里面的dfs_mount和dfs_mkfs的参数,DEVICE_NAME, lfs 和 elm 是不一样的
elm 文件系统
外挂 flash 上的 elm 文件系统
参考的 这里
先按照外挂 flash 的配置配置好
1 | RT-Thread Components > Device virtual file system ---> |
w25q128_elmfs_demo.c
1 |
|
demo 代码里面的 dfs_mount 和 dfs_mkfs 的参数,DEVICE_NAME, lfs 和 elm 是不一样的
4096 扇区,挂载成 FAT,要格式化成功,至少要 800KB 以上。且还要修改格式化参数。
所以建议 4MB 以下的 FLASH 不要用 FAT,用 littlefs
参考链接
先启用 uart2
开启 at device 的支持
1 | RT-Thread online packages > |
配置参数
1 | 缓冲区大小可以设置大一点 |
1 | RT-Thread Components |
使用 cutecom 连接,回车模式选择 CR/LF
1 | AT+CWMODE=1 |
wait AT client(uart2) connect timeout(5000 tick),可能是 vcc 供电不足,可以换一个 5v 的供电口解决1 | 比如 [E/at.clnt] Read response buffer failed. The Response buffer size is out of buffer size(xxx) |
如果还有解决不了的问题,看这里
配置 LAN8720A 接入网络
参考链接
启用 Eth 模块
1 | 选择 RMII |
修改 ports/phy_reset.c 内 rst 引脚位置, 复制 ports 目录到 board 下,修改 SConscript
1 | path += [cwd + '/ports'] |
Kconfig 里面,menu “Onboard Peripheral Drivers”内添加
1 | config PHY_USING_LAN8720A |
1 | RT-Thread Components > |
在light weight TCP/IP stack里面, 选项 Enable alloc ip address through DHCP来控制 dhcp 或者固定 ip
libraries/HAL_Drivers/drv_eth.c
1 |
phy_reset.c
1 |
|
配置 w5500 网卡接入网络
cubeMX 里面的 nss 脚貌似不需要接,cubeMX 里面的 sck 脚是对应模块的 sclk 脚
模块的 scs 脚接的位置就是, rt_hw_spi_device_attach 的最后两个参数的值
开发板和模块之间的 MISO 和 MOSI 不需要反接
启用 spi1
设置 Mode 为 Full Duplex Master
设置 Hardware NSS Signal 为 output 模式
参考驱动配置,在 board/Kconfig 里面启用 spi1 的配置
配置 iot packages 里面的 wiznet 部分
1 | RT-Thread online packages ---> |
参数说明
1 | SPI device name 不是 spi 的总线名,需要手工创建,比如 spi10 |
1 |
|
测试模拟:开机断网,中间断网,重连以后,看到 W5500 提示 link up 以后,可以 ping 通其他主机
无论 dhcp 模式打开还是关闭,均支持。
外挂 flash 读写
参考这里
根据原理图,找到相应的 spi 脚,配置引脚
1 | menuconfig BSP_USING_SPI |
Kconfig 的 "Onboard Peripheral Drivers" 添加
1 | config BSP_USING_QSPI_FLASH |
1 | Hardware Drivers Config > Onboard Peripheral Drivers |
fal_cfg.h
1 |
|
w25q128_auto_init.c
1 |
|
w25q128_flash_demo.c
1 |
|
1 | msh />list_device |
1 | msh />sf probe spi10 |
Flash 先擦后写
写入之前请先擦除,这是 flash 特性决定的,因为 flash 的编程原理就是只能将 1 写为 0,而不能将 0 写为 1。擦除动作就是相应的页 / 块的所有位变为 1(所有字节均为 0xFF),所以不擦除直接写入会有问题。
片上 flash 读写,这里介绍 FAL 的用法
board/Kconfig 添加
1 | config BSP_USING_ON_CHIP_FLASH |
启用 fal
1 | RT-Thread online packages ---> |
on_chip_flash 目录复制到你的 applications 目录
SConscript 添加如下
1 | CPPPATH += [cwd + '/on_chip_flash'] |
测试命令
1 | fal probe xxx |
scons --menuconfig 选中
1 | RT-Thread Components ---> |
1 | RT-Thread Components ---> |
1 | RT-Thread Components ---> |
1 | RT-Thread online packages ---> |
需要注意的地方
1 | 需要根据你需要的大小修改rtt自带驱动里面的`const struct fal_flash_dev stm32_onchip_flash_xxk` |
使用场景:如果需要挂载多个 fs,可以使用 romfs 先创建几个文件夹,然后启动以后把几个 fs 分别挂载到不同的目录
1 | RT-Thread Components ---> |
注意,需要使用下面的命令重新生成 romfs 的源码
1 | python2 ./rt-thread/tools/mkromfs.py 你的文件目录 ./rt-thread/components/dfs/filesystems/romfs/romfs.c |
elm_demo.c
1 |
|
fal_cfg.h
1 |
|
fal_demo.c
1 |
|
lfs_demo.c
1 |
|
romfs_init.c
1 |
|
已知的问题:在某些板子上,fal 和 lfs 不兼容,同时启用以后,会导致 fal 的 erase 挂掉,当然 lfs 的格式化也会挂掉
elm 貌似格式化会报错,不管了
单片机作为 u 盘
1 | 打开 cubeMX,配置 USB_OTG, 使用 host_device 模式,nvic interrupt table 配置 usb on the go fs global interrupt, 生成代码,复制到项目 |
修改 board/Kconfig,添加
1 | config BSP_USING_USBD |
1 | RT-Thread Components ---> |
参考 sdio 的配置,即可将 sd 卡插在 stm32 上,在电脑上显示出来
sd 卡的文件系统用 fat 和 ntfs 都可以
使用 usb host 读写 u 盘
参考 这里
1 | 打开 cubeMX,配置 USB_OTG, 使用 host_only 模式,nvic interrupt table 配置 usb on the go fs global interrupt, 生成代码,复制到项目 |
修改 board/Kconfig,添加
1 | config BSP_USING_USBH |
1 | RT-Thread Components ---> |
位置
1 | RT-Thread Components ---> |
1 | RT-Thread Components ---> |
去 gitee 的 rt thread 的 master 分支里面找到 drv_usbh.c 和 drv_usbh.h, 放到项目的 libraries/HAL_Drivers 里面
修改,添加 libraries/HAL_Drivers/SConscript
1 | if GetDepend(['BSP_USING_USBH']): |
u 盘的供电需要 5v
可以修改 usb 调试宏查看日志 RT_DEBUG_USB