@安小芯 论坛给了个评测N32G430开发板的机会,正好手上有高精度的SHT30温湿度传感器,IIc接口的传感器,想起来用下N32G430的硬件iic操作一下。硬件连接方式,我用的i2c1,PB6和Pb7引脚。
配置时钟gpio时钟,和i2c1的时钟。
RCC_APB1_Peripheral_Clock_Enable(RCC_APB1_PERIPH_I2C1);
RCC_AHB_Peripheral_Clock_Enable(RCC_AHB_PERIPH_GPIOB);
我们首先要配置i2c1的gpio口,
GPIO_Structure_Initialize(&i2c1_gpio); //sht30 /*PB6 -- SCL; PB7 -- SDA*/
i2c1_gpio.Pin = I2Cx_SCL_PIN | I2Cx_SDA_PIN;
i2c1_gpio.GPIO_Slew_Rate = GPIO_SLEW_RATE_FAST;
i2c1_gpio.GPIO_Mode = GPIO_MODE_AF_OD;
i2c1_gpio.GPIO_Alternate = GPIO_AF_I2C;
i2c1_gpio.GPIO_Pull = GPIO_PULL_UP;
GPIO_Peripheral_Initialize(GPIOx, &i2c1_gpio);
其次,要配置i2c1的具体参数
I2C_Initializes_Structure(&i2c1_master);
i2c1_master.BusMode = I2C_BUSMODE_I2C;
i2c1_master.DutyCycle = I2C_SMDUTYCYCLE_1;
i2c1_master.OwnAddr1 = 0x44; // sht30 addr
i2c1_master.AckEnable = I2C_ACKEN;
i2c1_master.AddrMode = I2C_ADDR_MODE_7BIT;
i2c1_master.ClkSpeed = CLK_SPEED_400K;
我们设置主模式,速率400Kbps,sht30的iic物理地址0x44,这个是根据传感器实际电路决定的。
初始化后,这样G430的硬件iic就可以操作了,我们通过官方提供好的库函数可以向sht30发送数据和命令。按照手册操作即可。
SHT30_Reset(); 复位sht30.
SHT30_Send_Cmd(HIGH_1_CMD); 0x2130
然后我们在while中1秒读取一次数据,数据读出,首先进行crc校验,校验ok,进行数据转换,通过串口发送到电脑,如图所示。
|