历史上的今天

今天是:2024年09月12日(星期四)

正在发生

2018年09月12日 | STM32L0开发笔记4: 解决使用--CPP11编译USB驱动报错问题

发布者:哈哈哈33 来源: eefocus关键字:STM32L0  编译  USB驱动 手机看文章 扫描二维码
随时随地手机看文章

    项目希望使用C++语言进行程序设计,在Keil中使用C++语言的方法,我已经在在Keil中使用C++进行程序设计进行介绍过,不过对于STM32CubeMX生成的STM32L0XX相关文件进行编译时,提示如下图所示的错误。

    仔细分析可以看出,所有的错误都集中在usbd_conf.c文件,定位错误的具体语句,如下所示。


USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef *pdev)

{

  HAL_StatusTypeDef hal_status = HAL_OK;

  USBD_StatusTypeDef usb_status = USBD_OK;

 

  hal_status = HAL_PCD_DeInit(pdev->pData);

 

  switch (hal_status) {

    case HAL_OK :

      usb_status = USBD_OK;

    break;

    case HAL_ERROR :

      usb_status = USBD_FAIL;

    break;

    case HAL_BUSY :

      usb_status = USBD_BUSY;

    break;

    case HAL_TIMEOUT :

      usb_status = USBD_FAIL;

    break;

    default :

      usb_status = USBD_FAIL;

    break;

  }

  return usb_status; 

}

    错误出现在hal_status = HAL_PCD_DeInit(pdev->pData);语句上。根据错误的具体提示,可分析出是传递参数的类型不匹配,先查看HAL_PCD_DeInit函数,如下所示,函数希望传递的参数类型是PCD_HandleTypeDef。


HAL_StatusTypeDef HAL_PCD_DeInit(PCD_HandleTypeDef *hpcd)

{

  /* Check the PCD handle allocation */

  if(hpcd == NULL)

  {

    return HAL_ERROR;

  }

 

  hpcd->State = HAL_PCD_STATE_BUSY;

  

  /* Stop Device */

  HAL_PCD_Stop(hpcd);

    

  /* DeInit the low level hardware */

  HAL_PCD_MspDeInit(hpcd);

  

  hpcd->State = HAL_PCD_STATE_RESET;

  

  return HAL_OK;

}

    再查看pdev->pData变量,如下所示,pData的类型是void,这就是编译时报错的原因。具体分析可认为C99允许对void隐式的改变数据类型,但CPP11则不可以。


typedef struct _USBD_HandleTypeDef

{

  uint8_t                 id;

  uint32_t                dev_config;

  uint32_t                dev_default_config;

  uint32_t                dev_config_status; 

  USBD_SpeedTypeDef       dev_speed; 

  USBD_EndpointTypeDef    ep_in[15];

  USBD_EndpointTypeDef    ep_out[15];  

  uint32_t                ep0_state;  

  uint32_t                ep0_data_len;     

  uint8_t                 dev_state;

  uint8_t                 dev_old_state;

  uint8_t                 dev_address;

  uint8_t                 dev_connection_status;  

  uint8_t                 dev_test_mode;

  uint32_t                dev_remote_wakeup;

 

  USBD_SetupReqTypedef    request;

  USBD_DescriptorsTypeDef *pDesc;

  USBD_ClassTypeDef       *pClass;

  void                    *pClassData;  

  void                    *pUserData;    

  void        *pData;    

} USBD_HandleTypeDef;

    将*pData的数据类型直接修改为PCD_HandleTypeDef,如下所示,再编译时,问题解决。

typedef struct _USBD_HandleTypeDef

{

  uint8_t                 id;

  uint32_t                dev_config;

  uint32_t                dev_default_config;

  uint32_t                dev_config_status; 

  USBD_SpeedTypeDef       dev_speed; 

  USBD_EndpointTypeDef    ep_in[15];

  USBD_EndpointTypeDef    ep_out[15];  

  uint32_t                ep0_state;  

  uint32_t                ep0_data_len;     

  uint8_t                 dev_state;

  uint8_t                 dev_old_state;

  uint8_t                 dev_address;

  uint8_t                 dev_connection_status;  

  uint8_t                 dev_test_mode;

  uint32_t                dev_remote_wakeup;

 

  USBD_SetupReqTypedef    request;

  USBD_DescriptorsTypeDef *pDesc;

  USBD_ClassTypeDef       *pClass;

  void                    *pClassData;  

  void                    *pUserData;    

  PCD_HandleTypeDef       *pData;    

} USBD_HandleTypeDef;


关键字:STM32L0  编译  USB驱动 引用地址:STM32L0开发笔记4: 解决使用--CPP11编译USB驱动报错问题

上一篇:STM32L0开发笔记5: STM32CubeMX中Debug Serial Wire的设置问题
下一篇:STM32L0开发笔记3: 使用静态库加快Keil编译速度

推荐阅读

从2008年国产工业机器人开始萌芽到现在,刚好第十年,经历了懵懂的成长初期、加速扩张的政策红利期以及小幅度井喷期之后,在2018年的节点上,国产机器人明媚的春天到来之前,不可避免地出现了行业“倒春寒”。 一边是“暖风熏得游人醉”,一边是“春寒料峭难入眠”,正如天气的多变会带来些许的不适和不安感一样,行业的变化也难免让人觉得焦虑,不确定...
(文章来源:中科罗伯特机器人学院) 工业机器人是通过机器人手臂进行工作的,机器人是通过感知、思维、效应方面模拟人的机器系统。工业机器人技术在不断进步,很多人都选择从事工业机器人技术相关的工作,希望可以成为发展中国工业机器人技术的助力,但在众多类型的工业机器人面前,你能区分它们吗,工业机器人都有什么样的不同类型呢。 操作型工业机...
9月9日-11日,深圳国际电子展(ELEXCON)暨5G全球大会(中国站)在深圳国际会展中心(宝安新馆)举办。作为国内领先的MCU设计企业,南京沁恒微电子股份有限公司亮相ELEXCON电子展(展位号:9D13),现场展示接口特色MCU系列解决方案。展会期间,沁恒微产品经理王晓峰接受了集微网采访,他指出,沁恒微这次参展主要为蓝牙、USB、以太网系列接口芯片及MCU,...
9月10日,2021世界机器人大会正式开幕。本届大会以“共享新成果,共注新动能”为主题,吸引了110余家企业,500多款产品参展。参会专家表示,预计我国机器人产业全年增速将超过30%。根据智慧芽最新数据显示,全球与“机器人”直接相关的专利申请超170万件,其中约88%为发明专利。以专利数量排名,全球排名前十的申请人分别为三星电子株式会社、应用材料股...

史海拾趣

问答坊 | AI 解惑

高可靠容错MIL-STD-1553A/B总线控制器IP核

FBIP1553FT ——高可靠容错MIL-STD-1553A/B总线控制器IP核 1.遵循MIL-STD-1553A/B标准,支持MIL-STD-1553A/B规定的全部协议 2.可由软件配置为BC、BM或者RT 3.寄存器操作同BU6158X完全兼容 4.采用容错设计,大大提高总线控制器可靠性 可纠正存 ...…

查看全部问答∨

如何在win ce下设置图片的3D凸起效果?(C#) 谢谢了!

如何在win ce下设置图片的3D凸起效果?(C#) 谢谢了!…

查看全部问答∨

汽车速度采集

给我份代码 或者思路参考吗 我是刚申请的 没分 以后有了我一定给 QQ79584321…

查看全部问答∨

ActiveSync安装出错

我在安装ActiveSync的时候出了个错,错误提示为“写入文件时出错:C:\\Program Files\\Microsoft ActiveSync\\wcesmgr.exe,请验证您有权访问该目录” 请问这是怎么回事,我重启过机器,还是不行,并且我用的就是administrator账户,在其他的机子上 ...…

查看全部问答∨

开发CASIO IT500 (WinCE4.1)和电脑通讯的程序,需要哪些东西

我是个新手 我要在CASIO it500上开发一个软件, 请问 1:用VS2005,可以么? 2:开发语言用c#,it500支持吧? 3:开发这个软件,好像不能用虚拟机吧,因为it500有扫描功能,vs2005自带的虚拟软件,没有扫描功能。 4:和PC通讯,需要学习那些 ...…

查看全部问答∨

最近忙了!

最近忙了,最近一直很少逛论坛! 申请的开发套件被闲置一周了!眼看就只有一周就要交板子了!我真的不好意思!对不起板子! 更对不起我们论坛这次活动啊!我特此申请:soso姐能不能让我缓一下再交呢?最多缓期是几天呢?最近一两天我会把前几天做的 ...…

查看全部问答∨

STM32刹车使用问题

用STM32产生PWM波时,将刹车信号设置成高电平有效,则不管刹车输入端是0还是1都会跳入刹车中断程序中。如若将刹车信号设置成低电平有效,则不管刹车输入端是0还是1都不会跳入刹车中断程序中。 设计时再刹车引脚上加了下拉电阻。。。   初学 ...…

查看全部问答∨

TSP分布式控制提高了测试速度并且降低了测试成本

TSP技术通过允许用户使用标准的PC控制或者创建在仪器内的微处理器上执行的嵌入式测试脚本,增强了仪器控制。通过使用TSP测试脚本而非PC用于仪器控制,能够避免PC控制器和仪器之间的通信延迟,这提高了测试产能。测试脚本可以包含数学和判决规则, ...…

查看全部问答∨

Orcad Capture CIS删除一个元件后自动编号,导入网表到allegro出现DRC

例如我画了10个电阻,编号为R1~R10,allegro里面已经画好连线了。然后在原理图把R5给删除了,重新自动编号,然后导入网表,原先的R7变成了R6,占用了原先R6的位置,然后就提示DRC错误了。请问这种情况怎么处理。谢谢。…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved