打印
[其他ST产品]

stm32战舰之路

[复制链接]
楼主: hehhehee
手机看帖
扫描二维码
随时随地手机跟帖
101
hehhehee|  楼主 | 2021-12-30 22:51 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
开始信号:SCL处于高电平,SDA从高电平转变为低电平,数据开始发送
void IIC_Start(void)
{
SDA_OUT();     //sda线输出
IIC_SDA=1;     
IIC_SCL=1;
delay_us(4);
  IIC_SDA=0;//START:when CLK is high,DATA change form high to low
delay_us(4);
IIC_SCL=0;//钳住I2C总线,准备发送或接收数据
}   

使用特权

评论回复
102
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);   
}

使用特权

评论回复
103
hehhehee|  楼主 | 2021-12-30 22:57 | 只看该作者
应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,

使用特权

评论回复
104
hehhehee|  楼主 | 2021-12-30 22:58 | 只看该作者
表示已收到数据

连接到相同总线上的IC数量只受总线最大电容的限制,串行的8位双向数据传输位速率在标准模式下可达100Kbit/s,快速模式下可达400Kbit/s,高速模式下可达3.4Mbit/s

使用特权

评论回复
105
hehhehee|  楼主 | 2021-12-30 22:59 | 只看该作者
IIC设备工作过程:

总线上的所用通信都是由主控制器发起的,当主控发起开始信号时,IIC总线上的设备都知道主设备要传输数据了。

使用特权

评论回复
106
hehhehee|  楼主 | 2021-12-30 22:59 | 只看该作者
1、主设备向从设备发送数据。主设备发送起始位,这会通知总线上的所有设备传输开始了,接下来主机发送设备地址,与这一地址匹配的 slave 将继续这一传输过程,而其它 slave 将会忽略接下来的传输并等待下一次传输的开始。主设备寻址到从设备后,发送它所要读取或写入的从设备的内部寄存器地址; 之后,发送数据。数据发送完毕后,发送停止位。

使用特权

评论回复
107
hehhehee|  楼主 | 2021-12-30 23:00 | 只看该作者
写入过程:

使用特权

评论回复
108
hehhehee|  楼主 | 2021-12-30 23:02 | 只看该作者
主设备先发送开始信号------>IIC_start();--->发送从设备的地址(地址有7位,前面4位已固定:1010,后面三位由IIC芯片决定,第八位是读:1/写:0位)----->等待应答ack---->发送想要往从设备哪个地址写入内容------>等待应答ack---->发送数据----->等待应答------->发送结束信号。

使用特权

评论回复
109
hehhehee|  楼主 | 2021-12-30 23:03 | 只看该作者
2、主设备从从设备中读取数据

使用特权

评论回复
110
hehhehee|  楼主 | 2021-12-30 23:04 | 只看该作者
从从设备读出数据比写入数据麻烦一点,其实就是时序多了几个步骤而已。你想要在从设备读出数据,那么你肯定要知道从从设备哪个地址读出来,那么你就需要先往从设备写入想要读取数据的地址,然后再重新发送开始信号。

使用特权

评论回复
111
hehhehee|  楼主 | 2021-12-30 23:04 | 只看该作者
读数据过程:

主设备发送开始信号------->从设备的地址(前面7为从设备地址,第八位是写:0)------->等待从设备应答------->发送想要读取数据的地址--------->等待从设备应答-------->重新发送开始信号------->发送从设备地址(前7位为地址,第八位为读:1)------->读取数据--------->不发送应答信号----------->主设备发送结束信号。

使用特权

评论回复
112
hehhehee|  楼主 | 2021-12-30 23:05 | 只看该作者
14、SPI学习

使用特权

评论回复
113
hehhehee|  楼主 | 2021-12-30 23:06 | 只看该作者

使用特权

评论回复
114
hehhehee|  楼主 | 2021-12-30 23:07 | 只看该作者
SPI定义:英文名:Serial peripheral interface.中文名:串行外围设备接口

SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。

使用特权

评论回复
115
hehhehee|  楼主 | 2021-12-30 23:08 | 只看该作者
SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。

使用特权

评论回复
116
hehhehee|  楼主 | 2021-12-30 23:10 | 只看该作者
要传输数据,就要了解时序图,来自于stm32中文参考手册。



使用特权

评论回复
117
hehhehee|  楼主 | 2021-12-30 23:11 | 只看该作者
诸多细节通过中文参考手册就清楚了。



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

spi内部有控制寄存器(spi_cr1,spi_cr2)控制器1是一些控制位,控制器2是一些标志位。spi状态寄存器。spi数据寄存器等。

使用特权

评论回复
118
hehhehee|  楼主 | 2021-12-30 23:12 | 只看该作者
各寄存器地址

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则