[其他ST产品] stm32战舰之路

[复制链接]
 楼主| hehhehee 发表于 2021-12-30 22:51 | 显示全部楼层
开始信号:SCL处于高电平,SDA从高电平转变为低电平,数据开始发送
  1. void IIC_Start(void)
  2. {
  3. SDA_OUT();     //sda线输出
  4. IIC_SDA=1;     
  5. IIC_SCL=1;
  6. delay_us(4);
  7.   IIC_SDA=0;//START:when CLK is high,DATA change form high to low
  8. delay_us(4);
  9. IIC_SCL=0;//钳住I2C总线,准备发送或接收数据
  10. }   
 楼主| hehhehee 发表于 2021-12-30 22:56 | 显示全部楼层
结束信号:SCL处于高电平,SDA从低电平转变为高电平,数据发送结束

void IIC_Stop(void)
{
SDA_OUT();//sda线输出
IIC_SCL=0;
IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
  delay_us(4);
IIC_SCL=1;
IIC_SDA=1;//发送I2C总线结束信号
delay_us(4);   
}
 楼主| hehhehee 发表于 2021-12-30 22:57 | 显示全部楼层
应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,

9526561cdc8bb06655.png
 楼主| hehhehee 发表于 2021-12-30 22:58 | 显示全部楼层
表示已收到数据

连接到相同总线上的IC数量只受总线最大电容的限制,串行的8位双向数据传输位速率在标准模式下可达100Kbit/s,快速模式下可达400Kbit/s,高速模式下可达3.4Mbit/s
8024961cdc8f98d695.png
 楼主| hehhehee 发表于 2021-12-30 22:59 | 显示全部楼层
IIC设备工作过程:

总线上的所用通信都是由主控制器发起的,当主控发起开始信号时,IIC总线上的设备都知道主设备要传输数据了。
 楼主| hehhehee 发表于 2021-12-30 22:59 | 显示全部楼层
1、主设备向从设备发送数据。主设备发送起始位,这会通知总线上的所有设备传输开始了,接下来主机发送设备地址,与这一地址匹配的 slave 将继续这一传输过程,而其它 slave 将会忽略接下来的传输并等待下一次传输的开始。主设备寻址到从设备后,发送它所要读取或写入的从设备的内部寄存器地址; 之后,发送数据。数据发送完毕后,发送停止位。
 楼主| hehhehee 发表于 2021-12-30 23:00 | 显示全部楼层
写入过程:
6112061cdc983b51b9.png
 楼主| hehhehee 发表于 2021-12-30 23:02 | 显示全部楼层
主设备先发送开始信号------>IIC_start();--->发送从设备的地址(地址有7位,前面4位已固定:1010,后面三位由IIC芯片决定,第八位是读:1/写:0位)----->等待应答ack---->发送想要往从设备哪个地址写入内容------>等待应答ack---->发送数据----->等待应答------->发送结束信号。
 楼主| hehhehee 发表于 2021-12-30 23:03 | 显示全部楼层
2、主设备从从设备中读取数据

6847661cdca06821d8.png
 楼主| hehhehee 发表于 2021-12-30 23:04 | 显示全部楼层
从从设备读出数据比写入数据麻烦一点,其实就是时序多了几个步骤而已。你想要在从设备读出数据,那么你肯定要知道从从设备哪个地址读出来,那么你就需要先往从设备写入想要读取数据的地址,然后再重新发送开始信号。
 楼主| hehhehee 发表于 2021-12-30 23:04 | 显示全部楼层
读数据过程:

主设备发送开始信号------->从设备的地址(前面7为从设备地址,第八位是写:0)------->等待从设备应答------->发送想要读取数据的地址--------->等待从设备应答-------->重新发送开始信号------->发送从设备地址(前7位为地址,第八位为读:1)------->读取数据--------->不发送应答信号----------->主设备发送结束信号。
 楼主| hehhehee 发表于 2021-12-30 23:05 | 显示全部楼层
14、SPI学习

9265861cdcace5b3f1.png
 楼主| hehhehee 发表于 2021-12-30 23:06 | 显示全部楼层
 楼主| hehhehee 发表于 2021-12-30 23:07 | 显示全部楼层
SPI定义:英文名:Serial peripheral interface.中文名:串行外围设备接口

SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。
 楼主| hehhehee 发表于 2021-12-30 23:08 | 显示全部楼层
SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。
 楼主| hehhehee 发表于 2021-12-30 23:10 | 显示全部楼层
要传输数据,就要了解时序图,来自于stm32中文参考手册。

440761cdcb9056c53.png

4921361cdcb9859650.png
 楼主| hehhehee 发表于 2021-12-30 23:11 | 显示全部楼层
诸多细节通过中文参考手册就清楚了。

9706361cdcc0319aed.png

这里查看spi_cr1寄存器,就知道各个位是控制什么的了

spi内部有控制寄存器(spi_cr1,spi_cr2)控制器1是一些控制位,控制器2是一些标志位。spi状态寄存器。spi数据寄存器等。
 楼主| hehhehee 发表于 2021-12-30 23:12 | 显示全部楼层
各寄存器地址
7337861cdcc373d5fc.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部