「超級干貨」STM32CubeMX學習教程之硬件I2C讀取光照度
使用STM32 HAL庫讀寫環境光照度傳感器(BH1750)
本文將教大家如何快速使用STM32HAL庫讀取光照度數據。
實現功能:通過App實時監測光照度數據。
五分鐘免費構建物聯網應用,立即免費體驗:
https://auth.tuya.com/?_source=7c8653b7bd61bf9239a1a6c12e52124d
一.使用STM32CubeMX創建一個新工程
1.如下圖創建一個新工程:
2.如下圖選擇自己現有的STM32開發板進行開發:
3.配置時鐘源
如果選擇使用外部高速時鐘(HSE),則需要在System Core中配置RCC;
如果使用默認內部時鐘(HSI),這一步可以略過;
下面工程我使用的是內部時鐘,因此這一步是不需要的。
4.配置串口
NUCLEO-L476RG板載ST-Link并且虛擬了一個串口,原理圖如下:
使PC的串口與USART2之間連接。(打印日志口,同時也作為程序下載口)
接下來開始如下圖配置USART2:
使用串口1和涂鴉模組WB3S通信(單片機和WB3S串口通信,采用透傳的模式),串口1配置如下圖所示:
5.配置IIC口
為了采集光照度數據(BH1750),單片機采用I2C協議和光照度模塊進行通信,采用I2C1,配置如下圖所示:
6.配置時鐘樹
STM32L4的最高主頻到80M,所以配置PLL,最后使HCLK=80Mhz即可:
7.生產工程設置
8.代碼生成設置
最后設置生成獨立的初始化文件:
9.生成代碼
點擊GENERATE CODE即可生成MDK-V5工程如下:
10.用KEIL5打開生成的代碼,然后開始添加自己要實現的功能函數。
二.BH1750驅動程序設計
1.硬件設計
BH1750 照度檢測模塊搭載一個BH1750FVI,BH1750FVI是兩線式串行總線接口(IIC)的16位數字輸出型環境光強度傳感器,利用它的高分辨率可以探測較大范圍內的光照強度變化(1lx - 65535lx)。
BH1750的實物圖如下:
BH1750的原理圖如下:
管腳介紹
名稱VCCGNDSCLSDAADDR
功能描述3~5V供電參考地IIC時鐘線IIC數據線地址線
2.軟件設計
參考BH1750FVI數據手冊進行編程。
BH1750的器件地址由ADDR端口的高低電平決定。
驅動程序底層使用 HAL 庫的 IIC 初始化文件,包含如下頭文件:
發送命令的函數如下:
接收光照強度數據的函數如下:
根據數據手冊中給出的公式,編寫將從BH1750讀出的兩個字節數據轉換為對應強度值的函數(數據轉換函數):
驅動程序設計完成之后就可以開始進行聯網功能的設計了。
三.平臺產品創建
??進入涂鴉智能IoT平臺點擊“創建產品”(點擊以下鏈接)。這里不用糾結產品品類的選擇,重點是為了拿到MCU-SDK文件,實際使用時可以根據具體的產品修改sdk內部的pid即可適配自己的產品。
auth.tuya.com/?_source=7c8653b7bd61bf9239a1a6c12e52124d
例如:點擊創建產品,選擇標準類目>電工>開關。
(當時為了測試用,所以選擇一個標準類目,也可以在平臺上選擇其它品類去創建也是可以的)
選擇自定義方案,輸入產品名稱,選擇通訊協議為WIFI+藍牙,點擊創建產品。
根據要實現的設備功能,創建好DP功能點。
創建好DP點之后,點擊設備面板,選擇自由配置面板,方便開發調試,也可以選擇其它的面板。
面板創建好之后,點擊硬件開發,對接方式選擇“涂鴉標準模組MCU SDK開發”,模組選擇WB3S Wi-Fi&Bluetooth模組(在實際開發過程中可選擇手上已有的涂鴉模組即可),固件選擇通用固件。
四.MCU SDK移植
在解壓后的文件夾中找到mcu_sdk相關源文件和頭文件,全部拷貝到我們創建好的工程模板里的MCU_SDK文件夾里;打開上面創建好的工程,將mcu_sdk的源文件添加進對應組里,同時添加include paths:
點擊編譯,會崩出幾個error,接下來就需要按照出error的地方注釋提示一步步修改代碼。
uart_receive_input()為串口接收數據處理接口,只需將它放進串口中斷即可,這里我們以串口1作為與模組通訊串口,調試中把串口2作為日志口,首先在main函數中添加串口1和串口2初始化代碼,并使能接收中斷(接收使能中斷已在串口初始化函數中體現):
然后在stm32l4xx_it.c文件中添加中斷處理函數,然后包含 mcu_api.h文件并將uart_receive_input()接口添加進去,添加完成后,刪除error注釋即可:
再來看下一個errror,由于我們上一步已經通過中斷接收的形式實現了串口數據接收處理了,這個多字節處理我們可以不用,直接把error注釋刪除即可。
下一個errror:
按照提示將該接口放在main函數的while循環內即可,別忘了在 main.c 中包含 wifi.h 頭文件。
再來看下一個error:
同樣的,按照提示將該函數放到main函數開頭部分即可。
然后是串口發送相關:
這里只需實現串口1的數據發送函數然后放進去即可。使用STM32 HAL庫里面的串口單字節發送函數,以阻塞方式發送數據量,添加代碼如下:
然后是DP數據點上報相關的:
這里我們可以直接注釋掉error提示,在實際開發過程中再實現該功能即可。
以下在主函數里面,添加光照度上報的數據。這里可以改成自己想要上報傳感器的數據。
最后是產測相關的:
一般開發者不涉及生產測試的話直接刪除注釋不用管就行。
下圖這個紅色標出的函數是進行配網的,通過NUCLEO-L476開發板上的用戶按鍵進行配網連接。
修改完上述幾處地方后,再次編譯,顯示error全部消除,至此涂鴉MCU SDK就已移植完畢,后續可使用涂鴉模組調試助手進行測試。涂鴉模組調試助手的使用方法可參考調試助手文檔。
五.實驗樣機測試展示
五分鐘免費構建物聯網應用,立即免費體驗:
https://auth.tuya.com/?_source=7c8653b7bd61bf9239a1a6c12e52124d
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。