meiyao 发表于 2023-6-19 22:02

【STM32H5开发板】IIC读取湿温度

<p>开发平台:KEIL</p>

<p>开发板:STM32H5</p>

<p>目地:本篇是利用STM32H5通过IIC读取AHT10的值,并显示在OLED上。</p>

<p>1.连接方式:</p>

<p>PC2--SCL</p>

<p>PC3--SDA</p>

<p>OLED看上一个连接。</p>

<p>2、IIC时序</p>

<p></p>

<p>3.核心代码:</p>

<pre>
<code>#define AHT10_Delay_us(time)                                HAL_Delay(time)        //delay_us(time)
#define AHT10_Delay_ms(time)                                HAL_Delay(time)        //delay_ms(time)

#define AHT10_I2C_SCL_PIN                                      GPIO_PIN_2
#define AHT10_I2C_SCL_GPIO_PORT             GPIOC
#define AHT10_I2C_SCL_GPIO_RCC              __HAL_RCC_GPIOC_CLK_ENABLE()

#define AHT10_I2C_SDA_PIN                                      GPIO_PIN_3
#define AHT10_I2C_SDA_GPIO_PORT             GPIOC
#define AHT10_I2C_SDA_GPIO_RCC              __HAL_RCC_GPIOC_CLK_ENABLE()

#define AHT10_SCL_H         HAL_GPIO_WritePin(AHT10_I2C_SCL_GPIO_PORT, AHT10_I2C_SCL_PIN, GPIO_PIN_SET)   
#define AHT10_SCL_L         HAL_GPIO_WritePin(AHT10_I2C_SCL_GPIO_PORT, AHT10_I2C_SCL_PIN, GPIO_PIN_RESET)

#define AHT10_SDA_H         HAL_GPIO_WritePin(AHT10_I2C_SDA_GPIO_PORT, AHT10_I2C_SDA_PIN, GPIO_PIN_SET)
#define AHT10_SDA_L         HAL_GPIO_WritePin(AHT10_I2C_SDA_GPIO_PORT, AHT10_I2C_SDA_PIN, GPIO_PIN_RESET)
#define AHT10_READ_SDA      HAL_GPIO_ReadPin(AHT10_I2C_SDA_GPIO_PORT,AHT10_I2C_SDA_PIN)

初始化:
        AHT10_I2C_SCL_GPIO_RCC;
        AHT10_I2C_SDA_GPIO_RCC;//??GPIO??
        GPIO_InitTypeDefGPIO_InitStruct;
        GPIO_InitStruct.Mode= GPIO_MODE_OUTPUT_PP;
//GPIO_InitStruct.Pull= GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Pin = AHT10_I2C_SCL_PIN;
HAL_GPIO_Init(AHT10_I2C_SCL_GPIO_PORT, &amp;GPIO_InitStruct);
       
        GPIO_InitStruct.Mode= GPIO_MODE_OUTPUT_PP;
//GPIO_InitStruct.Pull= GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Pin = AHT10_I2C_SDA_PIN;
HAL_GPIO_Init(AHT10_I2C_SDA_GPIO_PORT, &amp;GPIO_InitStruct);
       
        AHT10_SDA_H;
        AHT10_SCL_H;


        AHT10_IIC_Init();
       
        AHT10_IIC_Start();
        AHT10_IIC_Send_Byte(AHT10_ADDRESS);
        AHT10_IIC_Send_Byte(0xe1);       
        AHT10_IIC_Send_Byte(0x08);
        AHT10_IIC_Send_Byte(0x00);
        AHT10_IIC_Stop();       
        AHT10_Delay_ms(40);//??20ms??????

                ret=AHT10ReadData(&amp;temperature,&amp;humidity);
                if(ret==0)
                {
                        GUI_ShowString(0,0,(unsigned char*)"recv temp fail!",8,1);
                }
                else
                {
                        float temp=temperature*0.1;
                        float hum=humidity*0.1;
                        //printf("temp:%2.1f,sd:%2.1f\r\n",temp,hum);
                        char print_temp;
                        char print_hum;
                        sprintf(print_temp,"temp:%2.1f du",temp);
                        sprintf(print_hum,"hum:%2.1f%%",hum);
                        GUI_ShowString(0,0,(unsigned char*)print_temp,16,1);
                        GUI_ShowString(0,2,(unsigned char*)print_hum,16,1);
                        GUI_ShowString(0,4,(unsigned char*)"hello word!",16,1);
                }</code></pre>

<p>&nbsp; 4、视频</p>

<p>8b078cc725338ee0a0307894f864c52f<br />
&nbsp;</p>

火辣西米秀 发表于 2023-6-23 20:44

<p>用STM32H5通过IIC读取AHT10的值,并显示在OLED上,这个好好跟着楼主学一下哈</p>

freebsder 发表于 2023-6-24 22:34

<p>谢谢分享,期待后续!</p>

meiyao 发表于 2023-6-25 17:47

火辣西米秀 发表于 2023-6-23 20:44
用STM32H5通过IIC读取AHT10的值,并显示在OLED上,这个好好跟着楼主学一下哈

<p>我也是摸了好几天才玩通的</p>

meiyao 发表于 2023-6-25 17:47

freebsder 发表于 2023-6-24 22:34
谢谢分享,期待后续!

<p>在进行中呢</p>
页: [1]
查看完整版本: 【STM32H5开发板】IIC读取湿温度