stm32学习笔记--spi与iic

发布者:HeavenlyLove最新更新时间:2015-09-10 来源: eefocus关键字:stm32  学习笔记  spi与iic 手机看文章 扫描二维码
随时随地手机看文章
关于上次说的要改程序的问题,
//读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更适合“字节设备”的多主设备应用。
关键字:stm32  学习笔记  spi与iic 引用地址:stm32学习笔记--spi与iic

上一篇:stm32小系统板
下一篇:stm32学习笔记--串口波特率

推荐阅读最新更新时间:2024-03-16 14:31

第三章 一个LED闪烁
第一节 硬件解读 先看看原理图: 开发板上面芯片为:STM32L071KBU6,其中2号引脚(PC15)控制这一个LED,名为LD5,所以我们只需要控制STM32芯片的2号引脚(PC15)就可以控制LED啦。注意:LED的一侧为VDD_NODE,也就是3.3V,经过510欧姆的电阻之后,到LED的1号脚,所以我们只需要控制STM32的2号脚就可以来控制LED。STM32的2号脚为低电平,LED亮;反之则灭。 第二节 CubeMX配置 第一步:双击打开STM32CubeMX,,如下图,新建项目。注意:新建项目本教程只介绍一次,以后项目的建立不在重复。 第二步:在英文状态下搜索芯片:STM32L071KBU6,选后选择对
[单片机]
第三章 一个LED闪烁
stm32上电自启动后运行不正常的故障排查分析
最近负责一个项目,用到stm32f4的一款高性能芯片。研发过程中遇到一个很诡异的现象,前前后后折腾了两三天,最后才搞定。由于是新手,经验不足,排故过程很纠结~~ 现象如下: 采用JLINK下载程序后,断电让其上电重新启动,发现有时可以正常运行,有时候无法正常运行,大约每两、三次就有一次无法正常上电启动。 2.通过JLINK调试程序,每次均正常运行。太诡异了! 发现问题后开始定位原因。首先考虑是BOOT启动出问题了,stm32f4启动方式分三种:User FLash、SystemFlash和EmbeddedSRAM,通过BOOT0和BOOT1管脚配置。程序正常运行时从User FLash启动,如果BOOT0和BOOT1
[单片机]
基于STM32的无线通讯终端系统设计
  1.引言   目前仪器设备多数采用 R S232接口与计算机通信,但是随着计算机技术的发展,支持热插拔的USB标准接口将取代RS232接口,因此计算机将越来越少配置甚至不配置RS232接口。   本文详细介绍了一种采用USB通信接口设计的无线数据通讯终端系统。此系统以高速、可 靠、可在线编程的STM32F103C6T6为主控制器件,实现了通过计算机与其他终端之间数据及文件的无线传输功能。实验证明,该系统的设计具有低成 本、高集成度和设计简单等优点,实现无线联网和组网功能,适于便携式电子设备的文件远端下载和上传,为诸如无线切割机、各类物联网掌上终端等设备的数据传输提供了解决方案。   RS232接口与USB接口虽然都属于串行
[单片机]
基于<font color='red'>STM32</font>的无线通讯终端系统设计
STM32开发板上实现按键驱动(定时扫描去抖方式)
在万利STM32学习板的USB摇杆例程中,摇杆的按键处理并没有消抖处理,因此重新修改了摇杆的驱动,顺便还增加了两个按键以及摇杆中键下压的驱动,以方便直接使用。只要定时调用(几ms)KyeScan函数,就会将当前按键的改变情况和按住情况保存在对应的变量中。 当某个键按下时,在KeyDown中对应的位被设置为1;某个键被释放时,KeyUp中对应的位为1;KeyPress中保存的是当前按键的按住情况,某位为1时表示对应的键被按住。 KeyDown和KeyUp中的值使用后要手动清除,表示已经处理了这个事件,而KeyPress不用手动清除,它一直反映按键的按住情况。 万利的板子上有两个按键KEY_2和KEY_3,另外还有一个摇杆:K
[单片机]
ARM7学习---GPIO笔记
学习51单片机也好还是ARM或是其他类型的MCU,首先也是最基础的还是需要了解其IO口特性和配置,最近学习ARM7,芯片型号是LPC2103,因为自己做了一块PCB板子,用J-LINK调试学习。以前一直不清楚GPIO是什么,因为学51的时候单片机引脚就叫IO口,但是学了AVR和ARM等以后发现,终于明白51的准双向口的含义,一般其他单片机,我用过的有AVR PIC 还有台湾的义隆单片机,合泰单片机等,其IO口都是双向的,需要进行配置才能作为输入输出口或是高阻态来使用。就是我们一般说的GPIO(General Purpose Input Output通用输入/输出)。现在针对于ARM7 LPC2103这个芯片来看,具体需要看datas
[单片机]
ARM7<font color='red'>学习</font>---GPIO<font color='red'>笔记</font>
STM32自带PWM输出实验
#include stm32f10x_lib.h #include sys.h #include delay.h #include usart.h #define LED0_val TIM3- CCR2 void PWM_init(u16 arr,u16 psc) { RCC- APB1ENR|=1 1; //TIM3时钟使能 GPIOA- CRH&=0xfffffff0; //PA8 GPIOA- CRH|=0x00000004; //PA8 浮空输入 GPIOA- CRL&=0x0fffffff; GPIOA- CRL|=0xB00000
[单片机]
<font color='red'>STM32</font>自带PWM输出实验
stm32 I2C自收发测试例程
define BufferSize 4 define I2C2_SLAVE_ADDRESS7 0x30 /* Private macro ————————————————————-*/ /* Private variables ———————————————————*/ vu8 I2C1_Buffer_Tx = {1, 2, 3, 4}; /* I2C1待发送字节数组 */ vu8 I2C2_Buffer_Rx = {0, 0, 0, 0}; /* I2C2待接收字节缓冲 */ vu8 Tx_Idx = 0; /* I2C1数据发送计数变量 */ vu8 Rx_Idx = 0; /* I2C2数据接收计数变量 */
[单片机]
<font color='red'>stm32</font> I2C自收发测试例程
STM32的数据类型基础介绍
首先说一下编程过程中几个步骤吧 第一,选择一门语言,C语言或汇编语言,嵌入式编程一般目前流行还是C,这个需要基础与时间 第二读懂了解 MCU的寄存器各寄存器的功能,尤其是一些IO口设置,各模块时钟设置比如定时器,I2C,同步异步串口,PWM等等,以前的话51的话没有这样设置。而现在MCU基本上各模块时钟都分开了。这个可以看官方数据说明书就可以了。 其实程的目的就是设置一系列寄存器.并根据你设计程序流程去执行它,期间可能加入了你设计好的一些算法,和数学公式。进行计算,或执行。 第三,你有一块你的实验板就如这次STM32推的F429,你还需要下载程序的编程器。就是把编译器编译好的代码下载到你的目标实验板上,不过ST推的多数
[单片机]
<font color='red'>STM32</font>的数据类型基础介绍
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved