第14周---温湿度传感器采集
第14周---溫濕度傳感器采集
- 實驗目的
- “軟件I2C”和“硬件I2C”
- 溫濕度數據采集
實驗目的
1)解釋什么是“軟件I2C”和“硬件I2C”? (閱讀野火配套教材的第23章“I2C–讀寫EEPROM”原理章節)
2)閱讀AHT20數據手冊,編程實現:每隔2秒鐘采集一次溫濕度數據,并通過串口發送到上位機(win10)。
安裝 Ardunio IDE 和相關軟件支持庫,在Ardunio 完成STM32板子的串口通信程序:1)持續向串口輸出“Hello world!”;2)當接收到“stop!”時,停止輸出。
大概是受到Ardunio IDE的啟發,網上有一個國人版的MCU集成開發平臺, stduino IDE(http://www.stduino.com/pindex.php),請試玩之,然后談一下體會,比如:已經有了Keil、Ardunio,覺得是否還有必要“再造車輪”?
“軟件I2C”和“硬件I2C”
I2C 通訊協議(Inter-Integrated Circuit)是由 Phiilps 公司開發的,由于它引腳少,硬件實
現簡單,可擴展性強,不需要 USART、CAN 等通訊協議的外部收發設備,現在被廣泛地
使用在系統內多個集成電路(IC)間的通訊。
在計算機科學里,大部分復雜的問題都可以通過分層來簡化。如芯片被分為內核層和
片上外設;STM32 標準庫則是在寄存器與用戶代碼之間的軟件層。對于通訊協議,我們也
以分層的方式來理解,最基本的是把它分為物理層和協議層。物理層規定通訊系統中具有
機械、電子功能部分的特性,確保原始數據在物理媒體的傳輸。協議層主要規定通訊邏輯,
統一收發雙方的數據打包、解包標準。簡單來說物理層規定我們用嘴巴還是用肢體來交流,
協議層則規定我們用中文還是英文來交流。
1、軟件I2C
將芯片的兩個GPIO引腳分別用作SCL及SDA,按照I2C的時序要求,直接控制引腳的輸出信號(若是接收數據時則讀取 SDA 電平),就可以實現I2C通訊。由于是直接控制GPIO引腳的高低電平產生通訊時序,需要由CPU控制每個時刻的引腳狀態,所以稱為“軟件模擬協議”方式即軟件I2C方式。
2、硬件I2C
硬件I2C對應芯片上的I2C外設,具有相應的I2C驅動電路,其所使用的I2C管腳也是專用的,因而效率要遠高于軟件模擬的I2C,但是程序較為繁瑣。硬件I2C是直接調用內部寄存器進行配置。
對于硬件I2C來說,它需要I2C片上外設專門負責實現I2C通訊協議,只要配置好該外設,它就會自動根據協議要求產生I2C的通訊信號,收發數據并緩存起來,CPU只要檢測該外設的狀態和訪問數據寄存器,就能完成數據收發。這種由硬件外設處理I2C協議的方式減輕了CPU的工作負擔,并且使軟件開發更簡單。
溫濕度數據采集
數據采集的程序我使用的是野火的模板,相關代碼如下:
#include "led.h" #include "usart.h" #include "temhum.h"int main(void){ u32 CT_data[2]={0};volatile float hum=0,tem=0; delay_init(); //延時函數初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級uart_init(115200); //串口初始化為115200LED_Init(); //LED端口初始化temphum_init(); //ATH20初始化 while(1){AHT20_Read_CTdata(CT_data); //不經過CRC校驗,直接讀取AHT20的溫度和濕度數據 hum = CT_data[0]*100*10/1024/1024; //計算得到濕度值(放大了10倍)tem = CT_data[1]*200*10/1024/1024-500;//計算得到溫度值(放大了10倍)printf("濕度:%.1f%%\r\n",(hum/10));printf("溫度:%.1f度\r\n",(tem/10));printf("\r\n");//延時2s,LED閃爍提示串口發送狀態LED=0;delay_ms(1000);LED=1;delay_ms(1000);}}燒錄程序之后的結果:
總結
以上是生活随笔為你收集整理的第14周---温湿度传感器采集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 清华大学912计算机考研真题,2021清
- 下一篇: [杀形态验证]3D准确率达98