Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
CDC
USB
在STM32F407 Disc1上使用RT-Thread CDC
发布于 2022-04-12 13:54:14 浏览:1920
订阅该版
[tocm] # 1 测试环境 | environment | version | note | | ---------------- | ----------------- | --------------------- | | STM32F407-Disc1 | Disc1 | | | RT-Thread Studio | v2.2.1 | | | RT-Thread kernel | latest(2020-3-30) | 稍落后于github master | # 2 新建工程 ## 2.1 新建设置  > - 由于STM32F407-Disc1 UART1默认的PA9,PA10已经被其他外设占用,改成PB6,PB7 > - 使用板载ST-Link下载调试 > - 后面更新系统时钟会用到 ## 2.2 编译测试 编译没有问题  控制台  ## 1.3 本地git仓库追踪 ```shell LT@DESKTOP-Win10 MINGW64 /e/WorkSpaces/RT_Thread_Studio/STM32F407_CDC (master) $ git lg * a95a8f1 - (HEAD -> master) chore: creat the default project with RT-Studio (26 seconds ago)
``` # 3 CubeMX 配置 打开工程下的CubeMx Setting ## 3.1 配置外部高速时钟  ## 3.2 使能 UART1  ## 3.3 使能USB Device  > 这里不需要使能默认的USB FS interrupt,drv_usbd.c里会实现 ## 3.4 配置CLK  > 注意: intput frequency 要选择板子上实际的8MHz,一开始没注意使用了默认的25MHz, 枚举一直不成功 ## 3.5 Project Manager 直接Generate code就可以了  > IDE 选择默认的EWARM就行,这个在工程里不使用,会被排除编译! # 4 工程的调整 因为新生成的cubemx文件夹源码会被自动加入工程编译,而且头文件位置不会自动加入,所以不调整工程配置的话,编译会出现很多问题。  方法一: 手动调整,比较麻烦,而且后面每次保存RT-Thread Setting,都会更新scons update,导致手动配置的被去掉,除非你自己在相应文件下添Sconscripts 方法二:关闭CubeMx, RT-studio 会自动帮你添加Sconscripts。这个方法也是刚刚发现的隐藏彩蛋!  在关闭前,先暂存了生成的刚刚生成的cubemx文件,关闭CubeMX后会发现RT_Thread_Studio偷偷做了不少事情  - 更新工程 - 生成的main函数加__WEAK修饰,避免冲突  - 更新drv_clk.c 使用CubeMX生成的SystemClock_Config  - 重命名 drivers/stm32f4xx_hal_conf.h -> drivers/stm32f4xx_hal_conf_bak.h,使用CubeMX生成的 drivers/stm32f4xx_hal_conf.h  - 贴心地自动增加了Sconsript配合工程管理,这样相应的path 和source就不需要我们手动配置了  > 这里说明一下, application/main.c 和 cubemx/Src/main.c虽然同名,但是路径不同,并不冲突。 > > 这样我们就不需要像之前一样拷贝CubeMX生成的SystemClock_Config到board.c或者其他文件里了 > >  编译一下,一次性通过:  **总之一句话,RT_Thread_Studio这次配合最新的源码把人性化做到了极致,赞一个!** # 5 CDC 配置 首先看下board.h 中关于如何配置usb device的提示,下面按照这些步骤逐步对一下! ## 5.1 USB driver framework 就是RT-Thread自带的USB框架了,需要在RT-Thread Setting开启一下,并选择我们需要的CDC协议  保存更新后,会发现component里已经新加了USB 内核 和 CDC协议类的编译  ## 5.2 定义 usb device相关的宏 在默认的RT-Thread Setting没有配置的情况下,需要手动打开board.h关闭的宏 `BSP_USING_USBDEVICE`  ## 5.3 PCD 初始化 HAL_PCD_MspInit 定义在CubeMX生成的stm32f4xx_hal_msp.c中  ## 5.4 SystemClock_Config 工程的调整章节已经说明,RT_Thread_Studio已经帮我们做好了。 ## 5.5 HAL_PCD_MODULE_ENABLED 在配置了USB外设的情况下,CubeMX生成的 drivers/stm32f4xx_hal_conf.h里,宏HAL_PCD_MODULE_ENABLED默认已经打开。  ## 5.6 编译测试 编译没有问题,MicroUSB连接PC,在设备管理器里出现了新的COM  > 就是枚举时间有些太久了,大概8s左右,不太能接受 再看下Console,usbdevice 和 vcom 线程任务正常运行  # 6 CDC ECHO测试 设备枚举正常,参考[串口使用实例->串口接收不定长数据](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart_v1/uart?id=%e4%b8%b2%e5%8f%a3%e6%8e%a5%e6%94%b6%e4%b8%8d%e5%ae%9a%e9%95%bf%e6%95%b0%e6%8d%ae)实现一个Echo测试一下效果。改动部分如下: ``` #define SAMPLE_UART_NAME "vcom" /* 数据解析线程 */ static void data_parsing(void) { char ch; char data[ONE_DATA_MAXLEN]; static char i = 0; while (1) { ch = uart_sample_get_char(); // rt_device_write(serial, 0, &ch, 1); if(ch == DATA_CMD_END) { data[i++] = '\r'; data[i++] = '\n'; rt_device_write(serial,0,data,i); i = 0; continue; } i = (i >= ONE_DATA_MAXLEN-2) ? ONE_DATA_MAXLEN-2 : i; data[i++] = ch; } } ``` 再次编译测试: 1 在 vcom 设备枚举成功后,输入 `uart_data_sample` 命令测试  2 echo测试 我使用的是UartAssist(其他串口工具都行),打开设备并设置自动发生附加位0x0D('\r'),也就是代码里的DATA_CMD_END  发送字符,echo成功  完! **下面计划,写一下CDC类调用流程,顺便看是否能优化一下枚举时间!**
5
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
blta
这家伙很懒,什么也没写!
文章
12
回答
9
被采纳
2
关注TA
发私信
相关文章
1
请教USB Host
2
STM32F4调试USB 读卡器(Slave)提示格式化
3
急求 STM32F4 USB Device MSC+SD 的相关问题
4
USB 框架问题
5
USB键盘
6
LPC17xx 如何添加USB HOST设备
7
RT-Thread目前支持USB HOST了吗?
8
USB HOST的支持问题
9
RTT 2.0.1 USB存储设备问题,枚举到USBREQ_GET_MAX_LUN后复位
10
USB库已经很久没更新了
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
rt-smart
RTC
FAL
I2C_IIC
cubemx
ESP8266
UART
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
GD32
定时器
ADC
flashDB
编译报错
socket
中断
rt_mq_消息队列_msg_queue
keil_MDK
Debug
SFUD
ulog
msh
C++_cpp
MicroPython
本月问答贡献
出出啊
1523
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
815
个答案
179
次被采纳
crystal266
555
个答案
162
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
1
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部