固件#01--USB转I2C底层代码和原理

I2C

简介

I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。SDA(串行数据线)和SCL(串行时钟线)都是双向I/O线,接口电路为开漏输出.需通过上拉电阻接电源VCC.

I2C(内部集成电路)总线接口处理微控制器与串行 I2C 总线间的通信。它提供多主模式功
能,可以控制所有 I2C 总线特定的序列、协议、仲裁和时序。它支持标准模式 (Sm)、快速模
式 (Fm) 和超快速模式 (Fm+)。

  • 从模式和主模式
  • 多主模式功能
  • 标准速度模式(高达 100 kHz)
  • 快速模式(高达 400 kHz)
  • 超快速模式(高达 1 MHz)
  • 7 位和 10 位寻址模式

I2C start/stop

  • 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
  • 结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。

I2C read

  1. Master发送I2C addr(7bit)和w操作0(1bit),等待ACK
  2. Slave发送ACK
  3. Master发送reg addr(8bit),等待ACK
  4. Slave发送ACK
  5. Master发起START
  6. Master发送I2C addr(7bit)和r操作1(1bit),等待ACK
  7. Slave发送ACK
  8. Slave发送data(8bit),即寄存器里的值
  9. Master发送ACK。或者Master发送NACK,要求结束。
  10. 第8步和第9步可以重复多次,即顺序读多个寄存器

I2C write

  1. Master发起START
  2. Master发送I2C addr(7bit)和w操作0(1bit),等待ACK
  3. Slave发送ACK
  4. Master发送reg addr(8bit),等待ACK
  5. Slave发送ACK
  6. Master发送data(8bit),即要写入寄存器中的数据,等待ACK
  7. Slave发送ACK
  8. 第6步和第7步可以重复多次,即顺序写多个寄存器
  9. Master发起STOP

例子

I2C signal diagram: SDA(green) and SCL(yellow)

        write 0x55 DAC 

USB to I2C

通过USB虚拟串口实现PC与I2C设备进行通信。使用STM32L073xx MCU,硬件I2C和软件模拟I2C,用看门狗检测运行状态。

底层firmware实现代码和硬件电路图见链接:

USB安装成功:

串口助手调试

部分代码main.c


    #include "main.h"
    #include "stm32l0xx_hal.h"
    #include "usb_device.h"
    #include "i2c.h"
    #include "soft_i2c.h"
    #include "stm32l0xx_nucleo.h"
    #include "usbd_cdc_if.h"
    #include "modsel.h"

    /* Buffer use
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: STM32是一种基于ARM Cortex-M内核的微控制器系列,这个系列的芯片很适合用来开发各种嵌入式系统,包括那些需要使用USB HID协议的系统。通过使用STM32的开发板搭载hid下位机的C程序,用户可以轻松地实现让计算机与其他USB设备进行通信。 在使用STM32 HID下位机 C的过程中,需要考虑如何设计USB HID协议,并使用C语言编写固件代码。其中,USB HID协议设计包括多种事项,如定义HID报文格式、支持设备描述符、输入和输出报告描述符等。 使用STM32开发板进行嵌入式开发需要一定的硬件和软件支持。硬件方面需要选择合适的开发板、以及其他外设(如LED、显示屏、电机等),以实现对外友好的应用程序。软件方面,需要使用开发板上提供的IDE软件和相应的驱动程序,这些软件提供了丰富的API和函数库,能够使开发人员轻松地使用C语言进行编程。 总之,通过使用STM32 HID下位机 C,开发人员可以快速、高效地设计和实现USB HID应用程序,从而满足各种嵌入式系统的需求。无论是在智能家居、智能交通、智能医疗等领域,这种技术都发挥了广泛的作用。 ### 回答2: STM32是意法半导体(STMicroelectronics)推出的一种基于ARM Cortex-M架构的微处理器系列,其中包括了丰富的外围设备,如模拟和数字IO、通信接口、USB和LCD控制器等。HID是Human Interface Device的缩写,即人机接口设备,在USB开发中常用的一种设备类型。作为下位机,STM32可以通过USB接口作为HID设备被主机识别,实现与计算机之间的通信。 在C语言中,使用STM32开发HID下位机需要掌握相关的硬件驱动和USB协议。首先需要选择适合的STM32芯片,并配置其GPIO和时钟等硬件资源。同时,需要编写USB传输协议的代码,实现在上位机和下位机之间的数据通信。具体来说,需要编写USB的描述符、配置文件、报文解析等程序,以及相应的数据交换机制。最后,需要开发上位机的应用程序,按照HID协议和下位机的数据交换格式进行通信。 总之,STM32作为一种强大的处理器平台,结合USB技术和HID协议,可以实现丰富的人机交互和数据交换功能。掌握这种硬件和软件开发技术,能够对电子信息等行业的产品设计和开发提供很好的支持。 ### 回答3: STM32 是意法半导体公司(STMicroelectronics)推出的一款32位微控制器,具有高性能、低功耗、易开发等特点。而 HID (Human Interface Device)则是人机接口设备的缩写,是 USB 设备的一类,用于实现人机交互,例如键盘、鼠标、游戏手柄等。 在STM32中,HID下位机是指通过USB接口与上位机通信,实现USB设备的数据传输和人机交互功能。而C语言则是常用的编程语言之一,用于编写STM32的底层驱动程序和应用程序。 在STM32 HID下位机 C开发中,需要了解USB协议和USB HID协议,掌握底层驱动程序的开发和编写上位机通信协议的能力。一般来说,开发 HID 设备需要使用 USB HID类库和 USB驱动程序,其中,USB HID类库是基于USB协议开发的,支持USB HID协议,可用于实现HID设备的功能,例如 USB键盘、鼠标、游戏手柄等。 在实际开发中,开发人员需要根据具体需求选择合适的开发板和开发环境,例如Keil MDK、IAR Embedded Workbench等,同时需要掌握C语言编程和常见的通信协议(例如UART、SPI、I2C等),以便开发出高效稳定的STM32 HID下位机。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值