还剩3页未读,继续阅读
文本内容:
【嵌入式工程师面试高频问题】你知道吗(附程序说明)在嵌入式面试中,需要能够熟悉的工作原理,使用场景,并且需要能够手撕的时序图和写一个HC读写程序nc IICIIC的一些工作原理、时序图在这篇博客介绍已经很全面了,我这里主要就是补充的代码部分顺便补充一下和以及的一些区别IIC Ol读ie写特点IIC SPIUART最大的特点就是只使用两根线进行通讯,支持多个主服务器和多个从服务器IIC只有两根线,而且又不像样有片选线,那怎么区分地址呢?其实总线上IIC SPI一每个设备都有自己的地址,有的是芯片里面定死的,如果自己用模拟则可以nc nc自己定一个地址GPIO、区别根线,全双工同步,速率最大可IIC SPLUART根线,半双工同步,速率一般是SPI410Mbps,根线,全双工异步,速率一般不超过I2C21Mbps,和、两者最大的区别在于后面两者是同步的,要有统一的时钟线,而UART220Kbps不需要,接线方便,但收发双方都需要配置相同的波特率,即设备要有自己UART SPI12c的时钟源;UART协议中是有地址规则的,因此在一对多通信的时候更有优势常用来连接传感器;编程简单,在设备不多,端口充足,对通信速度要求不高的场合可以应用,较常12c用来连接、或液晶显示器SPI优点支持全双工操作;操作简单;数据传输速率较高没有定义速度限制,EEPROM FLASH一般的实现通常能达到甚至超过SPI SPI缺点需要占用主机较多的口线(每个从机都需要一根片选线);只支持单个主10Mbps机;没有指定的流控制,没有应答机制确认是否接收到数据SPI优点只使用两根电线,支持多个主服务器和多个从服务器,位确认每个帧都已成功传输,硬件没有那么复杂12c ACK/NACK缺点数据传输速率比慢(最高的速度也就快速+模式()和高速UART模式())数据帧的大小限制为位,实现比更复杂的硬件12c SPIIIC1Mbps
3.4Mbps,8SPI优点只使用两根电线,不需要时钟信号,有一个奇偶校验位,只要双方设置后,就可以改变数据包的结构UART缺点数据帧的大小限制为最多位,不支持多个从属或多个主系统,速度最慢UART9八种状态和对应代码其实的通信就是通过两根线的八种状态完成的**两根线怎么会有八种状态?**nc其实一根线有高电平、低电平、上升沿、下降沿四种状态nc数据线和时钟线组成的种状态8下面的代码就是用口去模拟实验是在芯片做的,是能够跑通的10IIC STM32F103;输出SDA_0UTQ//sdaIIC_SDA=1;IIC_SCL=1;delay_us4;IIC_SDA=O;//START:when CLKis high’DATA changeform highto lowdelay_us4;〃铅住总线,准备发送或接收数据H}C_SCL=O;12c发送一个字节〃返回从机有无应答//lie〃有应答无应答1,//0,void IIC_Send_Byte[u8txd;u8t;SDA_OUTQ〃拉低时钟开始数据传输IIC_SCL=O;for[t=0;t8;t++〃往上放数据,放最高位IIC_SDA=txd0x807;SDA txdtxd«=l;〃对这三个延时都是必须的delay_us2;TEA5767IIC_SCL=1;delay_us2;IIC SCL=O;delay_us2;〃等待应答信号到来〃返回值接收应答失败接收应答1,成功//0,u8IIC_Wait_Ackvoid设置为输入u8ucErrTime=O;设置为释放总线SDA_INQ;//SDAIIC_SDA=l;delay_usl];//SDA1,SDA〃读如果一直为则无应答;如果为则应答成功IIC_SCL=l;delay_usl;{whileREAD_SDA SDA,SDA1,SDA0,ucErrTime++;ifucErrTime250IIC_StopQ;return1;〃时钟输出IIJSCL=0;0returnO;IIC SCL=O;SDA.OUTQ;IIC SDA=O;delay_us2;IIC SCL=1;delay_us2;IIC SCL=O;〃读数据〃返回值就是接收到的一个字节u8IIC_Read_Byteunsigned charack]设置为输入unsigned chartreceive=O;SDAJNQ;//SDAfori=0;i8;i++IIC SCL=O;delay_us2;为高的时候读取数据〃每读一次,左移一位IIC_SCL=1;//SCL〃读取放在最低位receivevv=l;receiveifREAD_SDAreceive++;SDA receivedelay_usl;;〃发送if[!ackHJNAckO nACK〃发送elseIIC_Ack;ACKreturn receive;〃产生停止信号;输出HCvoid IIC_StopvoidSDA_OUTQ//sda IIC_SCL=O;IIC__SDA=0;//STOP:when CLKis highDATA changeform lowto highdelay_us4;〃发送总线结束信号IIC_SCL=1;IIC_SDA=1;I2Cdelays4;。
个人认证
优秀文档
获得点赞 0