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

更新时间:2023-07-18 22:10:11 阅读: 评论:0

#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_InitStructure.USART_BaudRate = 14400;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl =USART_HardwareFlowControl_None;
USART_InitStructure.USART_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);
约法三章
}
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);//低字节 最高转换速度

本文发布于:2023-07-18 22:10:11,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1103859.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:配置   输出   设备   发送   速度
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图