你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32f769discovery板卡实现USB_device读卡器

[复制链接]
stary666 发布时间:2018-4-4 09:52
学习了f767的USB相关例程,本想直接移植到f769,但是f767的例程里面没有USB的PHY,不能实现高速,而f769的板载有PHY可以实现高速功能,

见上图,是板载的PHY芯片,可以实现USB是高速传输,
既然不能直接移植,就只能通过官方的例程移植了,于是在之前实现的SD卡移植fatfs的例程的基础上继续移植实现USB-slave读卡器的功能。参考官方的相关例程,准备好了目录及相关源文件,见下图

其中pcd_usb.c文件是转化的官方例程的stm32f7xx_hal_pcd.c和stm32f7xx_ll_usb.c及相关的头文件而来的usb相关配置及操作的函数,就不一一介绍了。
下面主要讲解一下usbd_conf.c和usbd_storage.c。而usbd_desc.c这个文件本就是官方为配置板卡的,所以不用任何改动即可。
usbd_conf.c里面需要改动的有HAL_PCD_MspInit()函数,里面是USB相关的IO口配置及初始化。

  
    /* Configure USB FS GPIOs */

    *(uint32_t *)0x40023830 |= 7<<0 | 3<< 7;
     /* CLK */
    GPIO_Set(GPIOA,PIN3|PIN5,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_NONE);//PA9,PA10,复用功能,上拉输出
         GPIO_AF_Set(GPIOA,3,10);        //PA3
         GPIO_AF_Set(GPIOA,5,10);        //PA5
/* D1 D2 D3 D4 D5 D6 D7 */
     GPIO_Set(GPIOB,PIN0|PIN1|PIN5|PIN10|PIN11|PIN12|PIN13,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_NONE);//PA9,PA10,复用功能,上拉输出
         GPIO_AF_Set(GPIOB,0,10);        //PA3
         GPIO_AF_Set(GPIOB,1,10);        //PA5
    GPIO_AF_Set(GPIOB,5,10);        //PA5
    GPIO_AF_Set(GPIOB,10,10);        //PA5
    GPIO_AF_Set(GPIOB,11,10);        //PA5
    GPIO_AF_Set(GPIOB,12,10);        //PA5
    GPIO_AF_Set(GPIOB,13,10);        //PA5
/* STP */
    GPIO_Set(GPIOC,PIN0,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_NONE);//PA9,PA10,复用功能,上拉输出
         GPIO_AF_Set(GPIOC,0,10);        //PA3
/* NXT */
    GPIO_Set(GPIOH,PIN4,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_NONE);//PA9,PA10,复用功能,上拉输出
         GPIO_AF_Set(GPIOH,4,10);        //PA3
/* DIR */
    GPIO_Set(GPIOI,PIN11,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_NONE);//PA9,PA10,复用功能,上拉输出
         GPIO_AF_Set(GPIOI,11,10);        //PA3

    /* Enable USB HS Clocks */
    *(uint32_t *)0x40023830 |= 3<< 29;
    prioritygroup = NVIC_GetPriorityGrouping();
   
    /* Set USBHS Interrupt to the lowest priority */
    NVIC_SetPriority(OTG_HS_IRQn, NVIC_EncodePriority(prioritygroup, 0x0F, 0));
   
    /* Enable USBHS Interrupt */
    NVIC_EnableIRQ(OTG_HS_IRQn);

里面有相关的注释,不用过多讲解,其他的函数不需要改动,

在usbd_storage.c里面需要改动的有
STORAGE_GetCapacity()函数按下面更改
int8_t STORAGE_GetCapacity(uint8_t lun, uint32_t *block_num, uint16_t *block_size)
{
  SD_CardInfo info;
  int8_t ret = -1;  
  
  
    SD_GetCardInfo(&info);
   
   
    ret = 0;

  return ret;
}

STORAGE_IsReady()函数按下面更改

int8_t STORAGE_IsReady(uint8_t lun)
{
  static int8_t prev_status = 0;
  int8_t ret = -1;
  

    if(prev_status < 0)
    {
      sdcard_init();
      prev_status = 0;
      
    }
   

  else if(prev_status == 0)
  {
    prev_status = -1;
  }
  return ret;
}

STORAGE_Read()函数按下面更改

int8_t STORAGE_Read(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
  int8_t ret = -1;  
  

    SD_ReadBlocks((uint8_t *)buf, blk_addr, blk_len, 1000);
    ret = 0;

  return ret;
}

STORAGE_Write()函数按下面更改

  • int8_t STORAGE_Write(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
  • {
  •   int8_t ret = -1;
  •     SD_WriteBlocks((uint8_t *)buf, blk_addr, blk_len, 1000);
  •     ret = 0;
  •   return ret;
  • }

[color=rgb(51, 102, 153) !important]复制代码

好了,全部更改完成,编译通过,可以增加在main函数里面的初始化了

直接把官方例程中的代码拷贝过来即可
  • /* Init Device Library */
  •   USBD_Init(&USBD_Device, &MSC_Desc, 0);
  •   /* Add Supported Class */
  •   USBD_RegisterClass(&USBD_Device, USBD_MSC_CLASS);
  •   /* Add Storage callbacks for MSC Class */
  •   USBD_MSC_RegisterStorage(&USBD_Device, &USBD_DISK_fops);
  •   /* Start Device Process */
  •   USBD_Start(&USBD_Device);

[color=rgb(51, 102, 153) !important]复制代码

编译完成,下载,在设备管理器会出现如下


其中便携设备的H盘,磁盘驱动器的STM Product USB Device还有通用串行总线控制器的USB大容量存储设备,说明移植成功,和直接下载官方例程是一样的效果。


                        发贴于2018年4月4日

评分

参与人数 1 ST金币 +10 蝴蝶豆 +1 收起 理由
Inc_brza + 10 + 1

查看全部评分

收藏 评论5 发布时间:2018-4-4 09:52

举报

5个回答
dsjsjf 回答时间:2018-4-4 16:48:15
学习了,感谢分享
stary666 回答时间:2018-4-4 17:56:01
Inc_brza 回答时间:2018-4-4 18:19:35
谢谢楼主,还请楼主编辑下格式
stary666 回答时间:2018-4-5 10:48:26
有时间整理一下
zero99 回答时间:2018-4-17 14:47:13
感谢分享,请汇总到4月技术原创
https://www.stmcu.org.cn/module/forum/thread-615497-1-1.html

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版