纠结了两天,终于弄好也,一开始一直想着移植别人现成的程序,可是网上资料很少,找了后移植还出了很多问题,后来狠下心,自己看着手册弄了,结果自己写比移植还快,还把IIC复习了一遍,还是自己动手好啊!!!
用的有原子哥的myiic.h,工程太大,直接上文件吧:
这是main中需要的:
extern float result_lx;
void TaskBH1750(void *pdata)
{
Init_BH1750();
while(1)
{
Start_BH1750(); //power on
delay_ms(180); //延时180ms
Read_BH1750(); //连续读出数据,存储在BUF中
Convert_BH1750(); //转换结果至result_lx
OSTimeDlyHMSM(0,0,0,500);
}
GUI_DispDecAt(result_lx,0,60,5);
GUI_DispStringAt("lx",50,60);
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
感觉你说的很有问题,这里定义的是IO口的读写数据寄存器,真正的IO方向设置在i2c.c
//初始化IIC
void i2c_Port_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
I2C_SCL=1;
I2C_SDA=1;
}
void SDA_OUT(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出
GPIO_Init(GPIOC,&GPIO_InitStructure);
}
void SDA_IN(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_Init(GPIOC,&GPIO_InitStructure);
}
IIC读写中会有SDA_IN();SDA_OUT();IO方向的切换
一周热门 更多>