电赛培训-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 |
|
stm32
引脚
在cubemx中,浅黄色是不能修改定义的,深黄色也是默认的。
配置
引脚配置,在pinout_configuration中,如下图所示:
可以配置其中每个引脚的功能,例如GPIO、SPI、I2C等等。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!