文章目录

  • 一、简介
  • 二、特性
  • 三、示例代码

IIC协议链接

一、简介

ADXL346是一款小而薄的超低功耗3轴加速度计,分辨率高(13位),测量范围达±16 g。数字输出数据为16位二进制补码格式,可通过SPI(3线或4线)或I2C®数字接口访问。

ADXL346非常适合移动设备应用。它可以在倾斜检测应用中测量静态重力加速度,还可以测量运动或冲击导致的动态加速度。它具有高分辨率(4 mg/LSB),能够分辨不到1.0°的倾斜度变化。

  1. 该器件提供多种特殊检测功能。
  2. 活动和非活动检测功能通过比较任意轴上的加速度与用户设置的阈值来检测有无运动发生。
  3. 敲击检测功能可以检测任意方向的单击和双击动作。
  4. 自由落体检测功能可以检测器件是否正在掉落。方向检测功能可以同时进行四位置和六位置检测,并5. 在方向变化时提供用户可选的中断功能,适用于2D或3D应用。
  5. 这些功能可以独立映射到两个中断输出引脚中的一个。
  6. 正在申请专利的集成式存储器管理系统采用32级先进先出(FIFO)缓冲器,可用于存储数据,从而将主机处理器负荷降至较低,并降低整体系统功耗。

低功耗模式支持基于运动的智能电源管理,从而以极低的功耗进行阈值感测和运动加速度测量。

二、特性

  • 超低功耗:VS = 2.6 V(典型值)时,测量模式下低至23 μA,待机模式下低至0.2 μA
  • 功耗随带宽自动按比例变化
  • 用户可选的分辨率
    • 10位固定分辨率
    • 全分辨率,分辨率随g 范围提高而提高, ±16 g 时达到最高分辨率13位(在所有g范围内保持4 mg/LSB 的比例系数)
  • 正在申请专利的嵌入式存储器管理系统采用FIFO技术,可将主机处理器负荷降至较低
  • 单击/双击检测
  • 活动/非活动监控
  • 自由落体检测
  • 方向检测功能支持四位置和六位置同时检测
  • 电源和I/O电压范围:1.7 V至2.75 V
  • SPI(3线和4线)和I2C 数字接口
  • 灵活的中断模式,可映射到任一中断引脚

三、示例代码

/* -----------------------------------------头文件-----------------------------------------*/
#include "ADXL346.h"
#include "math.h"/* -----------------------------------------宏定义-----------------------------------------*/
#if BrakeMode_EN/* -----------------------------------------结构体定义-------------------------------------*/
ADXL346_XYZ xdata XYZ_DATA  = {0, 0, 0};
ADXL346_XYZ xdata XYZ_DATA1 = {0, 0, 0};
/******************
笔记:
1、DelayTick = 2
2、ADDR:SD0==0==0xA6 ; SD0==1==0x3A  【写命令0xA6  读命令0xA6|1】
*******************/
code IIC_TYPE ADXL346 = {2, 0xA6};
/* -----------------------------------------全局变量定义-----------------------------------*/
xdata uint8_t GET_DATA[6] = {0, 0, 0, 0, 0, 0};         //用于记录IIC返回的XYZ
xdata uint8_t  Brake_Motion             = 0;            //当空间值大于阈值,即代表运动过
xdata uint8_t  Motion_TIME              = 0;            //用于清除运动标记,计数2S左右,如果没有发生刹车则清零
xdata uint16_t Spatial_value_Cumulative = 0;
/* -----------------------------------------应用程序---------------------------------------*//*********************************************
函数名:ADXL346_Configuration
功  能:ADXL346器件初始化配置
形  参:INTI:1--初始化方向 0--不初始化方向
返回值:
备  注:
作  者:薛建强
时  间:2019/06/11
**********************************************/
void ADXL346_Configuration(const uint8_t INIT)
{IIC_Init();          // I2C初始化clr_EA;//关闭中断clr_EX0;P30_Input_Mode;ADXL346_Read_DATA(ACT_TAP_STATUS);//中断清零前,应读取ACT_TAP_STATUS寄存器ADXL346_Read_DATA(INT_SOURCE);//读取ADX346中断标志寄存器,读一次清空一次中断标记ADXL346_Write_DATA(POWER_CTL,   0x03); //设置时需进入休眠模式 1HZADXL346_Write_DATA(DATA_FORMAT, 0x0A); //+8g,寄存器0x31—DATA_FORMAT(读/写)--中断设为高电平有效--全分辨率模式--右对齐模式ADXL346_Write_DATA(BW_RATE,     0x0D); //相当于800 Hz的输出数据速率。即1.25ms采集一次if (INIT){/*竖立*/ADXL346_Write_DATA(OFSX, Factory_X); //写入X偏移量 -250校正为0ADXL346_Write_DATA(OFSY, Factory_Y); //写入Y偏移量  无偏移ADXL346_Write_DATA(OFSZ, Factory_Z); //写入Z偏移量  校正为0}ADXL346_Write_DATA(FIFO_CTL, 0xA8); //FIFO流模式 将触发模式下的触发事件链接至INT1/*中断配置*/ADXL346_Read_DATA(ACT_TAP_STATUS);          //中断清零前,应读取ACT_TAP_STATUS寄存器ADXL346_Read_DATA(INT_SOURCE);              //读取ADX346中断标志寄存器,读一次清空一次中断标记ADXL346_Write_DATA(INT_ENABLE,    0x00);    //禁用 中断ADXL346_Write_DATA(THRESH_ACT,    Activity_threshold);               //   活动阈值     变化幅度>6ADXL346_Write_DATA(DUR,           Activity_time);                    //   活动阈值时间 单位:16msADXL346_Write_DATA(THRESH_INACT,  Static_threshold);                 //   静止阈值     变化幅度<6ADXL346_Write_DATA(TIME_INACT,    Static_time);                      //   静止时间     单位:5sADXL346_Write_DATA(ACT_INACT_CTL, Active_static_any_axis_selection); //   活动静止任意轴选择 Z轴使能ADXL346_Write_DATA(INT_ENABLE, 0x00);  //禁用 中断if (SystemReg.BrakeMode == 1){ADXL346_Off();ADXL346_Write_DATA(INT_ENABLE, 0x18);    //开启动态、静止等中断模式,19页ADXL346_Write_DATA(INT_MAP,    0x00);    //使能 中断 ININ1ADXL346_Write_DATA(POWER_CTL,  0x08);    //测量模式}clr_EA;
}/*********************************************
函数名:ADXL346_Write_DATA
功  能:写 地址 数据
形  参:addr 地址   dat 数据
返回值:
备  注:
作  者:薛建强
时  间:2019/06/11
**********************************************/
void ADXL346_Write_DATA(const uint8_t addr, const uint8_t DATA)
{IIC_Start();                 // 启动IIC_WriteByte(ADXL346.ADDR); // 设备地址IIC_Wait_ACK();              // 等待数据响应IIC_WriteByte(addr);         // 发送寄存器地址IIC_Wait_ACK();              // 等待数据响应IIC_WriteByte(DATA);         // 发送数据IIC_Wait_ACK();              // 等待数据响应IIC_Stop();                  // 停止
}/*********************************************
函数名:ADXL346_Read_DATA
功  能:读地址数据
形  参:addr--寄存器地址
返回值:
备  注:
作  者:薛建强
时  间:2019/06/11
**********************************************/
uint8_t ADXL346_Read_DATA(const uint8_t addr)
{uint8_t GET_DATA = 0;IIC_Start();                   // 启动IIC_WriteByte(ADXL346.ADDR);   // 发送地址IIC_Wait_ACK();                // 等待数据响应IIC_WriteByte(addr);           // 发送地址IIC_Wait_ACK();                // 等待数据响应IIC_Start();                   // 启动IIC_WriteByte(ADXL346.ADDR | 1); // 发送地址IIC_Wait_ACK();                // 等待数据响应GET_DATA = IIC_ReadByte();     // 获取数据IIC_Wait_ACK();                // 等待数据响应IIC_Stop();                    // 停止return GET_DATA;
}/*********************************************
函数名:ADXL346_get_data
功  能:读取一次加速度值
形  参:
返回值:
备  注:
作  者:薛建强
时  间:2019/06/11
**********************************************/
void ADXL346_get_data(void)
{uint8_t i = 0;IIC_Start();                   // 启动IIC_WriteByte(ADXL346.ADDR);   // 发送地址IIC_Wait_ACK();                // 等待数据响应IIC_WriteByte(0x32);           // 发送地址IIC_Wait_ACK();                // 等待数据响应IIC_Start();                   // 启动IIC_WriteByte(ADXL346.ADDR | 1); // 发送地址IIC_Wait_ACK();                // 等待数据响应for (i = 0; i < 6; i++){if (i == 5){GET_DATA[i] =  IIC_ReceiveData(0);}else{GET_DATA[i] =  IIC_ReceiveData(1);}}IIC_Stop();            // 停止if (Brake_Reg.Current_direction == 1 || Brake_Reg.Current_direction == 0){XYZ_DATA1.X = (int)((GET_DATA[5] << 8) | (GET_DATA[4])); //X轴XYZ_DATA1.Y = (int)((GET_DATA[3] << 8) | (GET_DATA[2])); //Y轴}else{XYZ_DATA1.X = (int)((GET_DATA[3] << 8) | (GET_DATA[2])); //Y轴XYZ_DATA1.Y = (int)((GET_DATA[5] << 8) | (GET_DATA[4])); //X轴}XYZ_DATA1.Z = (int)((GET_DATA[1] << 8) | (GET_DATA[0])); //Z轴
}/*********************************************
函数名:ADXL346_Off
功  能:进入暂停模式
形  参:
返回值:
备  注:
作  者:薛建强
时  间:2019/06/11
**********************************************/
void ADXL346_Off(void)
{IIC_Start();                 // 启动IIC_WriteByte(ADXL346.ADDR); // 设备地址IIC_Wait_ACK();              // 等待数据响应IIC_WriteByte(0x2D);         // 发送寄存器地址IIC_Wait_ACK();              // 等待数据响应IIC_WriteByte(0x04);         // 发送数据IIC_Wait_ACK();              // 等待数据响应IIC_Stop();                  // 停止
}uint16_t StopState_Time_S = 0;
/*********************************************
函数名:ADXL346_FIFORead
功  能:从缓冲器中读取一次32个值,并求平均值
形  参:pData:存储平均值后的XYZ值
返回值:
备  注:
作  者:薛建强
时  间:2019/08/30
使  用:
**********************************************/
#define ReadNum 7
void ADXL346_FIFORead(ADXL346_XYZ *pData)
{uint8_t i = 0, Loop = 0;int X = 0, Y = 0, Z = 0;uint16_t Spatial_value = 0;for (Loop = 0; Loop < ReadNum; Loop++){IIC_Start();                   // 启动IIC_WriteByte(ADXL346.ADDR);   // 发送地址IIC_Wait_ACK();                // 等待数据响应IIC_WriteByte(0x32);           // 发送地址IIC_Wait_ACK();                // 等待数据响应IIC_Start();                   // 启动IIC_WriteByte(ADXL346.ADDR | 1); // 发送地址IIC_Wait_ACK();                // 等待数据响应for (i = 0; i < 6; i++){if (i == 5){GET_DATA[i] =  IIC_ReceiveData(0);}else{GET_DATA[i] =  IIC_ReceiveData(1);}}IIC_Stop();            // 停止if (Brake_Reg.Current_direction == 1 || Brake_Reg.Current_direction == 0){X += (int)((GET_DATA[1] << 8) | (GET_DATA[0])); //X轴Y += (int)((GET_DATA[3] << 8) | (GET_DATA[2])); //Y轴}else{X += (int)((GET_DATA[3] << 8) | (GET_DATA[2])); //Y轴Y += (int)((GET_DATA[1] << 8) | (GET_DATA[0])); //X轴}Z += (int)(~((GET_DATA[5] << 8) | (GET_DATA[4])) + 1); //Z轴 已经做反向处理os_wait(K_IVL, 5, 0);//1ms}pData->X = X / ReadNum / 4;pData->Y = Y / ReadNum / 4;pData->Z = Z / ReadNum / 4;if (((abs(pData->X) * 0.9 < pData->Z) || (abs(pData->X) < pData->Z)) && ((abs(pData->Y) * 0.9 < pData->Z) || abs(pData->Y) < 30)) //判断是否为有效值   && abs(XYZ_DATA.Y) < XYZ_DATA.Z{Spatial_value = sqrt(pData->X * pData->X + pData->Y * pData->Y + pData->Z * pData->Z);//归一处理if (Spatial_value >= 5)//针对轻刹{if (Brake_Reg.Brake_OK < 250 && pData->Z > 0){Brake_Motion = 1;Motion_TIME = 0;if (Brake_Reg.Brake_OK < 8 && ++Brake_Reg.Brake_OK >= 7){Brake_Reg.Brake_OK = 7;}Spatial_value_Cumulative += Spatial_value; //累计加速度值if (Brake_Reg.Brake_OK > 3 && Brake_Reg.Motion_State > 0) //至少有三个连续动作{//**刹车Brake_Reg.Brake_OK       = 0;Brake_Motion             = 0;Spatial_value_Cumulative = 0;//Send_Data_To_UART0('&');Brake_Time_Add();//延迟刹车灯光}else if (Brake_Reg.Brake_OK > 2 && ((Spatial_value_Cumulative / Brake_Reg.Brake_OK) >= 9) && Brake_Reg.Motion_State > 0) //至少有两个连续动作{//**刹车Brake_Reg.Brake_OK       = 0;Brake_Motion             = 0;Spatial_value_Cumulative = 0;//Send_Data_To_UART0('&');Brake_Time_Add();//延迟刹车灯光}}}else{Brake_Reg.Brake_OK       = 0;Spatial_value_Cumulative = 0;os_wait(K_IVL, 1, 0);//1ms}}else{Brake_Reg.Brake_OK = 0;os_wait(K_IVL, 1, 0);//1ms}//printf("%d,%d,0\n", (uint16_t) sqrt(pData->X * pData->X + pData->Y * pData->Y + pData->Z * pData->Z), (uint16_t)Brake_Reg.Motion_State);if (abs(pData->X - XYZ_DATA1.X) <  5 && abs(pData->Y - XYZ_DATA1.Y) < 5 && abs(pData->Z - XYZ_DATA1.Z) < 5) //是否相对静止{if (StopState_Time_S < 650 && ++StopState_Time_S > 600)//1min{StopState_Time_S = 0;if (Brake_Reg.StopState_Time < 250){Brake_Reg.StopState_Time++;}}if (Brake_Reg.StopState_Num < 40){Brake_Reg.StopState_Num++;}else{Brake_Reg.StopState_Num = 0;if (Brake_Reg.StopState_FLAG == 1){if (abs(pData->X) > 50 || abs(pData->Y) > 50){}else{ADXL346_jiaozhun();//Send_Data_To_UART0('&');Brake_Reg.StopState_FLAG = 0;Brake_Time_On = 40;}}}}else{/*关灯后,唤醒,重新激活*/if (Brake_Reg.StopState_Time >= 5){PWM_Change             = 0;CoefficientVaue        = 100;SystemReg.RunningState = 0;Brake_Reg.LEDOff       = 1;}Brake_Reg.StopState_Num    = 0;StopState_Time_S           = 0;}if (abs(pData->X) > 4 || abs(pData->Y) > 4 || abs(pData->Z) > 4){if (Brake_Reg.Motion_State < 250 && ++Brake_Reg.Motion_State > 5){Brake_Reg.StopState_FLAG = 1; //运动过,可以用校准}}XYZ_DATA1 = *pData;//printf("%d,%d,%d-%d\n", pData->X, pData->Y, pData->Z, (uint16_t)Brake_Reg.StopState_Num);//printf("%d,%d,%d\n", (uint16_t)Brake_Reg.Motion_State, (uint16_t)Brake_Reg.Static_Keep, pData->Z);
}/*********************************************
函数名:ADXL346_jiaozhun
功  能:对各个方向进行一次校准
形  参:
返回值:
备  注:
作  者:薛建强
时  间:2019/09/16
使  用:
**********************************************/
void ADXL346_jiaozhun(void)
{static uint8_t i = 0;one:if (jiaozhun_LED) LED_RGB(4);//黄灯os_wait(K_IVL, 10, 0);//10ms/*清零*/ADXL346_Write_DATA(OFSX, 0);os_wait(K_IVL, 10, 0);//10msADXL346_Write_DATA(OFSY, 0);os_wait(K_IVL, 10, 0);//10msADXL346_Write_DATA(OFSZ, 0);os_wait(K_IVL, 250, 0);//250msADXL346_get_data();os_wait(K_IVL, 100, 0);//100ms//printf("(%d,%d,%d)\n", XYZ_DATA1.X, XYZ_DATA1.Y, XYZ_DATA1.Z);ADXL346_Write_DATA(OFSX, -(XYZ_DATA1.Z / 4));os_wait(K_IVL, 10, 0);//10msADXL346_Write_DATA(OFSY, -(XYZ_DATA1.Y / 4));os_wait(K_IVL, 10, 0);//10msADXL346_Write_DATA(OFSZ, -(XYZ_DATA1.X / 4));os_wait(K_IVL, 250, 0);//250ms/*获取一次当前值*/ADXL346_get_data();if (abs((XYZ_DATA1.Z / 4)) > 3 || abs((XYZ_DATA1.Y / 4)) > 3 || abs((XYZ_DATA1.X / 4)) > 3){//printf("[%d,%d,%d]\n", XYZ_DATA1.X / 4, XYZ_DATA1.Y / 4, XYZ_DATA1.Z / 4);if (i < 250 && ++i > 5){if (jiaozhun_LED) LED_OFF();Brake_Reg.StopState_FLAG    = 0; //不可校准,防止不停校准ADXL346_Configuration(1);//初始化默认值return;}if (i >= 250) i = 0;os_wait(K_IVL, 5, 0);//5msgoto one;}//printf("(%d,%d,%d)\n", XYZ_DATA1.X / 4, XYZ_DATA1.Y / 4, XYZ_DATA1.Z / 4);Brake_Reg.Motion_State     = 0;Brake_Reg.BrakeTriggerFlag = 0;  //检测到没有刹车Brake_Reg.Collect_Tmr      = 0;Brake_Reg.StopState_FLAG   = 0; //不可校准,防止不停校准if (jiaozhun_LED) LED_OFF();i = 0;
}/*********************************************
函数名:ADXL346_INT_EN
功  能:ADXL346中断功能切换
形  参:
返回值:
备  注:
作  者:薛建强
时  间:2019/06/28
使  用:
**********************************************/
void ADXL346_INT_EN(const uint8_t En)
{if (En == 1){ADXL346_Write_DATA(INT_MAP,     0x00); //使能 中断 ININ1ADXL346_Write_DATA(DATA_FORMAT, 0x2B); //高电平中断、全分辨率ADXL346_Write_DATA(INT_ENABLE,  0x10); //使能 中断Brake_Reg.Interrupt = 0x10;/*外部引脚控制*/clr_EA;//关闭中断P30_Input_Mode;set_IT0;set_EX0;set_EA;                             // global enable bit}else{ADXL346_Write_DATA(INT_ENABLE, 0x00);  //禁用 中断/*外部引脚控制*/clr_EX0;clr_EA;}
}/*********************************************
函数名:ADXL346_Motion_Quiet_Interrupt
功  能:切换加速度传感器的中断方式
形  参:ch--0x18 动静态中断   ch--0x10 动态中断
返回值:
备  注:
作  者:薛建强
时  间:2019/11/21
使  用:
**********************************************/
void ADXL346_Motion_Quiet_Interrupt(uint8_t ch)
{ADXL346_Read_IQn();os_wait(K_IVL, 10, 0);//10msADXL346_Off();os_wait(K_IVL, 10, 0);//10msADXL346_Write_DATA(INT_ENABLE, ch);//开启动态检测Brake_Reg.Interrupt = 0x10;os_wait(K_IVL, 5, 0);//5msADXL346_Write_DATA(INT_MAP,    0x00); //使能 中断 ININ1os_wait(K_IVL, 5, 0);//5msADXL346_Write_DATA(POWER_CTL,  0x08);//测量模式os_wait(K_IVL, 5, 0);//5msLowPower_Tmr = 180;Brake_Reg.Motion_State = 0;os_wait(K_IVL, 10, 0);//10ms
}void ADXL346_Read_IQn(void)
{ADXL346_Read_DATA(0x2B);//中断清零前,应读取ACT_TAP_STATUS寄存器ADXL346_Read_DATA(0x30);//读取ADX346中断标志寄存器,读一次清空一次中断标记
}
#endif
#ifndef __ADXL346_H
#define __ADXL346_H
/* -----------------------------------------头文件-----------------------------------------*/
#include "main.h"
/* -----------------------------------------宏定义-----------------------------------------*/
#define DEVICE_ID       0X00      // 器件ID 0xE5
#define THRESH_TAP      0X1D      // 敲击阈值
#define OFSX            0X1E      // X轴偏移
#define OFSY            0X1F      // Y轴偏移
#define OFSZ            0X20      // Z轴偏移
#define DUR             0X21
#define Latent          0X22
#define Window          0X23
#define THRESH_ACT      0X24
#define THRESH_INACT    0X25
#define TIME_INACT      0X26
#define ACT_INACT_CTL   0X27
#define THRESH_FF       0X28
#define TIME_FF         0X29
#define TAP_AXES        0X2A
#define ACT_TAP_STATUS  0X2B
#define BW_RATE         0X2C
#define POWER_CTL       0X2D
#define INT_ENABLE      0X2E
#define INT_MAP         0X2F
#define INT_SOURCE      0X30
#define DATA_FORMAT     0X31
#define DATA_X0         0X32
#define DATA_X1         0X33
#define DATA_Y0         0X34
#define DATA_Y1         0X35
#define DATA_Z0         0X36
#define DATA_Z1         0X37
#define FIFO_CTL        0X38
#define FIFO_STATUS     0X39
#define ADXL_READ       0X3B
#define ADXL_WRITE      0X3A//设置出厂值
#define Factory_X       (-71)
#define Factory_Y       (0)
#define Factory_Z       (4)#define Activity_threshold                6      //活动阀值
#define Activity_time                     16     //活动阈值时间 单位:ms
#define Static_threshold                  6      //静止阀值
#define Static_time                       5      //静止阈值时间 单位:s
#define Active_static_any_axis_selection  0x9F   //活动静止任意轴选择 Z轴使能#define jiaozhun_LED                      0      //是否打开校准灯
/* -----------------------------------------结构体定义-------------------------------------*/
typedef struct
{int    X;          //x轴数据int   Y;          //y轴数据int   Z;          //z轴数据
}ADXL346_XYZ;
extern  ADXL346_XYZ xdata XYZ_DATA;
extern  ADXL346_XYZ xdata XYZ_DATA1;
/* -----------------------------------------全局变量定义-----------------------------------*/
extern xdata uint8_t   Brake_Motion;
extern uint16_t        StopState_Time_S;
/* -----------------------------------------应用程序---------------------------------------*/
void     ADXL346_Configuration(const uint8_t INIT);
void     ADXL346_Write_DATA   (const uint8_t addr,const uint8_t DATA);
uint8_t  ADXL346_Read_DATA    (const uint8_t addr);
void     ADXL346_get_data     (void);                                // 获得数据
void     ADXL346_Off          (void);
void     ADXL346_INT_EN       (const uint8_t En);
void     ADXL346_FIFORead     (ADXL346_XYZ *pData);void     ADXL346_jiaozhun     (void);
void     ADXL346_Motion_Quiet_Interrupt(uint8_t ch);
void     ADXL346_Read_IQn     (void);
#endif

单片机 ADXL346 IIC通讯相关推荐

  1. 【蓝桥杯单片机】IIC通讯协议与EEPROM(AT24C02)(官方驱动源码改写)

    实验开发板为CT107D蓝桥官方板,编译环境为MDK5 由蓝桥官方驱动改写 AT24C02: AT24C02为地址可编程器件(CT107D可编程位均为0),因此可于总线上挂载多个相同的器件. 最后一位 ...

  2. 基于51单片机的OLED驱动方式(iic通讯方式)

    基于51单片机的OLED驱动方式(iic通讯方式) 前言: 本人从事硬件开发,自学软件,因为发现在学习过程中,有很多问题对于没有项目实战经验的新手来讲太难解决了,可以说基本上是无从下手.现将自己学习过 ...

  3. 树莓派IIC通讯获取BMI08x IMU数据进行姿态解算,并通过UART/TCP在rviz上显示

    截至2021年,树莓派出的最新款应该是Raspberry Pi 400,设计得跟键盘一样,很难想象到这是个树莓派,尤其是它的标语写的很好"你的下一个电脑,何必是电脑",不言而喻.反 ...

  4. ARM+SD2405 IIC_RTC驱动编写及IIC通讯协议

    IIC通讯协议 协议简介 IIC(inter-integrated Circuit集成电路总线)总线支持设备之间的短距离通信,用于处理器和一些外围设备之间的接口,它需要两根信号线来完成信息交换,它是由 ...

  5. LPC1768的iic通讯

    LPC1768有三路IIC,其中IIC0支持高速模式和plus模式,另外两路是普通IIC,使用IIC的过程如下 首先依然是打开IIC时钟,同时打开GPIO时钟 然后配置引脚为IIC功能 另外,因为ii ...

  6. STM32之IIC通讯-SHT30温湿度采集

    一.实验目的:通过单片机普通IO口,模拟IIC时序,掌握IIC通讯协议. 二.实验用到的主控芯片:STM32F103RCT6,IIC通讯引脚IIC_SDA:PC11,IIC_SCL:PC12 三.SH ...

  7. 8、RH850 F1 IIC通讯功能和配置

    前言: 续上章节UART后,此章讲解的IIC也是最常见的串行通讯,广泛应用于单片机和单片机之间通讯.同样这里IIC的具体原理讲解就不做介绍,不清楚的朋友可移步up主的个人专栏 ---- "串 ...

  8. Bq769XX IIC 通讯 ALERT引脚

    Bq769X 初入BMS,很可能会选用到TI的这颗料,扩展性和可用性都还不错.但是在调试过程中,会有几个点让初入的人摸不着点. IIC通讯 TI的这个通讯准确说叫Mbus,但是实际与IIC通讯差异不大 ...

  9. #C51 IIC通讯(底层配置时序)

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如: 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录 前言 一.场景 二.I ...

最新文章

  1. python计算身体质量指数_利用Python计算身体质量指数BMI来判断体型
  2. android adb命令,向开发手机添加文件
  3. 第四范式陈雨强获评首届世界人工智能大会云帆奖 | 2020WAIC
  4. mysql 建索引_mysql数据库正确建立索引及使用
  5. Collections.min()和Collections.max()的使用
  6. php strpo函数,php strpos函数有什么用
  7. 诗与远方:无题(六十七)- 张国荣,想你
  8. golang切片转为字符串,字符串转切片
  9. 大场面试必问:秒杀90%Java面试者,后悔没有早点知道!
  10. Android颜色代码对照表
  11. pycharm导入opencv库失败解决方法
  12. HttpRequest 和HttpWebRequest的区别
  13. Linux安装MySQL安装包下载
  14. 第二十次CCF CSP认证考试经验
  15. 计算机上装的word怎么卸载,如何彻底删除电脑上的office软件
  16. Xilinx XC7Z020双核ARM+FPGA开发板试用合集——硬件赏析
  17. Github之First day on Github,带你学习并完成任务点,纯手敲超详细教程!(下)
  18. 【 第一章:初识 ts】
  19. 控制台报 [WDS] Disconnected!不影响代码运行。
  20. 平台建设的7大问题:蚂蚁AI平台实践深度总结

热门文章

  1. pandas9_高级处理_交叉表和透视表
  2. 远程计算机或设备将不接受连接
  3. 网站优化的几个关键词?pv uv pr
  4. Python绘图(一):坐标轴刻度及范围设置
  5. 八个主要网络广告方法,广告人一定要知道
  6. ThreadPoolExecutor用法总结
  7. C语言打印心形(采用空格与星号)
  8. 目前常用的宽带上网方式
  9. 外部文件数据写入hive
  10. 什么样的大学女生值得娶回家