电赛培训-23-07-10

spi与i2c

iic通信

i2c是一种用于设备间通讯的两线协议
硬件和软件实现都通过machine.I2C和machine.SoftI2C来实现。
硬件I2c优势在于速度快,但是对使用的引脚有限制。
软件I2C优势在于兼容性强,但是速度慢
函数:

  • 硬件I2C:使用以下参数来构造I2C对象
    • id表示特定的外设,取决于特定板子
    • scl:时钟线引脚,Pin
    • sda:数据线引脚,Pin
    • freq:时钟频率,整数

注意接线先关注缺少的端口例如I2C或uart,之后再关注gpio

  • 软件I2C:使用以下参数来构造I2C对象
    • scl:时钟线引脚,Pin
    • sda:数据线引脚,Pin
    • freq:时钟频率,整数
    • timeout:超时时间,整数
  • init函数可以重新定义
  • I2C.start():开始通信
  • I2C.stop():结束通信
  • I2C.readint(buf,nack=True):读取字节存储到buf中,字节长度是buf长度,收到出最后一个字节以外所有子接后,将发送ack,如果设置nack则发送nack,ack代表着以后还会传输,nack代表着这是最后一个字节
  • I2C.write(buf):将buf中的字节写入到总线上,检查每个字节是否收到ack
  • I2C.readfrom(addr,nbytes,stop=True):从addr地址读取nbytes个字节,如果stop为True则在输入结束时发送stop信号。
  • I2c.readfrom_into(adr,)
  • I2c.writeto(addr,buf,stop=True)
  • I2c.writevto(addr,vector,stop=True)将vector中包含的字节写入addr指定的从站,vector应该具有缓冲协议的元组或对象列表
  • I2c.readfrom_mem(addr,memaddr,nbytes,addrsize=8)从memaddr指定的内存地址开始,从addr指定的从站读出nbytes。参数addrsize以位为单位指定地址大小,返回读取数据bytes对象。
  • 硬件I3c外设

    任何可用的输出引脚都可以用于scl和sda,默认情况下,I2C对象使用id 0,scl引脚为22,sda引脚为21,时钟频率为400kHz。

spi通信

spi是一种由主机驱动的同步串行协议。在物理层概念,一条总线有三条线路组成:SCK,MOSI、MISO,多个设备可以共享一条总线。每个设备有一个单独的第四个信号SS(从设备选择),来选择总线上的特定设备并与之通信。

1
machine.SPI(id)# 在给定的总线id上构造一个SPI对象。id的值取决于特定端口以及硬件

stm32

引脚

在cubemx中,浅黄色是不能修改定义的,深黄色也是默认的。

配置

引脚配置,在pinout_configuration中,如下图所示:
引脚配置
可以配置其中每个引脚的功能,例如GPIO、SPI、I2C等等。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!