stm32f429discovery的USB_HID应用笔记

先上个移植完的工程下载地址:

http://download.csdn.net/detail/u013352158/8212365


刚开始打算在discovery板子上移植USB官方库时候是想用全速模式的,折腾了半天没反应,后来看原理图时发现全速模式的两引脚接到仿真器上去了,没办法只能采用在高速口下配置成全速模式的方法,不过移植起来也算方便,总的来说就三点吧:时钟,IO最后就是把该删的都删了。

文件结构可以看下面这一篇文章,讲的很清楚了,毕竟f4和f1系列USB库差别挺大的,一开始可能无从下手

http://blog.csdn.net/xbl1986/article/details/17577685#comments


首先是预编译指令,有4个:USE_STDPERIPH_DRIVER,STM32F4XX,USE_USB_OTG_HS,USE_EMBEDDED_PHY,前三个不说了应该都看的懂,第四个有两个指令可以选择,USE_ULPI_PHY是正常的高速模式,stm32要使用高速模式必须外扩个USB3300芯片作为高速USB的物理层这里我们使用片上内置的物理层,所以用的是USE_EMBEDDED_PHY,在高速口下配置成全速模式。

接着是时钟,USB时钟必须为48M,不同板子外接的晶振不一样,官方库里用的是25M的外部晶振,而我们的discovery板子上用的是8M的晶振,需要去system_stm32f4xx.c文件里改下分频系数,下面就是配置成168M主频48M的USB时钟的分频系数,具体的时钟树可以去看数据手册。

/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
#define PLL_M      8
#define PLL_N      336

/* SYSCLK = PLL_VCO / PLL_P */
#define PLL_P      2

/* USB OTG FS, SDIO and RNG Clock =  PLL_VCO / PLLQ */
#define PLL_Q      7

之后去app.c里找主函数,主函数很简单,只调用了一个USBD_Init()初始化函数,跟着这个函数去usb_bsp.c文件里把底层IO配置改下,说白了就是配置下DM,DP,VBUS三个引脚,顺便把USB和GPIOB外设时钟打开。

void USB_OTG_BSP_Init(USB_OTG_CORE_HANDLE *pdev)
{
  GPIO_InitTypeDef GPIO_InitStructure;    
  
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB , ENABLE) ;
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_OTG_HS, ENABLE) ;
  
  GPIO_InitStructure.GPIO_Pin = //GPIO_Pin_12 | //ID
                                GPIO_Pin_14 | //DM
                                GPIO_Pin_15;  //DP
  
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;	
  GPIO_Init(GPIOB, &GPIO_InitStructure);  
  
//  GPIO_PinAFConfig(GPIOB,GPIO_PinSource12,GPIO_AF_OTG_HS_FS) ; 
  GPIO_PinAFConfig(GPIOB,GPIO_PinSource14,GPIO_AF_OTG_HS_FS) ; 
  GPIO_PinAFConfig(GPIOB,GPIO_PinSource15,GPIO_AF_OTG_HS_FS) ;
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOB, &GPIO_InitStructure);  
}

到这里就接近尾声了,编译一下开始删吧,中断文件里几个外部中断和唤醒中断都可以删了,usbd_usr.c里各种函数内容都删了吧,留着个接口当备胎以后再说,删的没错误了之后把usb_conf.h里下面两条注释掉就算完成了。

// #define USB_OTG_HS_DEDICATED_EP1_ENABLED
// #define USB_OTG_HS_LOW_PWR_MGMT_SUPPORT


最后贴个usb的软断开代码,以后应该会用到的吧:

  USB_OTG_DCTL_TypeDef   dctl;
     /*软断开*/
  dctl.d32 = USB_OTG_READ_REG32(&pdev->regs.DREGS->DCTL);
  dctl.b.sftdiscon = 1;         //0:正常工作;1:软断开
  USB_OTG_WRITE_REG32(&pdev->regs.DREGS->DCTL, dctl.d32);

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
STM32F103C8 Serial(UART) to USB HID Keyboard Mouse 串口 转 USB键盘鼠标 (1) 使用Composite Device 组合(复合)设备 (1.1) 1个Device -> 1个 Configuation -> 2个Interfance (Keyboard & Mouse) (1.2) Keyboard Interfance -> HID (boot mode) -> 2个Endpoint(IN_0x81 & OUT_0x01) -> KeyboardReportDescriptor(不使用Report ID) (1.3) Mouse Interfance -> HID (boot mode) -> 1个Endpoint(IN_0x82) -> MouseReportDescriptor(不使用Report ID) (1.4) 使用HID boot模式, 不使用Report ID, 以便兼容在 计算器设定BIOS模式 中的操作 (2) 串口接收 命令 (2.1) UART协议: 115200, n, 8, 1 (2.2) 1帧发送字符串格式, 以 '{'开始; '}'结束; ','分隔. 共9个10进制数字 例如: {1,2,3,4,5,6,7,8,9} (2.3) 第9位 区分 Keyboard(64) 或是 Mouse(128) 命令 例如: {0,0,0,0,0,0,0,0,64} --- 发送Keyboard命令 {0,0,0,0,0,0,0,0,128} --- 发送Keyboard命令 (3) 发送Keyboard键盘命令时 : 第1~8位 分别如下 (3.1) 第1位 : Key_Release = 0x00, Left_Control = 0x01, Left_Shift = 0x02, Left_Alt = 0x04, Left_GUI = 0x08, Right_Control = 0x10, Right_Shift = 0x20, Right_Alt = 0x40, Right_GUI = 0x80, 例如: {8,0,0,0,0,0,0,0,64} --- 发送 Win_Key键 {128,0,0,0,0,0,0,0,64} --- 发送 WinApp_Key键 {32,0,0,0,0,0,0,0,64} --- 发送 右Shift键 (3.2) 第2位 : 保留,不使用,一律填0 (3.3) 第3~8位 : 可以同时发送6个Keyboard按键 例如: {0,0,4,5,6,7,8,9,64} --- 发送 'abcdef'键 {2,0,4,5,6,7,8,9,64} --- 按住 左Shift 发送 'abcdef'键 => 'ABCDEF' {0,0,0,5,0,7,0,9,64} --- 发送 'bdf'键 (0表示 无按键) 按键码 可参阅: (HID Usage ID) http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/translate.pdf https://www.hiemalis.org/~keiji/PC/scancode-translate.pdf https://gist.github.com/MightyPork/6da26e382a7ad91b5496ee55fdc73db2 http://www.usb.org/developers/hidpage/Hut1_12v2.pdf (4) 发送Mouse鼠标命令时 : 第1~8位 分别如下 (4.1) 第1位 : Button_Release = 0x00, Left_Button = 0x01, Right_Button = 0x02, Mid_Button = 0x04, 例如: {1,0,0,0,0,0,0,0,128} --- 点击 左键 {2,0,0,0,0,0,0,0,128} --- 点击 右键 {4,0,0,0,0,0,0,0,128} --- 点击 中键 (4.2) 第2~4位 : 移动(X,Y), 滚轮(Wheel) X: -127~127:左右移动鼠标 Y: -127~127:上下移动鼠标 Wheel: -127~127:上下转动滚轮 例如: {0,20,-10,0,0,0,0,0,128} --- 鼠标 右移20,上移10 {0,0,0,-30,0,0,0,0,128} --- 滚轮-30 (4.2) 第5~8位 : 保留,不使用,一律填0
STM32F429是意法半导体(STMicroelectronics)推出的一款高性能微控制器系列,它采用了ARM Cortex-M4内核,具有丰富的外设和强大的计算能力,广泛应用于工业控制、智能家居、车载电子等领域。 对于STM32F429系列的开发,STMicroelectronics提供了许多开发工具和资源,其中之一就是stm32f429_vcp.rar。这个压缩包中包含了使用STM32F429USB功能时所需的虚拟串口驱动程序,以及相关的示例代码和文档。 STM32F429USB功能包括了USB设备和USB主机两种模式,通过USB接口可以连接到PC或其他USB设备,实现数据的传输和通信。虚拟串口是基于USB的一种通信方式,可以通过USB接口模拟出一个串口,使得MCU能够与PC或其他串口设备进行通信。 stm32f429_vcp.rar中的虚拟串口驱动程序能够实现PC与STM32F429之间的数据传输,开发者可以通过PC终端软件或其他串口工具与STM32F429进行通信。该驱动程序提供了一组API函数,方便开发者进行数据发送和接收的操作。 通过使用stm32f429_vcp.rar中的虚拟串口驱动程序,开发者可以更加方便地进行STM32F429USB开发和调试工作。可以实现与PC之间的数据传输、调试输出等功能,提高了开发效率和便利性。 综上所述,stm32f429_vcp.rar是STM32F429系列开发中的一个重要资源,它提供了虚拟串口驱动程序,帮助开发者更加方便地进行STM32F429USB开发和调试工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值