STM3.5库I2C函数的应用求解,谢谢
正在写STM32F107VC 的应用程序, 需要用户I2C程序,想使用中断服务来发送和接收,看到3.5库里面有多个检查Flag、event、IT信息的函数以及清除flag等函数。没有相关例程,请教下高手,正常的操作流程,谢谢。 望穿秋水,未见来者。只能NXP了,哎。 static void I2C_Configuration(void){
I2C_InitTypeDefI2C_InitStructure;
GPIO_InitTypeDefGPIO_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
/* PB6,7 SCL and SDA */
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; //设置管脚为复用功能开漏输出
GPIO_Init(GPIOB, &GPIO_InitStructure); //I2C接口使用的GPIO管脚初始化
I2C_DeInit(I2C1);
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; //设置I2C接口模式
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; //设置I2C接口的高低电平周期
I2C_InitStructure.I2C_OwnAddress1 = 0x30; //设置I2C接口的主机地址
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; //设置是否开启ACK响应
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_ClockSpeed = 100000; //100K速度
I2C_Cmd(I2C1, ENABLE); //使能I2C接口
I2C_Init(I2C1, &I2C_InitStructure); //I2C接口初始化
/*允许1字节1应答模式*/
I2C_AcknowledgeConfig(I2C1, ENABLE); //使能I2C接口响应
}
rt_uint16_t IIC_Read()
{
rt_uint16_t dataH = 0,dataL = 0;
rt_uint16_t ret = 0;
/* 起始位 */
I2C_GenerateSTART(I2C1, ENABLE);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2C1, 0x46, I2C_Direction_Transmitter); //写
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
I2C_SendData(I2C1, 0x01); //Power on
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
/* 停止位*/
I2C_GenerateSTOP(I2C1, ENABLE);
/* 起始位 */
I2C_GenerateSTART(I2C1, ENABLE);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2C1, 0x46, I2C_Direction_Transmitter); //写
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
I2C_SendData(I2C1, 0x10); //H- resolution mode
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
/* 停止位*/
I2C_GenerateSTOP(I2C1, ENABLE);
rt_thread_delay(20);//等待数据转换完成
/* 起始位 */
I2C_GenerateSTART(I2C1, ENABLE);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2C1, 0x46, I2C_Direction_Receiver);//读
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED));
dataH = I2C_ReceiveData(I2C1);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED));
dataL = I2C_ReceiveData(I2C1);
I2C_GenerateSTOP(I2C1, ENABLE);
ret = ((dataH << 8) | dataL);
return ret;
}
之前操作一个IIC接口芯片的代码,可以参考下 忘了,我用的103的芯片 fengdingkusong 发表于 2013-12-10 10:27
之前操作一个IIC接口芯片的代码,可以参考下
谢谢 fengdingkusong 朋友 ,古道热肠的人品! 虽然我想用的是中断方式,也在编写,但是项目时间短,只能改用LPC1766了,{:smile:} 。那个芯片和我原来的设计使用的是一个厂家的。 {:smile:}看看 shengliangcumt 发表于 2013-12-24 10:13
看看
加油 shengliangcumt一起学习 :)
页:
[1]