Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
CDC
USB设备_Device
Numaker-IoT-M487
【开发板评测】Numaker-IoT-M487开发板USBD
发布于 2022-05-04 11:40:36 浏览:615
订阅该版
一.USB入门 1.硬件层 USB的传输线分别由地线、电源线、D+、D-四条线构成,D+和D-是差分输入线,在USB设备端,D-接上拉电阻是USB低速设备,D+接上拉电阻是全速设备,高速设备在初始化阶段以全速设备身份出现,设备与主机经过一系列握手信号确认是全速设备还是高速设备。数据在USB线里传送是由低位到高位发送的,USB采用不归零取反来传输数据,当传输线上的差分数据输入0时就取反,输入1时就保持原值,为了确保信号发送的准确性,当在USB总线上发送一个包时,传输设备就要进行位插入(即在数据流中每连续6个1后就插入一个0),从而强迫NRZI码发生变化。 2.软件层 USB数据是由二进制数字串构成的,数字串构成最小的单位域(同步域,标识域,地址域,端点域,帧号域,数据域,校验域),域再构成包(令牌包、数据包、握手包),包再构成事务(IN、OUT、SETUP),事务最后构成传输(中断传输、同步传输、批量传输和控制传输)。 二.评测内容 USBD设备虚拟串口使用(即CDC) 1.进入RT-THREAD官网,查看新手指导教程,这里用RT-Thread Studio软件测试。 2.Numaker-IoT-M487 USB Full-Speed OTG连接原理图  3.打开RT-Thread Studio软件,下载Numaker-IoT-487开发板的软件支持包,点击文件->新建->RT-THREAD项目  4.输入工程名,选择基于开发板,点击完成。  5.点击工程下,RT-THREAD SettingS,在Drivers下面,鼠标右击一下,进入配置项。  6.在USB配置项,设备类型选Enable to use device as CDC device.  7.主函数进行相关初始化 ``` int main(int argc, char **argv) { int err; rt_kprintf("this is rt-thread test!\r\n"); virtual_com =rt_device_find("vcom");//查找设备 if(virtual_com!=RT_NULL) { err=rt_device_init(virtual_com); } else return -1; rt_device_open(virtual_com,RT_DEVICE_FLAG_RDWR|RT_DEVICE_FLAG_INT_RX);//打开设备 rt_sem_init(&rx_sem,"rx_sem",0,RT_IPC_FLAG_FIFO);//初始化接收信号量 rt_device_set_rx_indicate(virtual_com,uart_input);//设置串口接收回调函数 rt_thread_t thread =rt_thread_create("virtual_com",virtual_com_thread_entry,RT_NULL,1024,25,10); if(thread!=RT_NULL) //创建串口处理函数线程 rt_thread_startup(thread); else return -1; return 0; } ``` 8.接收数据并处理,上位机发送的数据,开发板收到后,再发送给上位机。 ``` static rt_device_t virtual_com =RT_NULL; static struct rt_semaphore rx_sem; static char rcv_buf[64]; static unsigned char rcv_num=0; static unsigned char rcv_startf=1;//上电默认一直等待接收数据 static rt_err_t uart_input(rt_device_t virtual_com,rt_size_t size) { rt_sem_release(&rx_sem); return RT_EOK; } static char uart_get_char(void) { char ch; while (rt_device_read(virtual_com, 0, &ch, 1) !=1) { rt_sem_control(&rx_sem, RT_IPC_CMD_RESET, RT_NULL); if(rcv_startf) rt_sem_take(&rx_sem, RT_WAITING_FOREVER); else if(-RT_ETIMEOUT == rt_sem_take(&rx_sem, 100)) { //接收的数据之间加等待超时,超时或者有'\n',认为一包数据接收完。 rcv_startf = 1; ch = '\n'; return ch; } } rcv_startf = 0; // return ch; } static void virtual_com_thread_entry(void *parameter) { char ch,temp; while(1) { temp = uart_get_char(); if(temp != '\n') { if(rcv_num<64) rcv_buf[rcv_num++] = temp; else { rt_device_write(virtual_com,0,&rcv_buf,sizeof(rcv_buf)); rt_memset(rcv_buf, 0, sizeof(rcv_buf)); rcv_num=0; rcv_buf[rcv_num++] = temp; } } else { rt_device_write(virtual_com,0,&rcv_buf,sizeof(rcv_buf)); rcv_num = 0; rt_memset(rcv_buf, 0, sizeof(rcv_buf)); } } } ``` 9.编译工程,下载完成后,按下开发板复位键,打开电脑端串口软件。  [usbd-test.rar](https://oss-club.rt-thread.org/uploads/20220504/7c8cd0b6501773f9bbf5188b22db776e.rar)
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
转角偶遇幸福_
这家伙很懒,什么也没写!
文章
1
回答
0
被采纳
0
关注TA
发私信
相关文章
1
STM32H743 USBhost+cdc有没有大神会的,有偿求助啊。
2
usb设备cdc配置框架理解问题
3
STM32 USB Host驱动 CDC ECM
4
请问大家有没有遇到过USB识别很慢的情况
5
STM32 USB CDC驱动4G模块 开发进行中...
6
关于usbd设备的使用问题
7
RTT USB iManufacturer iProduct如何修改
8
CDC虚拟串口rxbuffer 大小
9
win7 64bit 系统的 USB CDC 驱动问题
10
RT-Thread 4.0.5 CDC 接收问题
推荐文章
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
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
cubemx
ESP8266
WIZnet_W5500
UART
ota在线升级
BSP
PWM
flash
packages_软件包
freemodbus
潘多拉开发板_Pandora
ADC
GD32
定时器
flashDB
编译报错
socket
keil_MDK
中断
rt_mq_消息队列_msg_queue
Debug
SFUD
msh
ulog
C++_cpp
at_device
本月问答贡献
聚散无由
9
个答案
6
次被采纳
RTT_逍遥
7
个答案
2
次被采纳
a1012112796
5
个答案
2
次被采纳
加缪
2
个答案
2
次被采纳
踩姑娘的小蘑菇
8
个答案
1
次被采纳
本月文章贡献
wake_mirco
2
篇文章
7
次点赞
mushroom
1
篇文章
9
次点赞
张世争
1
篇文章
7
次点赞
RTT_逍遥
1
篇文章
5
次点赞
Jack_____
1
篇文章
5
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部