
不用開發板學習STM32

? 溫度傳感器
DS18B20實驗
1
實驗環境介紹

? 實驗環境
本次實驗是通過Proteus+MDK一起模擬完成的。Proteus模擬實際電路,MDK編譯代碼。Proteus版本是8.13,MDK版本是5.21。需要注意的是,Proteus需要安裝8.8以上版本,器件庫里面要支持STM32F103R8。
? 實驗目的
??? 1.讀取DS18B20的數值轉換成溫度,正負值都能讀?。?br>
??? 2.OLED12864屏幕顯示當前溫度,上限閾值,下限閾值;
??? 3.可通過按鍵調節溫度上下限閾值;
??? 4.溫度超過范圍紅色LED亮起報警,在范圍內綠色LED亮起。

2
硬件電路


Proteus電路
??主控:
STM32F103R8(之前用的是C6,但是覺得IO少了點改成了R8,本質上只有Flash和SRAM大小的區別,所以沒有必要糾結)
??時鐘:
沒有用外部晶振,因為Proteus只支持一種時鐘樹,所以這里采用內部晶振,做實驗夠了,倍頻后是48M。
??復位電路:
復位電路直接去掉了,因為不是實際電路,在仿真環境中感覺作用不大,還占地方。
? IO說明:
OLED的I2C通信SCL-PB12,SDA-PB13;
DS18B20的1-wrie的IO-PA11;
RED-LED-PB0,GREEN-LED-PB1;
串口用來調試PA9和PA10;
上限設置按鍵-PC0,下限設置按鍵PC1。

3
代碼概述


MDK代碼目錄結構
? 代碼目錄概述:
APP文件夾:主要包含應用函數的.C文件。
BSP文件夾:主要包含底層硬件驅動的.C文件。
MDK-ARM文件夾:主要包含STM32的啟動的.S文件。
StdPeriph_Driver文件夾:主要包含ST官方提供的標準外設驅動.C文件(不是HAL庫哦)。
CMSIS文件夾:系統內核配置文件,標準庫自帶的。
??代碼內容概述:
↓↓↓ 主要貼一下DS18B20的代碼:
↓↓↓復位函數,reset?ds18b20
DS18B20_IO_OUT_Pin_11();?//SET?PA11?OUTPUTDS18B20_DQ_OUT_Pin_11(0);?//拉低PA11Delay_DS18B20_1us(750);????//延時750usDS18B20_DQ_OUT_Pin_11(1);?//拉高PA11Delay_DS18B20_1us(15); //15US
↓↓↓ 檢測函數,檢測總線上有沒有 ds18b20:
u8 retry=0;DS18B20_IO_IN_Pin_11();//SET PA0 INPUTwhile (DS18B20_DQ_IN_Pin_11&&retry<200){retry++;Delay_DS18B20_1us(1);};if(retry>=200)return 1;else retry=0;while (!DS18B20_DQ_IN_Pin_11&&retry<240){retry++;Delay_DS18B20_1us(1);};if(retry>=240)return 1;return 0;
↓↓↓?讀數值函數,讀ds18b20返回的溫度:
↓↓↓讀1bit
u8 data;DS18B20_IO_OUT_Pin_11();//SET?PA0?OUTPUTDS18B20_DQ_OUT_Pin_11(0);?Delay_DS18B20_1us(2);DS18B20_DQ_OUT_Pin_11(1);?DS18B20_IO_IN_Pin_11();//SET?PA0?INPUTDelay_DS18B20_1us(12);if(DS18B20_DQ_IN_Pin_11)data=1;else data=0;Delay_DS18B20_1us(50);?return?data;
↓↓↓讀1byte
u8 i,j,dat;dat=0;=1;i<=8;i++)?{j=DS18B20_Read_Bit_Pin_11();dat=(j<<7)|(dat>>1);???}????????????????return?dat;
↓↓↓寫1byte
u8 j;u8?testb;DS18B20_IO_OUT_Pin_11();//SET?PA0?OUTPUT;=1;j<=8;j++)?{testb=dat&0x01;dat=dat>>1;if (testb){Write 1DS18B20_DQ_OUT_Pin_11(1);}else{Write 0DS18B20_DQ_OUT_Pin_11(1);????????}}
↓↓↓ 更詳細代碼及工程文件,公眾號回復關鍵字就能獲?。。?/strong>

4
實驗結果展示


實驗實際效果

實驗實際效果
開機經過初始化以后,顯示歡迎界面以及當前的溫度,默認上限溫度是10℃,下限溫度是-10℃;
按下上下限設置溫度設置按鍵后,界面切換到設置按鍵,按一下上限+1,下限-1。









AD封裝系列




不用開發板學習STM32系列




必看必讀系列




經典PPT系列


電子元器件基礎普及系列


趣味試用系列


PCB知識庫系列

點在看,鼓勵一下小編!