发 帖  
原厂入驻New

[经验] 【小熊派IOT开发板试用连载】之三 基础试验操作GPIO点点亮路灯,IIC操作

2020-4-26 22:27:21  849 IOT
分享
0

   小熊派采用BH1750FVI环境光强度传感器集成电路,16位数字输出,是一种用于两线式串行总线接口的数字型光强度传感器集成电路。这种集成电路可以根据收集的光线强度数据来调整液晶或者键盘背景灯的亮度。利用它的高分辨率可以探测较大范围的光强度变化。
3.jpg

  原理图
   QQ截图20200426220413.JPG

  与STM32连接示意图
1.png

IIC_SCL--12C1_SCL引脚为PB6、 IIC_SDA--12C1_SDA引脚为PB7、 LED为PC13
下面进行单片机编程:
void LED_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct;

  /* GPIO Ports clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(LED_SW_GPIO_Port, LED_SW_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = GPIO_PIN_13
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIO_PIN_13 &GPIO_InitStruct);

/*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = LED_SW_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(LED_SW_GPIO_Port, &GPIO_InitStruct);



}


下面这条语句操作GPIO,既可以电量路灯
  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13  ,GPIO_PIN_SET);



IIC初始化
void MY_I2C1_Init(void)
{

  hi2c1.Instance = I2C1;
  hi2c1.Init.timing = 0x00303D5B;
  hi2c1.Init.OwnAddress1 = 0;
  hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  hi2c1.Init.OwnAddress2 = 0;
  hi2c1.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
  hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  IF (HAL_I2C_Init(&hi2c1) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

    /**Configure analogue filter
    */
  if (HAL_I2CEx_ConfigAnalogFilter(&hi2c1, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

    /**Configure Digital filter
    */
  if (HAL_I2CEx_ConfigDigitalFilter(&hi2c1, 0) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

}


IIC读取光照传感器。串口读取
连续高分辨率模式精度1lux:0x10
连续高分辨率模式2精度0.5lux:0x11
低分辨率模式:0x13
*/

float ReadBH1750(void)
{
        uint8_t temp[1]={0x11};//连续高分辨率模式2
        float lux=0;
        uint8_t ReadData[2]={0};
        HAL_I2C_Master_Transmit(&hi2c1, 0x46, temp, 1, 0xff);
        HAL_Delay(180);
        HAL_I2C_Master_Receive(&hi2c1, 0x47,ReadData, 2, 0xff);
        lux=(float)((ReadData[0]<<8)|ReadData[1]);
        lux=(double)lux/1.2;
        return lux;
}




4.jpg
OK


评论

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发经验
关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表