stm32用硬件i2c读取16位ADADS.doc_第1页
stm32用硬件i2c读取16位ADADS.doc_第2页
stm32用硬件i2c读取16位ADADS.doc_第3页
stm32用硬件i2c读取16位ADADS.doc_第4页
stm32用硬件i2c读取16位ADADS.doc_第5页
免费预览已结束,剩余4页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include stm32f10x.h#include math.h#include delay.c /包含delay_us(-); delay_ms(-); unsigned char BUF8; /-结构体声明-/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) /串口配置初始化:USART2USART_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 rxdGPIO_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);/等待ACKI2C_Send7bitAddress(I2C1,id,I2C_Direction_Transmitter);/向设备发送设备地址while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED);/等待ACKI2C_SendData(I2C1, write_address);/寄存器地址while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED);/等待ACKI2C_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);/等待ACKI2C_Send7bitAddress(I2C1,id,I2C_Direction_Transmitter);/向设备发送设备地址while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED);/等待ACKI2C_SendData(I2C1, write_address);/配置寄存器/寄存器地址while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED);/等待ACKI2C_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);/低字节 最高转换速度while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED);/发送完成I2C_GenerateSTOP(I2C1, ENABLE);/产生结束信号/-/void I2C_ADpoint(unsigned char id,unsigned char write_address)I2C_GenerateSTART(I2C1,ENABLE);/产生起始条件while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT);/等待ACKI2C_Send7bitAddress(I2C1,id,I2C_Direction_Transmitter);/向设备发送设备地址while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED);/等待ACKI2C_SendData(I2C1, write_address);/寄存器地址while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED);I2C_GenerateSTOP(I2C1, ENABLE);/产生结束信号/-/unsigned char I2C_ReadByte(unsigned char id, unsigned char read_address) unsigned char temp; while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY); /等待I2C I2C_GenerateSTART(I2C1, ENABLE); /产生起始信号 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT); /EV5 I2C_Send7bitAddress(I2C1, id, I2C_Direction_Transmitter);/发送地址 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED); /EV6 I2C_Cmd(I2C1, ENABLE); /重新设置可以清楚EV6 I2C_SendData(I2C1, read_address); /发送读地址 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED); /EV8 I2C_GenerateSTART(I2C1, ENABLE);/重新发送 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT); /EV5 I2C_Send7bitAddress(I2C1, id, I2C_Direction_Receiver); /发送读地址 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED); /EV6 I2C_AcknowledgeConfig(I2C1, DISABLE); I2C_GenerateSTOP(I2C1, ENABLE);/关闭应答和停止条件产生 while(!(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED); temp = I2C_ReceiveData(I2C1); I2C_AcknowledgeConfig(I2C1, ENABLE); return temp;/-/void I2C_Read2(unsigned char id, unsigned char read_address) while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY); /等待I2C I2C_GenerateSTART(I2C1, ENABLE); /产生起始信号 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT); /EV5 I2C_Send7bitAddress(I2C1, id, I2C_Direction_Transmitter);/发送地址 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED); /EV6 I2C_Cmd(I2C1, ENABLE); /重新设置可以清楚EV6 I2C_SendData(I2C1, read_address); /发送读得地址 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED); /EV8 I2C_GenerateSTART(I2C1, ENABLE);/重新发送 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT); /EV5 I2C_Send7bitAddress(I2C1, id, I2C_Direction_Receiver); /发送读地址 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED); /EV6 while(!(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED); BUF1 = I2C_ReceiveData(I2C1);I2C_GenerateSTOP(I2C1, ENABLE);I2C_AcknowledgeConfig(I2C1, DISABLE);/关闭应答和停止条件产生while(!(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED);BUF2 = I2C_ReceiveData(I2C1); I2C_AcknowledgeConfig(I2C1, ENABLE); /-/int valu; /-/-/void read_ADS1115() AD_init(0x90,0x01,0xc2,0xe2); /器件地址90,配置寄存器01,寄存器高位,寄存器低位e2 /高字节配置:c-an0 d-an1 e-an2 f-an3 ; 0-6.144 2-4.096 delay_ms(1); I2C_ADpoint(0x90,0x00); delay_ms(2); I2C_Read2(0x91,0x00); valu=(BUF1 0x7fff)valu-=0xffff; /-/void Send_AD()float t;int t1;/-/USART2_SendData(BUF1); /USART2_SendData(BUF2); /原始16位数据/-/ USART2_SendData(valu/10000)+0x30); / USART

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论