stm32用硬件i2c读取16位AD:ADS1115

时间:2026-04-24

stm32用硬件i2c读取16位AD:ADS1115 并用串口发送出读取到的电压

#include "stm32f10x.h"

#include "math.h"

#include "delay.c" //包含delay_us(--); delay_ms(--);

unsigned char BUF[8];

//----------结构体声明-------------------------------//

void RCC_Configuration(void) //打开各个模块时钟

{

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);

}

//----------------------------------------//

void I2C_Configuration(void) //硬件iic初始化

{

I2C_InitTypeDef I2C_InitStructure;

I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;

I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;

I2C_InitStructure.I2C_OwnAddress1 = 0xA0;

I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;

I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;

I2C_InitStructure.I2C_ClockSpeed = 100000;

I2C_Cmd(I2C1, ENABLE);

I2C_Init(I2C1, &I2C_InitStructure);

}

//-----------------------------------------------------------------//

void USART2_Configuration(void) //串口配置初始化:USART2

{

USART_InitTypeDef USART_InitStructure;

USART_http://www.77cn.com.cnART_BaudRate = 14400;

USART_http://www.77cn.com.cnART_WordLength = USART_WordLength_8b;

USART_http://www.77cn.com.cnART_StopBits = USART_StopBits_1;

USART_http://www.77cn.com.cnART_Parity = USART_Parity_No;

USART_http://www.77cn.com.cnART_HardwareFlowControl =USART_HardwareFlowControl_None;

stm32用硬件i2c读取16位AD:ADS1115 并用串口发送出读取到的电压

USART_http://www.77cn.com.cnART_Mode = USART_Mode_Tx|USART_Mode_Rx;

USART_Init(USART2, &USART_InitStructure);

GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE);

USART_Cmd(USART2, ENABLE);

}

void USART2_SendData(unsigned char SendData) //防卡函数

{

while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);//检测上次发送是否完成;

USART_SendData(USART2, SendData);

//Delayms(3);

}

//-----------------------------------------------------------------//

void GPIO_Configuration(void) //各个模块GPIO初始化

{

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//配置管脚

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //最大输出速度为50MHz GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //通用推挽输出

GPIO_Init(GPIOE, &GPIO_InitStructure); //配置以上三句.PE3-led3

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//配置管脚

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //最大输出速度为50MHz GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

GPIO_Init(GPIOD, &GPIO_InitStructure); //配置以上三句.PD5 txd

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//配置管脚

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //输入

GPIO_Init(GPIOD, &GPIO_InitStructure); //配置以上三句.PD6 rxd

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;//iic管脚:SCL and SDA GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;

GPIO_Init(GPIOB, &GPIO_InitStructure);

}

stm32用硬件i2c读取16位AD:ADS1115 并用串口发送出读取到的电压

void I2C_WriteByte(unsigned char id,unsigned char write_address,unsigned char byte) {

I2C_GenerateSTART(I2C1,ENABLE);

//产生起始条件

while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));

//等待ACK

I2C_Send7bitAddress(I2C1,id,I2C_Direction_Transmitter);

//向设备发送设备地址

while(!I2C_CheckEvent(I2C1,

I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));

//等待ACK

I2C_SendData(I2C1, write_address);

//寄存器地址

while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); //等待ACK

I2C_SendData(I2C1, byte);

//发送数据

while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); //发送完成

I2C_GenerateSTOP(I2C1, ENABLE);

//产生结束信号

}

//---------------------------------------------------------//

void AD_init(unsigned char id,unsigned char write_address,unsigned char byte1,unsigned char byte2)

{

I2C_GenerateSTART(I2C1,ENABLE);

//产生起始条件

while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));

//等待ACK

I2C_Send7bitAddress(I2C1,id,I2C_Direction_Transmitter);

//向设备发送设备地址

while(!I2C_CheckEvent(I2C1,

I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));

//等待ACK

I2C_SendData(I2C1, write_address);//配置寄存器

//寄存器地址

while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); //等待ACK

I2C_SendData(I2C1, byte1);//c-an0 d-an1 e-an2 f-an3 0->6.144 2->4.096,高字节配置 //发送数据

while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); //发送完成

I2C_SendData(I2C1, byte2);//低字节 最高转换速度

stm32用硬件i2c读取16位AD:ADS1115 并用串口发送出读取到的电压

while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); //发送完成

I2C_GenerateSTOP(I2C1, ENABLE);

//产生结束信号

}

//-------------------------------- …… 此处隐藏:6253字,全部文档内容请下载后查看。喜欢就下载吧 ……

stm32用硬件i2c读取16位AD:ADS1115.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:4.9 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:19元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219