H7-TOOL的LUA小程式教程第4期:I2C匯流排開發(2022-01-13)
LUA指令碼的好處是使用者可以根據自己註冊的一批API(當前TOOL已經提供了幾百個函式供大家使用),實現各種小程式,不再限制Flash裡面已經下載的程式,就跟手機安裝APP差不多,所以在H7-TOOL裡面被廣泛使用,支援線上除錯執行,支援離線執行。
TOOL的LUA教程爭取做到大家可以無痛呼叫各種功能函式,不需要學習成本。
可以結合這個貼下學習:
H7-TOOL示波器捕獲I2C波形操作說明(2021-12-05)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=109953
I2C匯流排基礎知識:
I2C的Start啟動訊號和Stop停止訊號波形效果:
ACK應答:
NACK無應答:
完整效果:
LUA I2C主要有下面五個函式
啟動訊號函式:
i2c_bus("start")
停止訊號函式:
i2c_bus("stop")
傳送函式:
i2c_bus("send",xxx)
形參:xxx表示要傳送的8bit數值。
返回值:返回0表示應答,返回1表示無應答。
接收函式:
i2c_bus("recive", xxx)
形參:xxx表示讀取的位元組個數。
返回值:返回的數字是字串方式的,如果要數值方式需要轉換下。
舉例說明:
接線方式:
以操作光照感測器BH1750為例,向地址寫入資料1個單位元組資料就是:
-------------I2C從機地址 ------------------------------------------- BH1750_SLAVE_ADDRESS= 0x46 --向晶片傳送1位元組長度的操作碼 --_ucOpecode 暫存器地址 function BH1750_WriteCmd(_ucOpecode) i2c_bus("start") i2c_bus("send", BH1750_SLAVE_ADDRESS) i2c_bus("send", _ucOpecode) i2c_bus("stop") end
發過個控制命令就是如下方式,使用方式和C語言基本沒什麼區別。
--修改BH1750測量模式,決定測量解析度 --__ucMode : 測量模式 值域(1,2,3) function BH1750_ChageMode(_ucMode)-- 連續高分測量模式1 if(_ucMode == 1)then BH1750_WriteCmd(BHOP_CON_H_RES) s_Mode = 1 -- 測量模式1,解析度 1 lux end -- 連續高分測量模式2 if(_ucMode == 2)then BH1750_WriteCmd(BHOP_CON_H_RES2) s_Mode = 2 -- 測量模式2, 解析度 0.5 lux end -- 連續高分測量模式3 if(_ucMode == 3)then BH1750_WriteCmd(BHOP_CON_L_RES); s_Mode = 3 -- 測量模式3,低解析度 4 lux end end
讀取就可以如下方式,裡面有個關鍵的操作就是將返回的字串轉換為實際的數值,方便操作:
-- 讀取BH1750測量結果. 主程式需要在 bsp_InitBH1750() 執行之後 180ms 才能讀到正確資料 -- 連續測量模式下,之後主程式可以定時呼叫本函式讀取光強度資料,間隔時間需要大於180ms -- 返 回 值: 原始的測量資料 ,結果未轉換 function BH1750_ReadData() local str local byte0, byte1 local w i2c_bus("start") i2c_bus("send", BH1750_SLAVE_ADDRESS + 1) -- 讀操作 str = i2c_bus("recive", 2) byte0 = tonumber(string.byte(str,1,1)) byte1 = tonumber(string.byte(str,2,2)) w = byte0 * 256 + byte1 i2c_bus("stop") return w end
拓展例子:
H7-TOOL的I2C控制器驅動18bit解析度ADC晶片MCP3421操作說明,簡單易用(2021-11-20)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=109658
H7-TOOL的I2C控制器驅動EEPROM操作說明,支援AT24C02/04/08/16/32/64/128,僅需讀寫兩個函式,隨意訪問(2021-10-24)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=109261
H7-TOOL的I2C控制器驅動光照感測器BH1750操作說明,簡單易用(2021-10-24)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=109265
H7-TOOL的I2C控制器驅動陀螺儀MPU6050操作說明,簡單易用(2021-10-24)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=109264
H7-TOOL的I2C控制器驅動氣壓感測器BM085/BM180操作說明,簡單易用(2021-10-24)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=109266