历史上的今天
今天是:2024年09月17日(星期二)
2018年09月17日 | STM32F4中USB与PC双向通信
2018-09-17 来源:eefocus
STM32F4系列处理器内部集成了USB-OTG控制器,在不要外部USB IC下就可以实现USB通信,最近两天看了下如何利用STM32的USB实现通信,记录下关键步骤:
1. 从http://www.stmcu.org/document/list/index/category-524下载所需要的USB_OTG主机和设备库;
2. 新建STM32工程,并把STM32_USB-Host-Device_Lib下的Libraries中的3个USB库放到工程文件中;
3.在Keil中建立USB相关文件夹,并加入相应的驱动文件:(可参考STM32_USB-Host-Device_Lib—>Project—>USB_Device_Examples—>HID,指示官方给的HID例程是用按键作为鼠标与PC连接),建立好的工程文件如下图:

4. 修改驱动文件,其中usb_hid_core.c位于STM32_USB-Host-Device_Lib—>Project—>USB_Device_Examples—>HID,即官方给的驱动。主要修改以下几个文件:usb_bsp.c(USB引脚初始化,可只需要两根数据引脚),usbd_desc.c(USB设备描述符,当然这个也可以不用修改,采用默认即可),usbd_usr.c(用于设备连接过程的信息显示),usbd_hid_core.c(此为重点修改文件,主要在USBD_HID_cb中添加USBD_HID_DataOut,USBD_HID_CfgDesc中添加HID_OUT_EP,修改HID_MOUSE_ReportDesc,USBD_HID_Init中添加DCD_EP_PrepareRx,并添加USBD_HID_DataOut函数)
5. 修改了usbd_hid_core.c后,同时需要修改usbd_hid_core.h中的USB_HID_CONFIG_DESC_SIZ等参数。注:HID_MOUSE_ReportDesc参数含义不是很清楚。
6. 添加USB FS中断服务函数
void OTG_FS_IRQHandler(void)
{
USBD_OTG_ISR_Handler(&USB_OTG_dev);
}
7. 完成上述部分内容后,便可实现STM32与PC机双向通信,发送函数调用USBD_HID_SendReport,接收函数调用USBD_HID_DataOut(数据存储在USBD_HID_DataOut一个字符数组中)。
附言:可以通过PortHelper调试助手完成USB调试,Beyond Compare可用于比较两个文件中的内容的不通,很实用
史海拾趣
|
软误差是半导体器件中无法有意再生的“干扰”(即数据丢失)。它是由那些不受设计师控制的外部因素所引起的,包括α粒子、宇宙射线和热中子。许多系统能够容忍一定程度的软误差。例如,如果为音频、视频或静止成像系统设计一个预压缩捕获缓冲 ...… 查看全部问答> |
|
关于写wince6的spi应用,如何配置deviceiocontrol来初始呢?急求!!! 小弟最近在写wince6一些设备的测试应用, createfile打开spi设备后,该如何初始化spi的基本配置呢? 用deviceiocontrol吗?但是不知道设置哪些参数来初始化 请各位帮帮忙!… 查看全部问答> |
|
各位嵌入式爱好者网友: 我先说一下,我今年27了,一直在做vb的开发,老感觉待不下去了,想去做一些事情,例如创业。我一直是搞技术的,希望通过技术开发一款产品,这点我可以找合作伙伴一起做。 后来就找到了嵌入式开发这里。我要 ...… 查看全部问答> |
|
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace soundpdatest { public partial class Form ...… 查看全部问答> |
|
9月初的(成都)电子展的规模据说近五百家,我们的两个主要的竞争对手都第一次参加了,我们老大想参加,但实际上我们目前在西南的客户很少。不太了解那边的状况(我们公司提供电子生产制造中用的一种高精度测试设备,目前的主要客户在沿海地区)。 ...… 查看全部问答> |
|
1 最高波特率是多少?手册上说:1.5.2 Maximum baud rateBHigh is the highest baud rate for which the deviation still does not exceed the&n ...… 查看全部问答> |
|
2440启动代码中有段代码设置大小端如下: ASSERT :DEF:ENDIAN_CHANGE [ ENDIAN_CHANGE ASSERT :DEF:ENTRY_BUS_WIDTH [ ENTRY_BUS_WIDTH=32 b ChangeBigEndian ;DCD 0xea000007 ] [ ENTRY_BUS_WIDTH=16 andeq r14,r7,r0,lsl #20 ;DCD 0x0007 ...… 查看全部问答> |
|
最开始的时候是手册看的没感觉,就去看代码(发现更没感觉),主要是寄存器定义不清楚,后来对着User Guide看代码就轻松很多。 后来是要用到某个模块,就图简单,从范例里面把设置代码抄过来。… 查看全部问答> |




