STM32 USB 之从0开始移植条记

2018-09-14来源: eefocus 要害字:STM32   USB   移植条记

        -----------------------------------动机-----------------------------------

写在前面的话:最近逛淘宝无意间发现RC522居然只要10元左右就可以包邮买到,真是太自制了,就忍不住买了个回来玩玩。到货移植到我的板子上OK 后突然发现我的USB口紧张了,一个用来给板子供电一个插jlink 一个插入usb转串口给RC522下命令。就想着将板子供电和RC522传输用一个USB接口来实现。这就是这次折腾USB的来由~-~

       ----------------------------------开始折腾USB-----------------------------

  首先我想拿来主义,百度一个完整的USB规范就完事。以上就百度了下STM32 USB HID

那就一个多啊,已是我就下一个看一个看是否适合我用。很快我就发现了两个问题不能说所有至少我百度到到都是这样:

1.      这些规范多数是在官方USB规范上修改得来,工程名都没做修改。

2.      这些规范多数是用的3.x的USB FW,官网上我搜到的已是4.0了

3.      这些规范中STM中为了兼容他的N个板子做了许多通用性的处置惩罚。这些对于初学者来说不够清晰明了。

所以我决定从0开始构建一个方便移植的模块,移植他的JoyStickMouse。在我的项目中用到时加入这个模块即可。

首先从官网下载最新的USB库获得的是一个压缩包stsw-stm32081.zip解压后如图:

        

Projects 是官方的规范,Libraries 是USB的4.0驱动

接下来用MDK建设一个工程我用的MDK是4.12  STM的固件库是3.5的 USB库就是4.0的了,芯片用的是STM32F103VC   建设以下文件夹

  

在USBFW 下建设两个文件夹划分存放USB的底层驱动文件和中间层接口文件并把STM32_USB-FS-Device_Lib_V4.0.0\Libraries\STM32_USB-FS-Device_Driver中的inc和src复制到DRIVER文件夹内,把STM32_USB-FS-Device_Lib_V4.0.0\Projects\JoyStickMouse中的inc和src复制到MID文件夹内。一般我们只要修改MID层的文件而DRIVER是不用修改的。

 

  建好后的工程截图:

     

这个时候编译下可能出来一大堆的错误。这个USB的源码分析百度有许多很好的文章解说的很是详细各人可以自行百度。

  接下来说说我的修改----------------------------------------

首先在usb_conf中界说了Buffer Description Table 

      


 这个0x18意味着留24字节给table  只用到3个端点了,一般我们用端点0枚举,端点1输入,端点2输出这个界说是够用了,如果你的端点应用大于3 就要修改这个表的巨细了。

-------------------------------------------修改硬件抽象---------------------------------------------------------

在有3个文件相关:

1.      platform_config.h  STM官方板子的资源平台配置文件。

2.      hw_config.c   hw_config.h  USB的硬件相关配置

首先我用的不是官方板子,把#include "platform_config.h"注释掉只保留其中的ID和USB接入检测机制的上拉控制IO宏界说(我的板子是PC6,这个凭据实际情况修改即可)

   

  官方规范中在main 用

Set_System();

 

 USB_Interrupts_Config();

 

 Set_USBClock();

 

USB_Init();

完成了USB的初始化事情,

Set_System();

这个名字太大了,很显然用在我的项目中太大好听,修改hw_config.c

    voidUSB_Configurage(void)

{

         GPIO_InitTypeDefGPIO_InitStructure;

        

         /*enable the PWR clock */

         RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);

         //USB用的IO

         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

         //USB时钟

         Set_USBClock();

 

        

        

         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

         GPIO_InitStructure.GPIO_Pin= GPIO_Pin_6;

         GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;

         GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_OD;

         GPIO_Init(GPIOC,&GPIO_InitStructure);

 

        /*C6-USB接入控制口 */

           /* Enable the USB disconnect GPIO clock */

           RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_DISCONNECT,ENABLE);

           /* USB_DISCONNECT used as USB pull-up */

           GPIO_InitStructure.GPIO_Pin =USB_DISCONNECT_PIN;

           GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;

           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;

           GPIO_Init(USB_DISCONNECT,&GPIO_InitStructure); 

 

         USB_Cable_Config(DISABLE);

         USB_Cable_Config(ENABLE);

 

         USB_Interrupts_Config();

         USB_Init();

}

最后在usb_pwr.c 做些小改动,因为不知道他那个板子是怎么叫醒的,所以把那些都屏蔽掉了。具体见代码咯

 

这样在main.c中只要USB_Configurage(); 就搞定USB初始化了,虽然还要在h文件中做些接口声明和去掉一些和我的板子硬件关系不大的函数,目的只有一个简朴明了。


 

编译一下,通过。这样以后在任何一个项目中要用到USB时只要复制USBFW中的文件,然后小改下MID层的文件就可以用上USB了,在main.c中只要

#include"usb_lib.h"

#include"hw_config.h"

#include"usb_pwr.h"

 在任何需要发送数据的地方将数据写入buff就完成了,虽然差异的应用可能还要修改端点初始化和描述符等等,但这些应该都是大把的例子可以参照复制的了。具体看代码咯小我私家觉得st的c应用照旧很好的特别是指针函数数组这块 ~-~

我的板子用了4个按键(PD3:6)来控制PC的光标4个偏向的移动,将代码下到板子上的结果就是按下相应的按键光标就移动咯

至此就移植完了,接下来继续移植官方的另外几个例子

 代码下载     http://download.csdn.net/detail/gzzxbcxm2005/9513812 


要害字:STM32   USB   移植条记

编辑:什么鱼 引用地址:/mcu/2018/ic-news091441325.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站接纳的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜果真自由流传,或不应无偿使用,请实时通过电子邮件或电话通知我们,以迅速接纳适当措施,制止给双方造成不须要的经济损失。

上一篇:移植STM32固件库用于HID双向通信
下一篇:最后一页

关注亿博娱乐注册民众号 快捷获取更多信息
关注亿博娱乐注册民众号
快捷获取更多信息
关注亿博娱乐注册服务号 享受更多官方福利
关注亿博娱乐注册服务号
享受更多官方福利

推荐阅读

STM32F10X的USB固件库说明

最底层1)、usb_int.c,本文件包罗两其中断服务函数CTR_LP()和CTR_HP(),在接收发送中断时使用这两个函数进行处置惩罚,这两个函数又调用各个USB端点处置惩罚函数,端点处置惩罚函数由用户自界说。2)、usb_regs.c,本文件时硬件抽象层。它含有种种用于读取或设置USB寄存器的函数,相当于对寄存器操作要领的封装。3)、usb_mem.c,本文件主要卖力进行数据传输处置惩罚。它主要卖力数据在用户区域(内存)或USB数据包缓冲区的相互转移。中间层1)、usb_core.c,本文件主要卖力USB协议治理,如USB尺度请求、种种端点0的控制信息处置惩罚。2)、usb_init.c,本文件主要包罗了USB初始化的函数
发表于 2018-09-14

STM32 USB OTG官方库移植

实ST公司的官方usb库已经做得很不错了。只是一开始不会用,导致浪费了许多时间。首先拿到库,需要确认板上的端口资源。VBUS D- D+ GND 四条线至少要有,但是VBUS纷歧定要接在芯片端口上。作为从机的话VBUS可以直接拉高到3v以上。电流巨细待确认。D-,D+一定要接到芯片的OTG FS HS均可 DM  DP对应 D- D+。作为主机可以不接VBUS,也可将VBUS接到芯片端口作为检测口,此处不明是硬件原因照旧什么原因,若使用VBUS检测的话,拔掉usb线会造成JLINK瓦解,因此我将VBUS口作为普通I/O口,查询读取是否连接或失去连接。OTG_HS想用的话需要外接PHY,若无外接PHY,也将HS口配置成FS
发表于 2018-09-14

STM8学习条记---串口uart1

使用uart1串口,需要用到stm8s_uart1.c和stm8s_uart1.h两个文件1、建设工程目录结构如下:2、编写uart.h文件如下:#ifndef __UART_H#define __UART_H#include "stm8s.h"#include "stm8s_clk.h"void USART_Configuration(void);   //串口配置函数void UART_send_string(uint8_t *Buffer);//发送一个字符串函数#endif /* __UART_H */3、编写uart.c文件如下:#include "
发表于 2018-09-13

STM32 GPIO——流水灯例程 学习总结

通过控制LED灯,熟悉STM32的存储器结构、地址映射、时钟树、库文件、利用库的要领及开发工程的步骤,建设STM32的开发思想。这是我建设的第一个工程,由于涉及面较广,知识点疏散,在此做一个总结。1)为控制LED灯,知道要使用GPIO外设。GPIO(General-Purpose I/O):I/O引脚可以被软件设置成种种差异的功效,如输入或输出。控制LED灯,即控制STM32芯片的I/O引脚电平的崎岖来实现。2)了解GPIO外设有什么功效,要如何使用。GPIO引脚又被分为GPIOA、GPIOB、...、GPIOG差异的组,每组端口分为0~15共16个差异的引脚,对于差异型号的芯片,端口的组和引脚的数量差异。功效检察参考手册3)获知
发表于 2018-09-13

STM32F103C8T6-LED点亮法式

#include <stm32f10x.h> //----------------------------------------------------------------------------- void mydelay_ms(int ms){    volatile int  i;    int k = ms * 2333 ;    for ( i=0; i<k; i++ ) {        ;   
发表于 2018-09-13

STM32F0在IAR新建工程

1、到官网下载固件库,类似"STM32F0xx_StdPeriph_Lib_V1.5.0",解压获得文件"_htmresc"  "Libraries"  "Projects"   "Utilities".     ①“Libraries\STM32F0xx_StdPeriph_Driver”下的inc与src是底层驱动。     ②“Libraries\CMSIS\Device\ST\STM32F0xx\Source\Templates\iar
发表于 2018-09-13
热门资源推荐
更多
  •  rar文件单片机应用技术选编10
  •  pdf文件EZ-USB系列2100技术参考手册
  •  rar文件For configuring the SDIO on STM32
  •  rar文件EZ-USB FX系列单片机USB外围设备设计与应用
  •  51单片机C语言法式设计教程
  •  LaTeX入门
  •  嵌入式实时操作系统uCOS-II
  •  [漫画傅里叶解析].(日)

小广播

热门运动
换一批
更多

下载有好礼!未来已来,你准备好了吗?益莱储5G白皮书!
TI 电机驱动应用闯关答题赛
造个车,一起驶向诗和远方!学习 TI 汽车参考设计,加入技术小测试赢好礼!
有奖直播:基于GaN 的高频(1.2MHz)高效率 1.6kW 高密度临界模式 (CrM) 图腾柱功率因数校正 (PFC)转换器的应用介绍
TI E2E中文社区年终回馈,15 块 CC3200-LAUNCHXL 开发板免费申请中……测评赢好礼喽!

最新视频课程更多

SimpleLink CC26x2CC13x2 可支持多重协议的无线微控制器
SimpleLink CC26x2CC13x2 可支持多重协议的无线微控制器
 SimpleLink 系列产物的宁静性介绍
SimpleLink 系列产物的宁静性介绍
基于 TI MSP430 Scan Interface?技术的流量表解决方案
基于 TI MSP430 Scan Interface?技术的流量表解决方案
2018 TI SimpleLink? MCU 平台研讨会 - 回看
2018 TI SimpleLink? MCU 平台研讨会 - 回看
Simplelink 无线连接平台介绍
Simplelink 无线连接平台介绍

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广事情。

更多相关热搜器件

  •  MSP430F5524IRGC
  •  E5GC-QX2A6M-015
  •  PIC16C65AT-04E/L
  •  402F2601XIKT
  •  LFSPXO027504Bulk
  •  TPS71718QDRVRQ1
  •  EMRA31V2H-24576M
  •  402F48012IAT
  •  XC6209D282MR-G
  •  LFSPXO025838Reel
亿博娱乐平台版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright ? 2005-2018 EEWORLD.com.cn, Inc. All rights reserved