分享!模拟IIC,读取BH1750光强传感器!

2019-07-21 07:26发布

纠结了两天,终于弄好也,一开始一直想着移植别人现成的程序,可是网上资料很少,找了后移植还出了很多问题,后来狠下心,自己看着手册弄了,结果自己写比移植还快,还把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);
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
50条回答
爱博不专
2019-07-23 02:49
回复【15楼】lancer:
---------------------------------
感觉你说的很有问题,这里定义的是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方向的切换

一周热门 更多>