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;
}