基于STM32的USB CAN收发器开发与设计
一、文章适合人群:
小型化企业,节约设备的购买投入;
有特殊功能需求的个人或企业(例如离线升级,数据抓包盒等);
技术开发爱好者。
二、USB CAN开发准备
开发板:
开发板资源介绍:1路MicroUsb,4个独立LED灯,一路SW烧写口,2路电源隔离CAN,CAN总线120欧选跳电阻拨码开关,1片8Mbit的SPI存储器。
程序烧入器一个: 推荐使用jlink-V8;
安装KEIL:
下载STM32的USB库程序:usb_FS_Device_Driver。
三、豆芽USBCAN开发板介绍
豆芽USBCAN开发板主要由两部分构成,单片机主芯片电路和通讯电路构成,两部分的连接关系如下如:
详细的电路图如下:
开发板通过SPX3819-3.3的LDO电源芯片将USB提供的5V降压为3.3V的系统工作电源,通过B0305隔离电源,为隔离CAN芯片提供工作电源。
没错!!!! 敏锐的同学们可能已经发现了豆芽USBCAN开发板其实是一个USB供电的最小系统,系统非常的简单,因此才推荐给大家学习。
四、最简单的USB通讯案例
程序涉及的资源均可在以下连接中获取:
CSDN,下载后希望大家帮忙点点赞,支持笔者创作,感谢!
下载了资源后,解压BSP名称的文件包,点击bsp.uvprojx,位置如下图,编译后下载。
bsp工程非常简单,包好了部分驱动的API接口、运行库文件、USB驱动文件。本次实现的USBCAN记住--------网上大部分分享的为路线基本为“虚拟串口”,即将USB虚拟为COM端口,实现USB通讯,本文并非如此,二十采用了bulk数据块的方式实现USB通讯,实测速率可以达到500~600kb/s。usb通讯的实现主要配置usb_desc.c文件的CustomHID_ConfigDescriptor常量,本文的配置参数如下:
/* USB Configuration Descriptor / / All Descriptors (Configuration, Interface, Endpoint, Class, Vendor / const uint8_t CustomHID_ConfigDescriptor[CUSTOMHID_SIZ_CONFIG_DESC] = { 0x09, / bLength: Configuation Descriptor size / USB_CONFIGURATION_DESCRIPTOR_TYPE, / bDescriptorType: Configuration / CUSTOMHID_SIZ_CONFIG_DESC, / wTotalLength: Bytes returned / 0x00, 0x01, / bNumInterfaces: 1 interface / 0x01, / bConfigurationValue: Configuration value / 0x00, / iConfiguration: Index of string descriptor describing the configuration/ 0xE0, / bmAttributes: Bus powered / /Bus powered: 7th bit, Self Powered: 6th bit, Remote wakeup: 5th bit, reserved: 4..0 bits / 0xFA, / MaxPower 500 mA: this current is used for detecting Vbus / /****** Descriptor of Custom HID interface ****/ / 09 / 0x09, / bLength: Interface Descriptor size / USB_INTERFACE_DESCRIPTOR_TYPE,/ bDescriptorType: Interface descriptor type / 0x00, / bInterfaceNumber: Number of Interface / 0x00, / bAlternateSetting: Alternate setting / 0x04, / bNumEndpoints / 0xDC, / bInterfaceClass: Class code = 0DCH / 0xA0, / bInterfaceSubClass : Subclass code = 0A0H / 0xB0, / nInterfaceProtocol : Protocol code = 0B0H / 0, / iInterface: Index of string descriptor / /******** endpoint descriptor ********/ / 18 / 0x07, / endpoint descriptor length = 07H / USB_ENDPOINT_DESCRIPTOR_TYPE, / endpoint descriptor type = 05H / 0x81, / endpoint 1 IN / OTG_DEV_EP_TYPE_BULK, / bulk transfer = 02H / 0x40,0x00, / endpoint max packet size = 0040H / 0x00, / the value is invalid when bulk transfer */
0x07, /* endpoint descriptor length = 07H */
USB_ENDPOINT_DESCRIPTOR_TYPE, /* endpoint descriptor type = 05H */
0x01, /* endpoint 1 OUT */
OTG_DEV_EP_TYPE_BULK, /* bulk transfer = 02H */
0x40,0x00, /* endpoint max packet size = 0040H */
0x00, /* the value is invalid when bulk transfer */
0x07, /* endpoint descriptor length = 07H */
USB_ENDPOINT_DESCRIPTOR_TYPE, /* endpoint descriptor type = 05H */
0x82, /* endpoint 2 IN */
OTG_DEV_EP_TYPE_BULK, /* bulk transfer = 02H */
0x40,0x00, /* endpoint max packet size = 0040H */
0x00, /* the value is invalid when bulk transfer */
0x07, /* endpoint descriptor length = 07H */
USB_ENDPOINT_DESCRIPTOR_TYPE, /* endpoint descriptor type = 05H */
0x02, /* endpoint 2 OUT */
OTG_DEV_EP_TYPE_BULK, /* bulk transfer = 02H */
0x40,0x00, /* endpoint max packet size = 0040H */
0x00, /* the value is invalid when bulk transfer */
};
五、豆芽usbcan功能测试演示
上述程序编译通过后下载到您的开发板或者豆芽开发后,连接usb线至PC电脑,启动Douya_Tools工具后,打开usb端口,发送“hello word!”,如果在数据接收窗口能够正确显示“recv:hello word!”,说明此刻您的设备USB已经可以正常工作了。
douya_tools测试工具演示视频
下一篇介绍:《如何通过Douya_Tools实现usbcan程序升级》