锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Stm32F103 Hal库硬件iic 访问AM2320温湿度传感器

时间:2022-10-20 00:00:00 温度湿度传感器iicam2315温湿度传感器

Stm32F103 Hal库硬件iic 访问AM2320温湿度传感器

管脚配置 PB6 PB7
以前用库函数读不到,换了hal库后正常,因为在android板上调试,板卡没来,只好用stm32 先调试下。
很简单,先初始化i2C1
i2c.c

I2C_HandleTypeDef hi2c1;  /* I2C2 init function */ void MX_I2C1_Init(void) { 
          hi2c1.Instance = I2C1;  hi2c1.Init.ClockSpeed = 100000;  hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;  hi2c1.Init.OwnAddress1 = 0;  hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;  hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;  hi2c1.Init.OwnAddress2 = 0;  hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;  hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;  if (HAL_I2C_Init(&hi2c1) != HAL_OK)  { 
           //_Error_Handler(__FILE__, __LINE__);  } }  void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle) { 
          GPIO_InitTypeDef GPIO_InitStruct;  if(i2cHandle->Instance==I2C1)  { 
               /* USER CODE BEGIN I2C2_MspInit 0 */   __HAL_RCC_I2C1_CLK_ENABLE(); ////默认情况下,这个时钟的初始化代码放在了GPIO初始化后,需要在这里进行调整,即GPIO初始化前   /* USER CODE END I2C2_MspInit 0 */   __HAL_RCC_GPIOB_CLK_ENABLE();   /**I2C2 GPIO Configuration PB6 ------> I2C2_SCL PB7 ------> I2C2_SDA */   GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;   GPIO_InitStruct.Mode = GPIO_MDE_AF_OD;
		GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
		HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

		/* I2C2 clock enable */
		// __HAL_RCC_I2C2_CLK_ENABLE();
		/* USER CODE BEGIN I2C2_MspInit 1 */

		/* USER CODE END I2C2_MspInit 1 */
	}
}

void HAL_I2C_MspDeInit(I2C_HandleTypeDef* i2cHandle)
{ 
        

	if(i2cHandle->Instance==I2C1)
	{ 
        
		/* USER CODE BEGIN I2C2_MspDeInit 0 */

		/* USER CODE END I2C2_MspDeInit 0 */
		/* Peripheral clock disable */
		__HAL_RCC_I2C1_CLK_DISABLE();
  
		/**I2C2 GPIO Configuration PB6 ------> I2C2_SCL PB7 ------> I2C2_SDA */
		HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6|GPIO_PIN_7);
		/* USER CODE BEGIN I2C2_MspDeInit 1 */

		/* USER CODE END I2C2_MspDeInit 1 */
	}
} 

i2c.h

#ifndef __i2c_H
#define __i2c_H
#ifdef __cplusplus
 extern "C" { 
        
#endif

/* Includes ------------------------------------------------------------------*/
#include "stm32f1xx_hal.h"
#include "main.h"

/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

extern I2C_HandleTypeDef hi2c1;

/* USER CODE BEGIN Private defines */

/* USER CODE END Private defines */

//extern void _Error_Handler(char *, int);

void MX_I2C1_Init(void);

/* USER CODE BEGIN Prototypes */

/* USER CODE END Prototypes */

#ifdef __cplusplus
}
#endif

main.c

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "exti.h"
#include "i2c.h"

u8 read = 0;
u8 write[8] = { 
        0x56,0x57,0x58,0x59,0x60,0x61,0x62,0x63};

#define AM2320_ADDRESS 0xB8
    
uint8_t IIC_TX_Buffer[]={ 
        0x03,0x00,0x04}; 
uint8_t IIC_RX_Buffer[12]; 
int16_t pTemperature;
uint16_t pHumidity;


void dataPrint(double a, double b)
{ 
        
    printf("humidity : %.1f Temp:%.1f\n\r", a,b);
    printf("\n\r");
}

	
int main(void)
{ 
        
    HAL_Init();                    	   
    Stm32_Clock_Init(RCC_PLL_MUL9);   
	delay_init(72);               	
	uart_init(115200);					
	LED_Init();							
	KEY_Init();							
	EXTI_Init();
	MX_I2C1_Init();
	//HAL_I2C_Mem_Write(&hi2c1,0xA0,248,I2C_MEMADD_SIZE_8BIT,write,8,1000);
	//delay_ms(5);
	//HAL_I2C_Mem_Read(&hi2c1,0xA1,255,I2C_MEMADD_SIZE_8BIT,&read,1,100);
	
	//HAL_I2C_Mem_Write(&hi2c1,0xa0,254,I2C_MEMADD_SIZE_8BIT,&write,8,100);
	
	//HAL_I2C_Mem_Read(&hi2c1,0xA1,254,I2C_MEMADD_SIZE_8BIT,&read,8,100);
	HAL_I2C_Master_Transmit(&hi2c1,AM2320_ADDRESS,0,0,10); //唤醒
    delay_ms(3);
    //写温度 湿度指令,对照规格书
	HAL_I2C_Master_Transmit(&hi2c1,AM2320_ADDRESS,IIC_TX_Buffer,3,10);
	delay_ms(3);
	//读温湿度
	HAL_I2C_Master_Receive(&hi2c1,AM2320_ADDRESS,IIC_RX_Buffer,8,10);
		
	//根据规格书计算温湿度值
    pHumidity  =((IIC_RX_Buffer[2] << 8) | IIC_RX_Buffer[3] )/10.0;
    pTemperature =((IIC_RX_Buffer[4] << 8) | IIC_RX_Buffer[5])/10.0;	
  
    while(1)
    { 
        
        delay_ms(1000);    
       //打印 
		dataPrint(pHumidity,pTemperature);
	}
}

其他初始化,找个正点原子的hal库模板工程就行了。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章