测试设备:
1.MCU:STM32G0
2.IIC设备:lis2dh12(ST的三轴加速度计)
3.示波器:普源RIGOL DS1054Z
知识点:
1.开始信号:SCL在高电平期间,SDA由高变低即为开始信号
2.停止信号:SCL在高电平期间,SDA由低变高即为停止信号
3.应答信号ACK: 八位数据位发送完之后,第九个时钟即是ACK,0表示有ack,1表示nack
4.发送八位数据位的时候,电平变化总是发生在低电平期间,SCL为高电平器件不可以变动,只有开始信号和停止信号是在SCL为高器件变动
5.空闲态:SCL和SDA都为高
6.在切换数据的传输方向时,可以不必先产生停止条件再开始下次传输,而是直接再一次产生开始条件。I2C 总线在已经处于忙的状态下,再一次直接产生起始条件的情况被称为重复起始条件。例如:访问某一具有 I2C总线接口的 E2PROM 存储器时,主机先向存储器输入存储单元的地址信息(发送数据) ,然后再读取其中的存储内容(接收数据)。
7.启动信号START后紧接着发送一个地址字节,其中7位为被控器件的地址码,一位为读/写控制位R/W,R/W位为0表示由主控向被控器件写数据,R/W为1表示由主控向被控器件读数据;
8.START信号之后,主机的从设备地址发送出去。当从设备的ACK返回后,一个八位的子地址被发送出去,其低七位表示的是实际的寄存器地址,最高位表示的是是否地址自增。如果高位为1,则之后的寄存器地址自增,可允许多数据读写。
时序图
测试
1.黄色:SCL
2.蓝色:SDA
3.读取器件ID,理论上主控向IMU写数据即先发送器件地址(0x32)(R/W位为0),然后发送寄存器地址(0x0F),接着主控向IMU读数据即发送期间地址(0x33)(R/W位为1),接收IMU返回的值(0x33)。
4.示波器解码如下:
关键字:示波器 stm32
引用地址:
示波器分析IIC波形图
推荐阅读最新更新时间:2024-11-12 11:09
STM32硬件IIC之DMA传输数据
这里咱们说3个点 1.检查IIC总线上是否有指定地址的器件 2.IIC读取数据 3.IIC写数据 下面来一个一个详细说明 1.检查IIC总线上是否有指定地址的器件 1.判断是否总线忙,如果忙则等待 2.产生起始位 3.等待起始位产生完成 4.发送器件地址(这里选择读写都是可以的) 5.等待是否有ACK位回应,(这里有两种判断方法1.通过判断ACK标志2.通过判断ADDR标志),最好使用ADDR标志位 6.清楚ADDR标志位 7.产生停止位 8.通过判断是否有ACK,就可以判断是否有指定地址的器件123456789 2.IIC读取数据 1.判断是否总线忙,如果忙则等待 2.产生起始位 3.等待起始位产生完成 4.发送器件地址,这里方
[单片机]
示波器捕获欠幅波形的几种方法
大家好,之前我们在微社区中讨论了一个很有趣的话题:欠幅波形在ZDS2022示波器中可以用哪些触发方式触发呢?讨论很热烈,有说2种的,有说3种的,那么答案到底是几种呢?今天来揭晓答案! ZDS2022设计了种类多达11种基础触发及21种免费开放的协议(如:CAN、USB、I2C等常用协议)触发! 图1 欠幅触发 首先,第一种就是欠幅触发了!按下【Trigger】键,将触发方式设为普通,选择欠幅触发类型,脉冲类型选正向欠幅,限定符选无,实际上限定符是用来设置脉冲宽度的!短按触发旋钮可切换触发电平,旋转触发旋钮可上下调节触发电平,只有欠幅波形顶部位于TH与TL之间时,感兴趣波形才会稳定触发。 图2 触发电
[测试测量]
IAR STM32 函数和变量的绝对地址定位
昨天我突然冒出个想法,能否利用函数和变量的绝对定位,实现程序的模块化更新。 也就是说,如果我要改变某个函数,只需要更新flash里面一个局部,也许只需要更新几百个字节,而无须重新下载整个上百K的程序。 经过查找资料和反复实验,终于实现了,现总结如下: 1) 把函数定位在FLASH高端的指定位置,以后更新,只更新那小块地方就可以了。 方法一: IAR里面进行函数定位, 必须要在.icf里面,进行定义。 void sendstr(unsigned *buf,unsigned short len) @ .sendstr { .... } .icf文件,加入这样一句: place at add
[单片机]
stm32和电机开发(从mcu到架构设计)
有过外资企业工作经验的同学应该都有这样的感觉,好像老外都很擅长做架构设计。与此相比较,国内的同学似乎更擅长编写代码。同样的设计,老外比较喜欢画图,文字部分有,但也是文字和图各一半;国内同学写文档比较少,更喜欢写代码,就算写文档也是文字和表格占了一大部分。 细细想来,出现这种差别,既有文化的原因、差异,也有产业分工的原因,同时也有东西方工作方法的差别。西方比较看重的是沟通、协同、接口定义清楚;东方讲究分工,功能完整,快速推进。 就拿架构设计来说,不管是业务层面的,还是技术层面,画图是少不了的。但是画图是为了构建模型,挖掘出问题的主要矛盾、主要流程,不是为了画图而画图。如果架构设计只是停留在纸面上,落不
[单片机]
示波器维修分享避免示波器损坏实用秘笈
安泰维修工程师拥有多年 示波器 维修经验,示波器已经成为不可或缺的测量使用仪器之一,没有示波器就感觉什么都做不了,有了它,我们的维修工作进行的更加顺畅,省时省力又省心。下面就一些经验之谈为大家介绍如何用活用好示波器。 对于工程师而言,一旦某些产品有问题就需要利用示波器来测试准确数值,分析产品的问题。用事实说话,看波形说话。如何使测试数据准确和可靠是非常重要的。示波器测量的准确数值能够帮助工程师更好的判断问题所在,而失真的波形和数值只能误导我们,让我们背道而驰,做很多无用功,很影响效率。 下面分享一些个人的建议希望能在工作中帮助到大家: 不少工程师对示波器的认识度欠缺,使用并不是很规范,某些工程师往往习惯性的拿起示波器就用,不做
[测试测量]
STM32实现蓝牙HC-06通信
简介 硬件模块:HC-06蓝牙串口通信模块 串口:USART1 接线:RXD–PC9,TXD–PC10,VCC–5V/3V,GND–GND 蓝牙模块上有一个LED,LED 指示蓝牙连接状态, 闪烁表示没有蓝牙连接,常亮表示蓝牙已连接并打开了端口 在未建立蓝牙连接时支持通过 AT 指令设置波特率、名称、配对密码, 设置的参数掉电保存 AT指令 1)测试通讯 发送: AT(返回 OK,一秒左右发一次) 返回: OK 2)改蓝牙串口通讯波特率 发送: AT+BAUD1 返回: +BAUD=1 此时波特率为 1200 发送: AT+BAUD2 返回: +BAUD=2 此时波特率为 2400 …… 1---------1200
[单片机]
STM32学习笔记之Bootloader升级Ymodem协议简介
YModem协议 YModem协议是由XModem协议演变而来的,每包数据可以达到1024字节,是一个非常高效的文件传输协议 。 源码宏定义 #define SOH (0x01) /* start of 128-byte data packet / #define STX (0x02) / start of 1024-byte data packet / #define EOT (0x04) / end of transmission / #define ACK (0x06) / acknowledge / #define NAK (0x15) / negative acknowledge / #define CA (0x18
[单片机]
【STM32电机方波】记录2——NVIC中断基本设置
NVIC概念:提供中断控制器,用于总体管理异常,称之为“内嵌向量中断控制器”。简单来说,就是MCU提供、处理内部中断的模块。 NVIC库函数: 中断优先级: 在配置NVIC之前得弄懂一个概念:中断优先级,即中断的执行顺序。中断优先级中,分为抢占式优先级(先占优先级)和响应优先级(从优先级)。抢断优先级,顾名思义,能再别人中断是抢占别人中断,实现中断嵌套。响应优先级则只能排队,不能抢在前面插别人的对,即不能嵌被嵌套。 STM32中指定优先级的寄存器为4位,其定义如下: 第0组:所有4位用于指定响应优先级 NVIC_PriorityGroup_0 = 选择第0组 第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级
[单片机]