串口是异步时序对每移位的时间要求严格 就很少用软件模仿的
对于iic这样的同步时序 软件实现便很简单灵活
硬件:外设配置->外设引脚配置
软件:外设引脚配置
这里随意选取引脚 配置的话
变成通用模式是因为我们要通过软件的方式来模拟出iic的波形所以我们直接向IO引脚写0写1
初始化电压为高 是因为如果不配置 配置为输出模式时默认引脚为低电平的 一开始总线处于空闲状态所以为高电压

初始准备

起始位 停止位

发送一个字节


这里我觉得有点问题 发送地址的话第8位应该为0 但他直接把8个一起发了 我觉得应该是发7个然后最后一位固定给0 (自己的思考)
这里的sda_write(x)具体如下

读取一个字节


这里的NAK 和ACK是因为硬件上的话是 1是ACK 0是NAK 为了和上一节保持一致所以取反
接下来要软件读写iIC的具体操作了和上节课一样
等待总线空闲->发送起始位->发送地址->发送数据->发送停止位


少了一个return(0)
这里他发送了地址就解决了刚才我的疑问
这里我觉得有点问题 发送地址的话第8位应该为0 但他直接把8个一起发了 我觉得应该是发7个然后最后一位固定给0 (自己的思考)

少了一个return(0);
然后铁头山羊up做了封装
用硬件时:初始化 初始化外设 初始化引脚
用软件时:初始化

hal库软件iic先不写了 回来再出
建议使用江科大的 比较方便
5635

被折叠的 条评论
为什么被折叠?



