只能说跟51的差不了多少,在这里仅仅记录下主要注意事项吧。
1、I 2 C
通信分为标准模式 100kbit/s
、快速模式 400kbit/s
和高速模式 3.4Mbit/s
。因为所有的I 2 C
器件都支持标准模式,但却未必支持另外两种速度。
所以作为通用的 I 2 C
程序我们选择100k
这个速率来实现,也就是说实际程序产生的时序必须小于等于 100k
的时序参数,有特殊速度需求的器件再针对性写高速通信程序。
2、I 2 C
引脚属于开漏并联结构,并且 STM32
的 GPIO
端口引脚设置为开漏输出时,可以直接从输入数据寄存器获取 I/O
电平状态,因此将 I 2 C
引脚配置为开漏输出模式。
3、由于 I 2 C
总线空闲时默认为高,初始化时还需要设置引脚输出高电平,不过设置引脚输出高电平并不是在初始化之后,而应该放在初始化之前。
这是因为 STM32
在上电复位时 I/O
口为高阻状态,复位结束后,GPIO
端口引脚默认为浮空输入,由于上拉电阻的存在,I 2 C
引脚被拉高;
当程序执行到 I 2 C
初始化时又被配置为开漏输出模式,由于 GPIO
端口输出数据寄存器初始值默认全为 0,初始化后 I/O
口输出低电平,如果初始化之后再设置引脚输出高电平,势必会在I/O
口上产生一个低电平的毛刺。
如果在 I 2 C
引脚初始化之前先设置输出数据寄存器相应位为高,初始化 I 2 C
引脚后,I/O
口会直接输出高电平,避免毛刺信号。
4、实际上 I 2 C
的配置过程比较复杂,比如要充分考虑冲突和仲裁等处理方式,但是那些处理方式在绝大多数场合用不到。STM32F103
系列自带的 I 2 C
协议模块设计的过于复杂,对于实际应用来讲实用性不强,因此实际应用 I 2 C
时,还是用 IO
口直接模拟协议。
5、即在 SCK
的第一个时钟边沿还要早半个时钟周期时,SPI
主机就已经开始输出数据了,但是 SPI
从机却是在片选 SSEL
置低后开始输出数据,总之 SPI
设备输出数据要早于 SCK
,这也是为什么 SPI
通信时要先使能片选。
6、SPI 和 I2C的对比
7、SPI接口
8、引脚连接
9、SPI外设
SP3需要注意的地方
NSS需要注意的地方
几个需要注意的地方(标黄的)
10、配置流程
11、SPI的发送接收与USART的对比
12、数据传送过程
发送完成的判断,需要注意
那么应该怎么判断呢?
假如在TXE = 0 的时候仍然向SPI_DR写入数据
13、霸气。。。
14、SPI查询方式接收和发送的注意点