#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);//低字节 最高转换速度