#include "stm32f0xx.h"
#define  WR_REG 0x90
#define  RE_REG 0x91/***********************************??????**********************************************/
#define  DATA_REG  0x00     //???????
#define  CONF_REG  0x01     //????????
#define  LOTH_REG  0x02     //???????
#define  HITH_REG  0x03     //???????/***********************?????*************************************************************
*|  OS | MUX2 | MUX1 | MUX0 | PGA2 | PGA1 | PGA0 | MODE  |------HCMD
*|  DR2| DR1  | DR0  | COMP_MODE | COMP_POL | COMP_LAT |  COMP_QUE1 | COMP_QUE0 |-----LCMD
***********************************************************************************************/
#define  HCMD1    0x64   // ? +-4.096??  ????  01000100b
#define  LCMD1    0xf0void ADS1115Config_A(uint8_t LCMD,uint8_t HCMD);//Õâ¸öÊÇÍùads1115ÀïдָÁîµÄ
void ADS_1115PointRegister_A(void);//ÕâÊÇÖ¸Ïò90  00  ¼Ä´æÆ÷µÄ
void SetThresHold_A(uint16_t L_TH,uint16_t H_TH);//
uint16_t ReadAD_A(int x);//ÕâÊǶÁȡijһ·adµÄÖµ
#include"ads1115_2.h"
#include"delay.h"
#include"iic.h"
#include "JLX12864.h"
void ADS1115Config_A(uint8_t LCMD,uint8_t HCMD);
// while (1) i2c_CheckDevice(0x48); Initdata[0] = WR_REG; // ??0x90 ??ADR?? ???? Initdata[1] = 0x01;// ??0x01 ???????
Initdata[2] = HCMD; // ??0x64 ??????
Initdata[3] = LCMD; // ??0xf0 ??????I2C_SCL_1();i2c_Start();
for(i=0;i<4;i++)
{do{ i2c_SendByte(Initdata[i]);delay_us(20);} while(i2c_WaitAck());//1
} i2c_Stop();
}
void ADS_1115PointRegister_A(void)
{
uint8_t i=0;
uint8_t InitData[2];InitData[0] = WR_REG; // ??0x90 ????
InitData[1] = DATA_REG;// ??0x00 ???????????
I2C_SCL_1();
i2c_Start();for(i=0;i<2;i++){i2c_SendByte(InitData[i]);delay_us(10);}i2c_Stop();
}
void SetThresHold_A(uint16_t L_TH,uint16_t H_TH){
I2C_SCL_1();
i2c_Start();
i2c_SendByte(WR_REG);
i2c_SendByte(LOTH_REG); //???????
i2c_SendByte((L_TH>>8));
i2c_SendByte(L_TH);
i2c_Stop();
i2c_Start();
i2c_SendByte(WR_REG);
i2c_SendByte(HITH_REG); //???????
i2c_SendByte((H_TH>>8));
i2c_SendByte(H_TH);
i2c_Stop();
}
uint16_t ReadAD_A(int x)
{uint16_t Data[2]={0,0};
if(x==1)ADS1115Config_A(0xf0,0x52);
if(x==2)ADS1115Config_A(0xf0,0x62);
if(x==3)ADS1115Config_A(0xf0,0x72);
if(x==0)ADS1115Config_A(0xf0,0x42);
I2C_SCL_1();
i2c_Start();
i2c_SendByte(WR_REG); //???????i2c_SendByte(DATA_REG);
i2c_Stop();
I2C_SCL_0();
I2C_SCL_1();
i2c_Start();
i2c_SendByte(RE_REG); //?
Data[0] = i2c_ReadByte();
Data[1] = i2c_ReadByte();
i2c_Stop();
Data[0] = Data[0]<<8 | Data[1];return (Data[0]); //&0x7fff
}
#ifndef _BSP_I2C_GPIO_H
#define _BSP_I2C_GPIO_H
#include <inttypes.h>
#include "delay.h"
#define I2C_WR 0 /* д¿ØÖÆbit */
#define I2C_RD 1 /* ¶Á¿ØÖÆbit */
#define GPIO_PORT_I2C GPIOB
#define GPIO_SCL_PORT_I2C GPIOA
#define GPIO_SDA_PORT_I2C GPIOA
#define RCC_SCL_PORT RCC_AHBPeriph_GPIOA
#define RCC_SDA_PORT RCC_AHBPeriph_GPIOA
#define I2C_SCL_PIN GPIO_Pin_5
#define I2C_SDA_PIN GPIO_Pin_6
#if 1
#define I2C_SCL_1()
GPIO_SetBits(GPIO_SCL_PORT_I2C, I2C_SCL_PIN) /* SCL = 1 */#define I2C_SCL_0() GPIO_ResetBits(GPIO_SCL_PORT_I2C, I2C_SCL_PIN) /* SCL = 0 */#define I2C_SDA_1() GPIO_SetBits(GPIO_SDA_PORT_I2C, I2C_SDA_PIN) /* SDA = 1 */#define I2C_SDA_0() GPIO_ResetBits(GPIO_SDA_PORT_I2C, I2C_SDA_PIN) /* SDA = 0 */#define I2C_SDA_READ() GPIO_ReadInputDataBit(GPIO_SDA_PORT_I2C, I2C_SDA_PIN) /* ¶ÁSDA¿ÚÏß״̬ */
#else
#define I2C_SCL_1() GPIO_PORT_I2C->BSRR = I2C_SCL_PIN /* SCL = 1 */
#define I2C_SCL_0() GPIO_PORT_I2C->BRR = I2C_SCL_PIN /* SCL = 0 */
#define I2C_SDA_1() GPIO_PORT_I2C->BSRR = I2C_SDA_PIN /* SDA = 1 */
#define I2C_SDA_0() GPIO_PORT_I2C->BRR = I2C_SDA_PIN /* SDA = 0 */
#define I2C_SDA_READ() ((GPIO_PORT_I2C->IDR & I2C_SDA_PIN) != 0)
#endif
void i2c_CfgGpio(void);
void i2c_Start(void);
void i2c_Stop(void);
void i2c_SendByte(uint8_t _ucByte);
uint8_t i2c_ReadByte(void);
uint8_t i2c_WaitAck(void);
void i2c_Ack(void);
void i2c_NAck(void);
uint8_t i2c_CheckDevice(uint8_t _Address);
void i2c_CfgGpio(void);
void iictest(void);
#endif
static void i2c_Delay(void)
{
uint8_t i;
for (i = 0; i < 10; i++);
}
void i2c_Start(void){
I2C_SDA_1();
I2C_SCL_1();
i2c_Delay();
I2C_SDA_0();
i2c_Delay();
I2C_SCL_0();
i2c_Delay();
}
void i2c_Stop(void){
I2C_SDA_0();
I2C_SCL_1();
i2c_Delay();
I2C_SDA_1();
}
void i2c_SendByte(uint8_t _ucByte)
{
uint8_t i;
for (i = 0; i < 8; i++)
{
if (_ucByte & 0x80){I2C_SDA_1();}
else{I2C_SDA_0();
}
i2c_Delay();
I2C_SCL_1();
i2c_Delay();
i2c_Delay();
I2C_SCL_0();
}

在用stm32f030进行程序开发的过程中,我们遇到了ads1115测量电流电压的需要,遇到了3个问题,现与诸君分享

首先:ads1115联系不上,返回值为65535,这是因为iic没连上,写也没写进去,读的是两个上拉的高电平,所以是65536

解决方案:接上逻辑分析仪,看看有没有数据的发射和接受,注意,为了让分析仪认识你发送的数据,每一个发射之后要加一个ACK,这个是1115返回给你的,所以一定不要太较真,给空脚发送90  01  64  80,然后一读取,嗯,不是四个数据,这还是因为没接1115,所以这一步只要接到数据,就算有了

然后:虽然有了数据,但是1115接受的时候不对,直接把我们的时序打乱了

这是因为1115发送的ack和我们的时序混在一起了,这时候我们只需要在发送之后加一个while(wait_ack());之后就好了,因为这样就能让1115来的ack被我们接受,一面检测了ack,一面避免了干扰

第三:接受的数据总是在跳,很多时候不是0就是最大

这是因为我们在scl上设置的频率太高了,只要把延时时间增长,频率一下来,在读取寄存器的时候就不会错了

ads1115 IIC接口 stm32 解决相关推荐

  1. stm32 iic接口 进入busy_STM32通过IIC接口读取JY61模块MPU6050陀螺仪芯片数据核心程序...

    1 简述 最近,想学角度融合算法在网上买一个JY61的模块.他们家的模块用起来还不错.模块分为串口通讯和IIC通讯的.串口读取数据他们家有例程,我就不说了.想分享给大家这个模块的IIC是怎么去读取MP ...

  2. stm32如何读取并口_STM32 的并口总线的所有接口类型解决方法

    STM32 的并口总线的所有接口类型解决方法 STM32的并口总线支持NOR, SRAM, PSRAM,NAND接口,本文以PSRAM为例实现并口的同步非复用, 异步复用和异步非复用操作!以STM32 ...

  3. STM32F407单片机移植MS5611气压计(基于IIC)---同时解决温度低于20度时计算得到的大气压错误的问题

    最近一个工程项目需要使用MS5611气压计,就花时间研究了一下,发现网上很多都是基于STM32F103单片机的MS5611气压计源程序,当移植到STM32F407时发现采集的大气压力和温度值不对,同时 ...

  4. D3--FPGA IIC接口通信2022-12-05

    1.IIC简介 1.1 IIC概述 IIC即 Inter-Integrated Circuit(集成电路总线),是由 Philips 半导体公司在八十年代初设计出来的一种简单.双向.二线制总线标准.多 ...

  5. lkt芯片接口调试建议-iic接口

    本文主要介绍使用STM32芯片 IO模拟方式调试IIC接口LKT加密芯片时需要注意的问题点.可能有人会说我之前操作过XXXX IIC接口的芯片,IIC接口没什么好介绍的.其实不然如果IO模拟的IIC程 ...

  6. win7计算机不支持此接口,win7系统IIS服务器启动失败显示不支持此接口的解决方法...

    很多小伙伴都遇到过 出错表现为以下几点: 1.World Wide Web Publishing 服务在请求配置数据库更改通知时遇到问题.数据域包含错误号. 2.初始化 World Wide Web ...

  7. 基于FPGA实现IIC接口(EEPROM)

    1 IIC应用领域 在嵌入式系统开发过程中,IIC占据非常重要的地位.IIC通讯接口能到搭载较多的从设备,从而实现与多个从设备进行通讯,在板级通讯中是一种比较常用的通讯接口.笔者通过IIC接口实现FP ...

  8. python arduino i2c1602_Arduino 将1602液晶显示屏改造为IIC接口

    原来的1602是这样的: image.png 连接到Arduino上需要接好多线,于是买了块IIC的板子改成IIC接口,就是这货: 由于Arduino的I/O口数量有限,如果直接用Arduino的I/ ...

  9. 利用51单片机+0.96寸iic接口oled显示图片或动图

    利用51单片机+0.96寸iic接口oled显示图片或动图 前言:之前讲过如何使用oled显示数字以及字符,但并未讲述如何显示BMP格式的图片, 这篇将在之前的基础上加以封装一些函数用来显示图片 硬件 ...

最新文章

  1. 有java基础的人学python_准备自学Python ,会java,有什么建议吗?
  2. Global variables vs. Host variables vs. Parameter markers
  3. 铁大Facebook——十天冲刺(1)
  4. spring+springmvc+mybatis实现图书管理系统_Spring、SpringMVC、Mybatis自学视频分享
  5. 常用CSS优化总结——网络性能与语法性能建议
  6. C#十进制与十六进制转换
  7. linux系统编程shell,Linux系统中的 Shell 编程
  8. 腾讯云安全:移动 APP 安全行业报告
  9. 简记_关于刷三防漆的几点个人见解
  10. 深度卷积神经网络(一)
  11. EXCEL实战技巧与数据分析(二)数据透视表
  12. Win10 64位+Mysql5.7+主从同步配置
  13. 如何删除搜索框的搜索记录(谷歌浏览器)
  14. Java零基础学习记录09(飞机躲避炮弹游戏实现)
  15. 什么东西可以改善睡眠,可以试试这些助眠好物改善睡眠
  16. 不使用redis,在前后端分离项目的条件下将验证码进行储存
  17. 通过Windows10管理AD域控
  18. 远程办公常态化,网络安全迫在眉睫,“零信任安全”的风口到了吗?
  19. minu-ui 的 mt-datetime-picker 组件在部分安卓机型上不显示日期只有取消和确认按钮
  20. TPS63020DSJR(LDO)NCP51200MNTXG IC REG 稳压器参数

热门文章

  1. php 一维数组值 拼接,php 一维数组拼接到二维数组后面
  2. 硬件nat关闭还是开启_vivo用户必看!告别卡顿,只需关闭这四项功能
  3. java当中^到底怎么用?
  4. mysql导出csv乱码_Mysql 导入导出csv 中文乱码
  5. vue项目Agora声网实现一对一视频聊天Demo示例(Agora声网实战及agora-rtc-vue使用,新增在线预览地址)
  6. java web商城springboot后台购物系统的设计与实现
  7. Secureboot概念进阶版
  8. 两个图片叠加在一起css,css两张图片怎么叠加在一起?
  9. 数字电子技术之触发器
  10. APP开发实战132-Git命令介绍