2020-12-22

一、硬件 I2C 和 软件(模拟) I2C

硬件I2C:对应芯片上的I2C外设,有相应I2C驱动电路,它所使用的I2C管脚也是专用的,效率是远高于软件模拟的I2C,较为稳定,但程序较复杂。硬件I2C是直接调用内部寄存器进行配置;软件I2C并没有寄存器。
软件I2C:一般是使用GPIO管脚,用软件控制SCL,SDA线输出高低电平,模拟I2C协议的时序。
主要对比

  1. 硬件IIC用法比较复杂,模拟IIC的流程更清楚一些。
  2. 硬件IIC速度比模拟快,并且可以用DMA
  3. 模拟IIC可以在任何管脚上,而硬件只能在固定管脚上。

二、使用AHT20温湿度传感器的数据采集

实验器材

  1. AHT20温湿度传感器
  2. stm32F103单片机 野火指南者
    实验目的
    每隔两秒实现一次温度采集,并通过串口发送到上位机。

① 工程模板

实验采用的工程模板是正点原子stm32f103精英开发板A盘中的IIC实验

② 移值 AHT20 驱动

AHT20 Demo
在这里插入图片描述
主要代码
① 修改模拟I2C的GPIO引脚

因为野火指南者的USART1串口要使用GPIOA的时钟,板载LED灯要使用GPIOB时钟,而原子的I2C实验使用的正是GPIOB时钟,当使用板载LED灯时将会发生冲突。根据自己的实际情况而定,可能你使用的单片机没有这种影响,修改GPIO引脚如下
在这里插入图片描述
将 myiic.h 的 “GPIOB 修改为 GPIOC;PBout/PBin 修改为 PCout/Pcin”,myiic.c 的 IIC_Init 函数 中的 “GPIOB 修改为 GPIOC”
保留 AHT20 Demo中的如下函数
在这里插入图片描述
TempHum_init函数

/**************************************************
			初始化温湿度传感器
**************************************************/
void TempHum_init()
{
	delay_ms(40);//刚上电,延时40ms才可以读取状态
	
    //首先发0x71读取状态字bit[3],如果=1,为校准输出,无须初始化!!!正常情况下读回来的状态是0x1C或者是0x18,读回来是0x80表示忙状态;
	if(!((AHT20_Read_Status()&0x08)==0x08))
	{
        AHT20_Init(); //初始化AHT20 
	}
}

main.c

#include "stm32f10x.h"
#include "bsp_usart.h"
#include "delay.h"
#include "bsp_aht20.h"
#include "bsp_led.h"


int main(void)
{
	u32 CT_data[2]={0};
    volatile float  hum=0,temp=0;     
     
	USART_Config();			//USART1初始化
	LED_GPIO_Config();		//LED端口初始化
    delay_init();	    	//延时函数初始化	  
    TempHum_init();         //初始化温湿度传感器
	
	while(1)
	{
        AHT20_Read_CTdata(CT_data);       //不经过CRC校验,直接读取AHT20的温度和湿度数据 

        hum = CT_data[0]*100*10/1024/1024;  //计算得到湿度值(放大了10倍)
        temp = CT_data[1]*200*10/1024/1024-500;//计算得到温度值(放大了10倍)

        printf("湿度:%.1f%%\r\n",(hum/10));
        printf("温度:%.1f度\r\n",(temp/10));
        printf("\r\n");
        
        /*绿灯闪烁提示串口发送状态*/
        green_led_on;
        delay_ms(1000);
		green_led_off;
        delay_ms(1000);
	 }
}

效果显示

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值