(HAL)stm32f407+freertos通过usb驱动移远4G模块-EC600U

概述

本篇文章主要介绍:

  1. 如何使用STM32CubeMX创建stm32F407+freertos+usb host的基础工程。
  2. USB-HOST-CDC驱动运行过程。
  3. 如何根据4G模块的具体信息修改usb相关代码。
  4. MCU如何通过usb与4G模块通信,收发数据。
  5. 调试过程中遇到的问题以及解决办法。
    整个过程中在网上搜罗了很多参考资料,有些与我理解不相符的就不罗列了,觉得有用的我会引用并简单说明。

创建工程

关于创建工程,网上资料太多了,freertos的,usb的都有详细教程,我这里就只罗列个大概,不详细展开了。

  1. 根据实际情况选择芯片。
    选择芯片
  2. 基础配置
    工程基础配置
  3. 启用freertos。
    启用freertos
  4. 启用USB。先根据硬件配置好USB对应的GPIO模式,然后配置USB,这里选用的是FS全速模式,单片机做为USB Host,4G模块为Slave(根据EC600U手册描述,也只能为Slave),然后添加usb相关驱动库。
    模块手册内容

配置USB相关GPIO
选择FS全速USB Host模式
添加USB驱动库
5. 生成代码。根据需要增加其他配置,配置完成后生成代码。
配置工程+生产代码
至此,基本工程已经创建完成了,后面再根据需要进行一些代码的修改,因为本篇主要讲述USB的使用,freertos的内容就不叙述了。

USB-HOST-CDC驱动运行过程

此部分简述了设备上电后USB驱动是如何运行的,理解相关的内容,可以略过。
在freertos下,USB-HOST-CDC驱动是在freertos的默认任务下进行的初始化,代码如下:

void MX_USB_HOST_Init(void)
{
   
  /* USER CODE BEGIN USB_HOST_Init_PreTreatment */
  /* USER CODE END USB_HOST_Init_PreTreatment */

  /* Init host Library, add supported class and start the library. */
  if (USBH_Init(&hUsbHostFS, USBH_UserProcess, HOST_FS) != USBH_OK)
  {
   
    Error_Handler();
  }
  if (USBH_RegisterClass(&hUsbHostFS, USBH_CDC_CLASS) != USBH_OK)
  {
   
    Error_Handler();
  }
  if (USBH_Start(&hUsbHostFS) != USBH_OK)
  {
   
    Error_Handler();
  }
  /* USER CODE BEGIN USB_HOST_Init_PostTreatment */

  /* USER CODE END USB_HOST_Init_PostTreatment */
}

简单来说,上面的初始化完成后USB驱动就开始运行了。具体包括GPIO模式的配置代码,配置完成后它创建了一个单独的任务 SBH_Process_OS,就是在这个任务里调用了USB的处理函数USBH_Process,USBH_Process函数实现了USB驱动的状态机,包括设备检测、设备枚举等过程,是USB驱动的主要过程函数,借用这篇文章中的图片展示下状态机,该文章对驱动库进行了详细说明,可以看一下:
USB设备驱动状态机
其中比较重要的是设备枚举部分,截取相关代码如下,关于枚举这篇文章讲解的很详细:

case HOST_ENUMERATION:
      /* Check for enumeration status */
      status = USBH_HandleEnum(phost);
      if (status == USBH_OK)
      {
   
        /* The function shall return USBH_OK when full enumeration is complete */
        USBH_UsrLog("Enumeration done.");

        phost->device.current_interface = 0U;

        if (phost->device.DevDesc.bNumConfigurations == 1U)
        {
   
          USBH_UsrLog("This device has only 1 configuration.");
          phost->gState = HOST_SET_CONFIGURATION;
        }
        else
        {
   
          phost->gState = HOST_INPUT;
        }
#if (USBH_USE_OS == 1U)
        phost->os_msg = (uint32_t)USBH_STATE_CHANGED_EVENT;
#if (osCMSIS < 0x20000U)
        (void)osMessagePut(phost->os_event, phost->os_msg, 0U);
#else
        (void)osMessageQueuePut(phost->os_event, &phost->os_msg, 0U, 0U);
#endif
#endif
      }
      break;

设备枚举成功后,通常就可以通信了,但是因为刚接触USB通信,一直调不通,所以对枚举过程也进行了一些研究,在USBH_HandleEnum函数中会调用到以下接口:

ReqStatus = USBH_Get_DevDesc(phost, 8U);
ReqStatus = USBH_Get_DevDesc(phost, USB_DEVICE_DESC_SIZE);
ReqStatus = USBH_SetAddress(phost, USBH_DEVICE_ADDRESS);
ReqStatus = USBH_Get_CfgDesc(phost, USB_CONFIGURATION_DESC_SIZE);
ReqStatus = USBH_Get_CfgDesc(phost, phost->device.CfgDesc.wTotalLength)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/786420.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Test-Time Adaptation via Conjugate Pseudo-labels--论文笔记

论文笔记 资料 1.代码地址 https://github.com/locuslab/tta_conjugate 2.论文地址 https://arxiv.org/abs/2207.09640 3.数据集地址 论文摘要的翻译 测试时间适应(TTA)指的是使神经网络适应分布变化&#xff0c;在测试时间仅访问来自新领域的未标记测试样本。以前的TT…

STM32(二):STM32工作原理

这里写目录标题 0、参考1、寄存器和存储器基本概念&#xff08;1&#xff09;基本概念&#xff08;2&#xff09;主要区别&#xff08;3&#xff09;联系&#xff08;4&#xff09;实际应用中的案例&#xff08;5&#xff09;总结&#xff08;6&#xff09;一些名词解释 2、STM…

实时监测、智能预警:电缆光纤测温系统|原理、应用与前景

实时监测、智能预警&#xff1a;电缆光纤测温系统|原理、应用与前景 电缆光纤测温系统&#xff0c;作为现代电力系统中不可或缺的一部分&#xff0c;以其独特的优势在电缆安全监控领域发挥着日益重要的作用。该系统利用光纤传感技术&#xff0c;实时监测电缆的运行温度&#x…

Qt常用基础控件总结—带边框的部件(QFrame和QLabel)

带边框的部件 框架控件QFrame类 QFrame类介绍 QFrame 类是带有边框的部件的基类,带边框部件的特点是有一个明显的边框,QFrame类就是用来实现边框的不同效果的(把这种效果称为边框样式),所有继承自 QFrame 的子类都可以使用 QFrame 类实现的效果。 部件通常是矩形的(其他…

Kithara和OpenCV (一)

Kithara使用 OpenCV 目录 Kithara使用 OpenCV简介需求和支持的环境构建 OpenCV 库使用 CMake 进行配置以与 Kithara 一起工作 使用 OpenCV 库设置项目运行 OpenCV 代码图像采集和 OpenCV自动并行化限制和局限性1.系统建议2.实时限制3.不支持的功能和缺失的功能4.显示 OpenCV 对…

【Perforce】QAC-分析时如何不应用某些规则

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决扫描项目时如何不应用某些规则进行分析。 2、 问题场景 对于一些建议性的MISRA规则&#xff0c;不想用于项目扫描&#xff0c;如何处理&#xff1f; 3、软硬件环境 1、软件版本&#xff1a;HelixQAC23.04 2…

中国科学院院士丁汉:人形机器人——机器人与人工智能结合的爆发点

工业制造是国民经济的重要支柱&#xff0c;是实现发展升级的国之重器。早在 2002 年&#xff0c;党的十六大就曾提出&#xff0c;坚持以信息化带动工业化&#xff0c;以工业化促进信息化&#xff0c;走出一条科技含量高、经济效益好、资源消耗低、环境污染少、人力资源优势得到…

24年,计算机仍然是最热门的专业?!

大家好&#xff0c;我是程序员鱼皮。最近很多高考完的朋友开始进入了填志愿选专业的时期。出于好奇&#xff0c;我也在网上了解了一下今年的热门专业和就业情况&#xff0c;结果并没有出乎我的意料&#xff0c;对于很多省份&#xff0c;计算机科学与技术依然是最热门的专业&…

fastadmin 各种开发技巧,问题总合集,持续跟新中....

使用 搜索的使用 自定义按钮 需改后的代码 {field: operate, title: __(Operate), table: table,buttons: [{name: detail, text: 详情, title: 详情, icon: fa fa-list, classname: btn btn-xs btn-primary btn-dialog, url: version/detail},{name: edit, text: 编辑我, …

班级录取查询系统如何制作

在教育的长河中&#xff0c;我们每位老师都曾面临过这样一个问题&#xff1a;如何高效、准确地完成班级录取查询的任务&#xff1f;记得在以往&#xff0c;每当新学期伊始&#xff0c;我们不得不手忙脚乱地整理学生名单&#xff0c;然后逐一通知他们所在的班级。这个过程不仅耗…

【机器学习】特征选择:精炼数据,提升模型效能

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 特征选择&#xff1a;精炼数据&#xff0c;提升模型效能引言为何进行特征选择&a…

windows server安全设置,多次登录密码错误锁定

河北瑾航科技有限公司推荐&#xff0c;www.jinhangsmart.top 按快捷键【winr】&#xff0c;在【运行】框中输入“gpedit.msc”后回车。 进入【本地组策略编辑器】后&#xff0c;展开至&#xff1a;计算机配置—Windows设置—安全设置—帐户策略—帐户锁定策略。 双击右侧…

一次性语音芯片——智能家居的新兴技术

一次性语音芯片&#xff0c;作为现代智能家居技术&#xff0c;正以其魅力和性能&#xff0c;逐渐渗透到我们日常生活的每一个角落。这些小巧而强大的芯片&#xff0c;不仅为智能家居设备赋予了“说话”的能力&#xff0c;更在提升用户体验、增强设备交互性方面发挥了举足轻重的…

GITLAB配置CI教程

一、gitlab runner下载安装 1、研发网下载安装包【172.20.191.53已经安装过了&#xff0c;不用再安装了&#xff0c;可以直接到第三步】 下载gitlab安装包 wget https://packages.gitlab.com/runner/gitlab-runner/packages/fedora/32/gitlab-runner-12.1.0-1.x86_64.rpm​ …

数字力量助西部职教全面提升——唯众品牌大数据、人工智能系列产品中标甘肃庆阳职院数字经济人才培养基地!

近日&#xff0c;唯众品牌凭借在大数据和人工智能领域深耕多年的技术积累和卓越产品&#xff0c;成功中标庆阳职业技术学院全国一体化算力网络国家枢纽节点数字经济人才培养基地项目&#xff0c;标志着唯众在助力西部职业教育与数字经济融合发展的新征程上迈出了坚实的一步。 …

线程交互现象

线程交互现象 小明对自家的狗子有个规定&#xff0c;就是在狗狗还没吃完的时候&#xff0c;可以继续给他加饭 不好的解决方式 狗狗感觉一千年没吃饭了&#xff0c;狼吞虎咽起来&#xff0c;最后饭只剩下最后一点点&#xff0c;吃饭线程中使用while循环判断是否是1&#xff0c;…

ST Smart Things Sentinel:一款针对复杂IoT协议的威胁检测工具

关于ST Smart Things Sentinel ST Smart Things Sentinel&#xff0c;简称ST&#xff0c;是一款功能强大的安全工具&#xff0c;广大研究人员可以使用该工具检测物联网 (IoT) 设备使用的复杂协议中的安全威胁。 在不断发展的联网设备领域&#xff0c;ST Smart Things Sentinel…

轮转数组(反转数组)的实现,看这篇就够了!!

一&#xff1a;题目 本题用数组为1 2 3 4 5 6 7 k3 来进行举例 理想结果为&#xff1a;5 6 7 1 2 3 4 二&#xff1a;思路 第一种方法&#xff1a; 用memcpy函数来实现 第一步&#xff1a;用malloc开辟一个新数组 第二步&#xff1a;将5 6 7 放进新数组 第三步&…

【JS|第21期】JavaScript模块化:深入解析三种文件暴露方式

日期:2024年7月6日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^ 1.01365 = 37.7834;0.99365 = 0.0255 1.02365 = 1377.4083…

台灯护眼是真的吗?台灯怎么选对眼睛好?一文带你读懂!

近视问题&#xff0c;这一现代社会的“视力杀手”&#xff0c;正悄然影响着越来越多的人群&#xff0c;尤其是青少年群体。长时间面对电子屏幕和书本&#xff0c;加上不正确的用眼习惯&#xff0c;使得视力下降成为普遍现象。在此背景下&#xff0c;一款优质的护眼台灯显得尤为…