最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

STM32MP157資源擴展板驅動移植篇2:擴展板空氣溫濕度傳感器控制

2021-08-13 10:58 作者:華清遠見研發(fā)中心  | 我要投稿

寫在前面:

本文章為《STM32MP157資源擴展板驅動移植篇》系列中的一篇,筆者使用的開發(fā)平臺為華清遠見FS-MP1A開發(fā)板(STM32MP157開發(fā)板)。資源擴展板是FS-MP1A開發(fā)板的擴展模塊,主要包含了10余種助主流傳感器、執(zhí)行器件、總線控制器件,非常方便項目擴展用??赏卣归_發(fā)智慧家庭、智能醫(yī)療、智能安防、工業(yè)控制、圖像識別、環(huán)境檢測等方向的10個左右綜合項目,華清遠見開發(fā)板也將配套提供所有項目的說明文檔、實驗源碼、應用程序等資料。

針對FS-MP1A開發(fā)板,除了資源擴展板驅動移植篇外,還包括其他多系列教程,包括Cortex-A7開發(fā)篇、Cortex-M4開發(fā)篇、FreeRTOS篇、Linux應用開發(fā)篇、Linux系統移植篇、Linux驅動開發(fā)篇、硬件設計篇、人工智能機器視覺篇、Qt應用編程篇、Qt綜合項目實戰(zhàn)篇等。歡迎關注,更多stm32mp157開發(fā)教程及視頻,可加技術交流Q群459754978,感謝關注。

  1. 資源擴展板介紹

硬件介紹

打開百度APP看高清圖片

資源擴展板可開發(fā)項目

擴展板空氣溫濕度傳感器控制

實驗原理

打開擴展板原理圖對照擴展板可以看到擴展板有1個溫濕度傳感器SI7006,如下圖:

由上圖可見可通過I2C總線與SI7006通信。

擴展板與底板接口對照圖

查看原理圖可知數據線I2C1_SDA、I2C1_SCL和I2C_INT1管腳對應關系如下:

查看SI7006芯片手冊確認設備七位從機地址為:0x40

實驗目的

了解溫濕度傳感器工作原理

學習I2C協議的使用方法,掌握如何利用STM32MP157A芯片控制SI7006溫濕度傳感器

實驗環(huán)境

FS-MP1A開發(fā)平臺

ST-Link仿真器

STM32CubeIDE開發(fā)軟件

PC機 XP、Window7/10 (32/64bit)

實驗步驟

打開STM32CubeIDE,配置CubeMX。

首先根據前幾章內容配置好系統時鐘與串口打印,然后對PF14、PF15引腳分別配置成I2C1_SCL與I2C1_SDA,切換到I2C1標簽,勾選給“M4”,選中“I2C”,如下圖所示。

上述為新建工程配置過程,可參考12.3.2章節(jié)進行導入已有工程,工程存放路徑【華清遠見-FS-MP1A開發(fā)資料\02-程序源碼\ARM體系結構與接口技術\Cortex-M4\8_EX_I2C_TEM】

代碼實現

由于使用的是硬件I2C,不需要自己寫程序實現I2C時序,我們需要做的僅僅是調用HAL提供的硬件I2C操作函數。其中,調用“HAL_I2C_Master_Transmit”函數發(fā)送數據,調用“HAL_I2C_Master_Receive”函數接收數據,創(chuàng)建driver_si_7006.c文件實現傳感器的控制。其代碼如下

uint8_t?SI7006_Init(void)

{

HAL_I2C_Init(&hi2c1);

SI7006_WriteByte(SI7006CMD_RESET);

HAL_Delay(50);

return?0;

}

void?SI7006_ReadDataTest(void)

{

uint16_t hum = 0, tem = 0,tem_1 = 0,tem_2 = 0;

hum = SI7006_Read_Data(SI7006CMD_RH_HOLD);

tem = SI7006_Read_Data(SI7006CMD_TEMP_HOLD);

tem = ((17572*tem)/65536 - 4685);

hum = (125*hum/65536 - 6);

tem_1 = tem/100;

tem_2 = tem%100;

printf("\r hum = %d%% \n", hum);

printf("\r tem = %d.%d\n", tem_1,tem_2);

}

uint8_t?SI7006_WriteByte(uint8_t reg)

{

uint8_t write_data = reg;

if(HAL_I2C_Master_Transmit(&hi2c1, SI7006_ADDR | SI7006_W , (uint8_t*)&write_data, 1, 300) != HAL_OK)

{

Error_Handler();

}

while?(HAL_I2C_GetState(&hi2c1) != HAL_I2C_STATE_READY);

return?0;

}

uint16_t?SI7006_ReadWord(uint8_t reg)

{

uint16_t read_data = 0;

if(HAL_I2C_Master_Transmit(&hi2c1, SI7006_ADDR | SI7006_W , (uint8_t*)&reg, 1, 300) != HAL_OK) //發(fā)送命令

{

Error_Handler();

}

while?(HAL_I2C_GetState(&hi2c1) != HAL_I2C_STATE_READY);

if(HAL_I2C_Master_Receive(&hi2c1, SI7006_ADDR | SI7006_R , (uint8_t*)&read_data, 2, 300) != HAL_OK) //接收word數據

{

Error_Handler();

}

return?read_data;

}

uint16_t?SI7006_Read_Data(uint16_t cmd)

{

uint16_t data = 0,data_low = 0,data_high = 0;

data = SI7006_ReadWord(cmd); //采集溫濕度

data_low = (data & 0xff); //進行高低字節(jié)轉換

data_high = (data >> 8) & 0xff;

data = (data_low << 8) + data_high;

return?data;

}

其中,使用“HAL_I2C_Master_Receive”接收16位數據時,由于先接收的高字節(jié)數據,然后是低字節(jié)數據,所以,在使用數據時需要進行高低字節(jié)調換。

在主函數里,先分別初始化I2C與SI7006,再調用“SI7006_ReadDataTest”函數即可以采集溫濕度傳感器數值。


STM32MP157資源擴展板驅動移植篇2:擴展板空氣溫濕度傳感器控制的評論 (共 條)

分享到微博請遵守國家法律
都兰县| 延川县| 古浪县| 福鼎市| 揭阳市| 涪陵区| 南乐县| 海门市| 阳曲县| 青河县| 涟源市| 昆山市| 郧西县| 尚义县| 邻水| 海宁市| 丰台区| 新龙县| 乐业县| 铜山县| 康乐县| 漳州市| 邢台县| 板桥市| 新乡市| 竹北市| 临西县| 民权县| 泽普县| 汤原县| 南江县| 北安市| 包头市| 东平县| 九龙县| 娄底市| 洛阳市| 叙永县| 海原县| 饶河县| 宣城市|