您的位置 首页 动态

stm32学习笔记–spi与iic

关于上次说的要改程序的问题,读ADXL345寄存器addr:寄存器地址返回值:读到的值u8ADXL345_RD_Reg(u8addr){u8temp=0;IIC_Start

关于前次说的要改程序的问题,

//读ADXL345寄存器
//addr:寄存器地址
//回来值:读到的值
u8 ADXL345_RD_Reg(u8 addr)
{
u8 temp=0;
IIC_Start();
IIC_Send_Byte(ADXL_WRITE); //发送写器材指令
temp=IIC_Wait_Ack();
IIC_Send_Byte(addr); //发送寄存器地址
temp=IIC_Wait_Ack();
IIC_Start(); //重新发动
IIC_Send_Byte(ADXL_READ); //发送读器材指令
temp=IIC_Wait_Ack();
temp=IIC_Read_Byte(0); //读取一个字节,不持续再读,发送NAK
IIC_Stop(); //发生一个中止条件
return temp; //回来读到的值
}
这段写寄存器代码,不了解temp为什么要被频频的赋值,去掉后,微观看来对成果没有影响。第二个不了解的当地是为什么在发送寄存器地址之后要重新发动一次,因
为在类似的写寄存器函数中,在相同的方位不存在重启代码。注释掉该句之后显现“ADXL345 error”。
这两天首要看了三轴加速度计的程序,尽管例程里的能看懂,可是在四轴里的程序却不那么简略,我乃至不明白为什么他要自己写一个iic的函数,我计划接下来把它的
程序和例程里的程序对照来看,看能不能找到什么条理。
下面是对曾经学过内容的总结:
对位的寻址操作
为了完成对SARM、I/O外设空间中某一位的操作,在寻址空间(4GB)另一当地取个别号区空间,从这地址开端,每一个字(32bit)就对应SRAM或I/O的一位。即本来每
个字节用一个地址,现在给字节中的每个位一个地址,完成了对位的寻址。
spi与iic之间各自的好坏
1 硬件衔接的好坏
SPI是[单主设备( single-master )]通讯协议,这意味着总线中的只要一支中心设备能建议通讯。当SPI主设备想读/写[从设备]时,它首要拉低[从设备]对应
的SS线(SS是低电平有用),接着开端发送作业脉冲到时钟线上,在相应的脉冲时刻上,[主设备]把信号发到MOSI完成“写”,一起可对MISO采样而完成“读”。
主从设备有必要运用相同的作业参数——SCLK、CPOL 和 CPHA,才干正常作业。如果有多个[从设备],并且它们运用了不同的作业参数,那么主设备有必要在读写不同从设
备间重新配置这些参数。
I²C 是多主设备的总线,I²C没有物理的芯片挑选信号线,没有裁定逻辑电路,只运用两条信号线—— „serial data‟ (SDA) 和 „serial clock‟ (SCL)。
从上面的剖析能够看出,在需求多个从设备的时分,iic比spi需求更少的信号线。
2 速度比较
spi为全双工,速度能够到达10M,而iic快速形式为1M,需求额定I/O缓冲区的高速形式也才3.4M。
3 总结
I²C的长处在于它的特征——用很轻盈的架构完成了多主设备裁定和设备路由。可是对运用的工程师来讲,了解总线结构更费力,并且总线的功能不高。
SPI的长处在于——-它的结构适当的直观简略,简略完成,并且有很好扩展性。SPI的简略性不足称其高雅,由于要用SPI建立一个有用的通讯渠道,还需求在SPI之上构建特定的通讯协议软件。也就是说要想取得SPI特有而IIC没有的特性——高速功能,工程师们需求支付更多的劳作。别的,这种自定的作业是彻底自在的,这也阐明为什么SPI没有官方规范。I²C和SPI都对低速设备通讯供给了很好的支撑,不过,SPI合适数据流使用,而I²C更合适“字节设备”的多主设备使用。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/dongtai/257473.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部