3行代码实现单片机IIc通信

197 阅读2分钟

文章目录

前言

shineblink core 开发板(简称Core)的库函数支持IIc通信功能,所以只需要调用两三个API,即可实现IIc通信功能。

PS:Core 仅用五、六行代码即可实现Wifi/Ble/NB/Lora/ThreadMesh/RFID/Eth/Usb/RS485/RS232通信、以及30多种传感器/10多种硬件外设/10多种Mcu内设功能,并且这些功能最多可以 5 种随机组合同时运行。更多关于Core的内容可以在 shineblink.com 上了解。

在这里插入图片描述
在这里插入图片描述

一、实现功能

Core提供IIC0和IIC1两个同步串行口,分别对应管脚(SLC0,SDA0)和(SCL1,SDA1)。本例程通过利用LIB_IIC0Config,LIB_IIC0Write,LIB_IIC0Read这三个库函数,在IIC0口上实现了对SHT3x温湿度传感器的初始化,和读写功能,以达到读取温湿度功能。

本例只是为了展示Core提供的IIC库函数的使用方法,其实Core已经为SHT3x传感器提供了更易用更高效的库函数,详细使用范例请见此处。Core提供IIC库的意义在于方便您将更多其他的不在Core库范围内的传感器或电子器件集成进来,如果Core库已有,还是尽量使用库函数会更高效一些。

二、接线图

在这里插入图片描述

三、完整代码

--配置print函数直接输出到电脑串口终端上
LIB_UsbConfig("CDC")
--定义一个数组
command = {}
--配置IIC0以400Khz的频率开始工作
LIB_IIC0Config("400K")
--配置sht30 ,写入命令0x2737,转换精度为High,每秒出10次数
command[1] = 0x27
command[2] = 0x37
LIB_IIC0Write(0x44, command)
--开始大循环
while(GC(1) == true)
do
	LIB_DelayMs(300)
	
	print("Start measure\r\n")
	--写入fetch命令 0xE000
	command[1] = 0xE0
	command[2] = 0x00
	LIB_IIC0Write(0x44, command)
	--读取sht30温湿度
	result,data = LIB_IIC0Read(0x44,6)
    --通过读取到的6个字节数据,计算出温湿度
	if result == 1 then
		ST = data[1]*256
		ST = ST + data[2]
		SRH = data[4]*256
		SRH = SRH + data[5]
		temprature = -45.0 + (175.0 * (ST / 65535.0))
		humidity = 100.0 * (SRH / 65535.0)
		print(string.format("temprature:%.2f\r\nhumidity:%.2f", temprature, humidity))
	end
end

如果感兴趣,上面代码中出现的LIB开头的库函数可以在API文档中通过Ctrl+F查询。

四、代码运行效果

在这里插入图片描述