国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

用STM32手搓一個(gè)體溫計(jì)

這篇具有很好參考價(jià)值的文章主要介紹了用STM32手搓一個(gè)體溫計(jì)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前言

市面上大多額溫計(jì)、測(cè)溫計(jì)精度偏差太大。

而水銀溫度計(jì),等待時(shí)間又太久。

因此就產(chǎn)生了用STM32自己做一個(gè)——精度高、便宜、測(cè)速快?產(chǎn)品級(jí)?溫度儀/體溫計(jì)的想法。

用STM32手搓一個(gè)體溫計(jì),c++

01

這個(gè)溫度儀的亮點(diǎn)?

1精度高,誤差小于0.1度

2帶有顯示屏,可實(shí)時(shí)查看測(cè)溫?cái)?shù)據(jù)

3支持藍(lán)牙傳輸,支持BLE和SPP

4可直接用手機(jī)或電腦接收溫度數(shù)據(jù)

5可以DIY設(shè)置報(bào)警功能,方便看護(hù)兒童時(shí),不知道什么時(shí)候又溫度升高了,都不敢打個(gè)盹

6運(yùn)行時(shí)間長(zhǎng),可以連續(xù)使用12個(gè)小時(shí)以上

7解決?兒童生病時(shí)不愿意配合量體溫,以及腋下量體溫時(shí),不能實(shí)時(shí)了解發(fā)燒情況

那如何通過(guò)【硬件、外型、軟件設(shè)計(jì)】實(shí)現(xiàn)出這樣一個(gè)產(chǎn)品級(jí)的體溫計(jì)呢?一起來(lái)看看!

02

硬件設(shè)計(jì)

用STM32手搓一個(gè)體溫計(jì),c++

系統(tǒng)框圖

用STM32手搓一個(gè)體溫計(jì),c++

原理圖

用STM32手搓一個(gè)體溫計(jì),c++

PCB

下面就將電路拆分為5個(gè)部分,一 一分析一下電路原理。

01

電源部分

充放電芯片采用TP4057,該芯片便宜,支持升壓,確保系統(tǒng)供電穩(wěn)定。

這里通過(guò)Type-C給產(chǎn)品充電。

由于系統(tǒng)采用3.3V供電,因此用LDO進(jìn)行電壓轉(zhuǎn)換。

用STM32手搓一個(gè)體溫計(jì),c++

其鋰電池采用200ma容量,規(guī)格如下:

用STM32手搓一個(gè)體溫計(jì),c++

連接方式是焊接,預(yù)留了2.54排針,方便調(diào)試。

用STM32手搓一個(gè)體溫計(jì),c++

Type-C選擇了microUSB。

用STM32手搓一個(gè)體溫計(jì),c++

02主控部分

系統(tǒng)主控采用stm32f030c8t6。

用STM32手搓一個(gè)體溫計(jì),c++

該主控可實(shí)現(xiàn)以下功能:

  • ADC采集,也就是檢測(cè)鋰電池電量;

  • 串口通信,控制藍(lán)牙芯片,進(jìn)行數(shù)據(jù)發(fā)送;

  • IIC通信,控制溫度傳感器,配置以及初始化,最重要的是讀取溫度

  • IIC通信,顯示電量、藍(lán)牙連接狀、實(shí)時(shí)溫度、測(cè)量時(shí)長(zhǎng)。

  • 其它可擴(kuò)展功能

03藍(lán)牙部分

這里采用KT6368A設(shè)計(jì)。

該芯片支持雙模,具體規(guī)格如下:

用STM32手搓一個(gè)體溫計(jì),c++

PS:為了降低功耗建議使用KT6328A,但是這個(gè)只支持BLE哦。

相關(guān)原理圖如下所示:

用STM32手搓一個(gè)體溫計(jì),c++

04顯示部分

自己采用了0.91寸的OLED模塊,只有4個(gè)管腳,如下所示:

用STM32手搓一個(gè)體溫計(jì),c++

我用的是白光的,我試了藍(lán)光的也挺好的,這個(gè)看個(gè)人喜好了。

用STM32手搓一個(gè)體溫計(jì),c++

05溫度傳感器

溫度傳感器在本項(xiàng)目中,無(wú)疑是很重要的存在。

MTS4和T117是我能找到的最具性價(jià)比的芯片,精度高且便宜。

T117參數(shù):

用STM32手搓一個(gè)體溫計(jì),c++

  • 超低溫至-103℃測(cè)溫!

  • 測(cè)溫精度±0.1℃@+28~+43℃

  • I2C/單總線數(shù)字輸出

  • 分辨率16位/0.004℃

  • 測(cè)溫最快2.2ms可配置

  • 支持4路I2C通信地址;

  • 超低功耗2μA@1HZ

  • 1.8V~5.5V寬電壓供電

  • 2*2*0.75mm小尺寸

  • DFN6L封裝

  • 內(nèi)置112bit EEPROM用戶空間。

MTS4參數(shù):

用STM32手搓一個(gè)體溫計(jì),c++

  • I2C協(xié)議數(shù)字輸出

  • 可同時(shí)兼容數(shù)字單總線

  • 測(cè)溫精度±0.1℃@+28℃~+43℃

  • 16位輸出0.004℃

  • 測(cè)溫速度15.3ms/8.5ms/5.2ms/2.2ms可配置

  • 超低功耗3.1μA(AVG=16,1次測(cè)量/s)

  • 1.6x1.2x0.55mm超小尺寸

  • DFN4L封裝

  • 內(nèi)置112bit EEPROM用戶空間

對(duì)應(yīng)原理圖:

用STM32手搓一個(gè)體溫計(jì),c++

06PCB部分

PCB采用4層板設(shè)計(jì),板厚1.6mm。為了能打免費(fèi)PCB,整體長(zhǎng)度設(shè)計(jì)在10cm以內(nèi)。

這里的裝配孔是m3,建議可以m2。

用STM32手搓一個(gè)體溫計(jì),c++

03

外型設(shè)計(jì)

外型我做了3D外殼和面板。

01

外殼部分

3D外殼使用嘉立創(chuàng)EDA設(shè)計(jì)。

由于我是個(gè)新手,所以設(shè)計(jì)的比較簡(jiǎn)單。

用STM32手搓一個(gè)體溫計(jì),c++

實(shí)物是這樣子:

用STM32手搓一個(gè)體溫計(jì),c++

02

面板部分

這個(gè)也是采用嘉立創(chuàng)EDA設(shè)計(jì)的,為了省錢。

*因?yàn)橛泻芏辔恢眯枰?jì)算,所以這里有個(gè)技巧,可以先導(dǎo)出PCB的DXF,方便定位。

做了很多顏色,實(shí)現(xiàn)3D外殼和面板自由了。

設(shè)計(jì)如下:

用STM32手搓一個(gè)體溫計(jì),c++

實(shí)物如下:

用STM32手搓一個(gè)體溫計(jì),c++

04

程序設(shè)計(jì)

”01

開(kāi)發(fā)工具和環(huán)境

采用CubeMXKeil5結(jié)合的方式,使用C語(yǔ)言進(jìn)行開(kāi)發(fā)。

02程序設(shè)計(jì)思路

1電量采樣通過(guò)timer+DMA+DAC進(jìn)行數(shù)據(jù)采集,timer定時(shí)2S,為啥2秒,降低功耗。

之前1s感覺(jué)刷新有點(diǎn)快。

2檢測(cè)藍(lán)牙是否連接,讀取PA1管腳狀態(tài),若連接顯示器顯示OK,否則是NO。

3每?jī)擅胱x取一次溫度,根據(jù)狀態(tài)寄存器進(jìn)行判別是否溫度轉(zhuǎn)換完成。

4

OLED顯示2s更新一次。

效果如下圖所示:

用STM32手搓一個(gè)體溫計(jì),c++

03

溫度傳感器驅(qū)動(dòng)

目前只焊接成功了T117芯片,這里給大家展示一下這個(gè)驅(qū)動(dòng)的編寫(xiě),如下所示。

這里是頭文件

C++
#ifndef __SENSER_H#define __SENSER_H
#include "stm32f0xx_hal.h"
typedef enum{//Temp_Cmd//測(cè)溫模式CONTI_CONVERT = 0x00, //連續(xù)測(cè)量溫度STOP_CONVERT = 0x40, //停止測(cè)量溫度SINGLE_CONVERT = 0xc0, //單次測(cè)量溫度//加熱模式OFF_HEATING = 0xf0, //低位清0,加熱關(guān)閉ON_HEATING = 0x0A, //加熱開(kāi)啟
//Temp_Cfg//測(cè)溫頻率FRE_8times = 0x00, //每秒8次FRE_4times = 0x20, //每秒4次FRE_2times = 0x40, //每秒2次FRE_1times = 0x60, //每秒1次
FRE_2s = 0x80, //每2秒1次FRE_4s = 0xa0, //每4秒1次FRE_8s = 0xc0, //每8秒1次FRE_16s = 0xe0, //每16秒1次//平均次數(shù)AVG_1 = 0xe7, //位清0,轉(zhuǎn)換時(shí)間2.1msAVG_8 = 0x08, //轉(zhuǎn)換時(shí)間5.2msAVG_16 = 0x10, //轉(zhuǎn)換時(shí)間8.5msAVG_32 = 0x18, //轉(zhuǎn)換時(shí)間15.3ms//低功耗模式OFF_PD = 0xfe, //位清0,不進(jìn)入低功耗模式ON_PD = 0x01, //進(jìn)入低功耗模式
//EE_CmdEE_DOWN = 0xb6, //裝載EE值到寄存器EE_COPY = 0x08, //將寄存器中數(shù)值保存到EE中EE_RESET = 0x6a, //軟復(fù)位,裝載EE值到寄存器,與EE對(duì)應(yīng)的部分,寄存器值恢復(fù)到EE保存值,不與EE對(duì)應(yīng)的部分,寄存器值恢復(fù)到默認(rèn)值
//Alert_Mode//報(bào)警開(kāi)關(guān)OFF_ALERT = 0x00, //清0,報(bào)警關(guān)ON_ALERT = 0x80, //報(bào)警開(kāi)//ModeTL_CLEAR = 0xbf, //位清0,TL為報(bào)警清除門限閾值TL_ALERT = 0x40, //TL為報(bào)警門限下閾值//極性ALERT_LO = 0xdf, //位清0,低電平有效ALERT_HI = 0x20, //高電平有效//報(bào)警端口模式選擇ALERT_IO = 0xef, //位清0,用作溫度報(bào)警CONVERT_FINI = 0x10, //用作測(cè)溫完成標(biāo)志} I2C_CMD;

typedef enum{Temp_lsb = 0x00, //Temp_msb = 0x01, //Crc_temp = 0x02, //Status = 0x03, //Temp_Cmd = 0x04, //默認(rèn)值0x40:停止測(cè)量,不加熱Temp_Cfg = 0x05, //默認(rèn)值0x69:每秒1次,AVG_8,進(jìn)入低功耗Alert_Mode = 0x06, //默認(rèn)值0x00:報(bào)警關(guān),報(bào)警模式為TL解除報(bào)警,報(bào)警低電平有效,標(biāo)志位表示溫度報(bào)警Th_lsb = 0x07,Th_msb = 0x08,Tl_lsb = 0x09,Tl_msb = 0x0A,Crc_scratch = 0x0B,EE_Cmd = 0x17, //默認(rèn)值0x00:無(wú)操作Romcode1 = 0x18,Romcode2 = 0x19,Romcode3 = 0x1A,Romcode4 = 0x1B,Romcode5 = 0x1C,Romcode6 = 0x1D,Romcode7 = 0x1E,crc_romcode = 0x1F,} REG;
void T117_Init(void);uint8_t T117_ID(void);//獲取IDuint8_t T117_R_REG(uint8_t REG,uint8_t *DAT);//讀寄存器uint8_t T117_W_REG(uint8_t REG,uint8_t DAT);//寫(xiě)寄存器uint8_t T117_R_TEMP(float *DAT); //讀溫度#endif

這里是C文件

???????文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-833638.html

C++
#include "SENSOR.h"#include "myiic.h"
#define T117_WADD 0x80#define T117_RADD 0x81
//測(cè)溫指令寄存器(Temp_Cmd),地址 0x04//#define Temp_Cmd 0x04
//配置寄存器(Temp_Cfg),地址 0x05//#define Temp_Cfg 0x05
//狀態(tài)寄存器(Status),地址 0x03//#define Status 0x03/*位 內(nèi)容描述 默認(rèn)數(shù)值7 溫度高線報(bào)警跟蹤 0:溫度報(bào)警未觸發(fā) 1:溫度報(bào)警觸發(fā) ‘0’6 溫度低線報(bào)警跟蹤 0:溫度報(bào)警未觸發(fā) 1:溫度報(bào)警觸發(fā) ‘0’5 溫度轉(zhuǎn)換狀態(tài) 0:溫度轉(zhuǎn)換完成 1:溫度轉(zhuǎn)換過(guò)程中 ‘0’4 E2PROM 狀態(tài) 0:未處于讀寫(xiě)狀態(tài) 1:處于讀寫(xiě)狀態(tài) ‘0’3 加熱狀態(tài) 0:未處于加熱狀態(tài) 1:處于加熱狀態(tài) ‘0’2 溫度報(bào)警錯(cuò)誤提示 0:TH 大于 TL 1:TH 小于等于 TL ‘0’1:0 預(yù)留 ‘00’*/
//報(bào)警模式寄存器(Alert_Mode),地址 0x06//#define Alert_Mode 0x06
/*位 內(nèi)容描述 默認(rèn)數(shù)值7 報(bào)警功能開(kāi)關(guān)(Alert_en)0:關(guān)閉1:開(kāi)啟 ‘0’6 報(bào)警模式(IM)選擇0:高于 TH 報(bào)警+低于 TL 解除報(bào)警1:高于 TH 報(bào)警+低于 TL 報(bào)警 ‘0’5 報(bào)警極性(POL)選擇0:低有效1:高有效 ‘0’4 報(bào)警端口輸出模式(FUNC)選擇0:輸出溫度報(bào)警標(biāo)志位1:輸出測(cè)溫完成標(biāo)志位 ‘0’3:0 預(yù)留 ‘0000’
*/

void T117_Init(void){
T117_W_REG(Temp_Cmd,0x00);//連續(xù)測(cè)溫不加熱
T117_W_REG(Temp_Cfg,0x99);//每秒0.5次,32次平均,進(jìn)入低功耗
T117_W_REG(Alert_Mode,0x10);//不報(bào)警,輸出測(cè)溫完成標(biāo)志位}

uint8_t T117_ID(void) //獲取ID{uint8_t temp=0;IIC2_Start();IIC2_Send_Byte(T117_WADD);temp=IIC2_Wait_Ack();if(temp) {IIC2_Stop();return 1;}IIC2_Send_Byte(0x19);temp=IIC2_Wait_Ack();if(temp) {IIC2_Stop();return 2;}
IIC2_ReStart();IIC2_Send_Byte(T117_RADD);temp=IIC2_Wait_Ack();if(temp) {IIC2_Stop();return 3;}temp=IIC2_Read_Byte();IIC2_NAck();IIC2_Stop();return temp;}
uint8_t T117_R_REG(uint8_t REG,uint8_t *DAT) //讀寄存器{uint8_t temp=0;IIC2_Start();IIC2_Send_Byte(T117_WADD);temp=IIC2_Wait_Ack();if(temp) {IIC2_Stop();return 1;}IIC2_Send_Byte(REG);temp=IIC2_Wait_Ack();if(temp) {IIC2_Stop();return 2;}
IIC2_ReStart();IIC2_Send_Byte(T117_RADD);temp=IIC2_Wait_Ack();if(temp) {IIC2_Stop();return 3;}*DAT=IIC2_Read_Byte();IIC2_NAck();IIC2_Stop();return 0;}
uint8_t T117_W_REG(uint8_t REG,uint8_t DAT) //寫(xiě)寄存器{uint8_t temp=0;IIC2_Start();IIC2_Send_Byte(T117_WADD);temp=IIC2_Wait_Ack();if(temp) {IIC2_Stop();return 1;}
IIC2_Send_Byte(REG);temp=IIC2_Wait_Ack();if(temp) {IIC2_Stop();return 2;}
IIC2_Send_Byte(DAT);temp=IIC2_Wait_Ack();if(temp) {IIC2_Stop();return 3;}IIC2_Stop();return 0;
}
uint8_t T117_R_TEMP(float *DAT) //讀寄存器{uint16_t rx=0;uint8_t data=0;
if(T117_R_REG(0x01,&data)) return 1;//rx = data<<8;rx = data;rx <<=8;if(T117_R_REG(0x00,&data)) return 2;rx += data;*DAT=(int16_t)rx;*DAT=25.0+(*DAT)/256.0;return 0;
}

04

藍(lán)牙驅(qū)動(dòng)

關(guān)于KT6368A的驅(qū)動(dòng)實(shí)現(xiàn),可以去梁山派的模塊移植手冊(cè)查看詳情,具體實(shí)現(xiàn)我這里就不再贅述。

手冊(cè)入口【建議收藏】:https://lceda001.feishu.cn/wiki/JNvYwEU5SiGldFkNcxncYXhZnZc

用STM32手搓一個(gè)體溫計(jì),c++

模塊移植手冊(cè)-第一部

05

OLED驅(qū)動(dòng)

這個(gè)0.91寸顯示屏,網(wǎng)上有很多移植好的,這里也不再贅述,可以去梁山派的模塊移植手冊(cè)查看詳情。

用STM32手搓一個(gè)體溫計(jì),c++

06

其它串口IIC驅(qū)動(dòng)

這個(gè)是老生常談。

串口使用的是USART2,支持printf。

IIC采用IO模擬方式,這樣不受IO位置控制了。

具體啰嗦的代碼就不這里貼了,節(jié)省空間哦,可以在開(kāi)源原文里下載源文件。

07

main函數(shù)實(shí)現(xiàn)

這里是整個(gè)實(shí)現(xiàn)方式,對(duì)應(yīng)前面的設(shè)計(jì)思路,這里包含一些中斷回調(diào)函數(shù)的實(shí)現(xiàn)。

???????

C++/* USER CODE BEGIN Header *//********************************************************************************* @file : main.c* @brief : Main program body******************************************************************************* @attention** Copyright (c) 2024 STMicroelectronics.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************//* USER CODE END Header *//* Includes ------------------------------------------------------------------*/#include "main.h"#include "adc.h"#include "dma.h"#include "tim.h"#include "usart.h"#include "gpio.h"
/* Private includes ----------------------------------------------------------*//* USER CODE BEGIN Includes */#include "oled.h"#include "bsp_KT6368A.h"#include "myiic.h"#include "SENSOR.h"#include "usart.h"/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*//* USER CODE BEGIN PTD */
/* USER CODE END PTD */
/* Private define ------------------------------------------------------------*//* USER CODE BEGIN PD */#define VOT 3.287/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*//* USER CODE BEGIN PM */
/* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */uint16_t adc_value[4]={0};uint8_t Flag=0;float temp=0,x,y,z;uint32_t second=0;uint8_t hh,mm,ss;
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/void SystemClock_Config(void);/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*//* USER CODE BEGIN 0 */
/* USER CODE END 0 */
/*** @brief The application entry point.* @retval int*/int main(void){/* USER CODE BEGIN 1 */uint8_t DAT;uint16_t len;uint8_t i=0;/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */MX_GPIO_Init();MX_DMA_Init();MX_ADC_Init();MX_TIM1_Init();MX_USART2_UART_Init();/* USER CODE BEGIN 2 */
T117_Init();OLED_Init();
HAL_Delay(2000);
//Set_SppName();HAL_Delay(1000);//Set_BLEName();HAL_Delay(1000);//Set_Power();HAL_ADC_Start_DMA(&hadc,(uint32_t *)(&(adc_value[0])),4);HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_4);




/* USER CODE END 2 */
/* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */char s[20];if(Flag){Flag=0;x=adc_value[0]/4095.0*VOT*2;if(x>=4.2){sprintf(s,"99%%");}else if(x>=4.06){sprintf(s,"90%%");}else if(x>=3.98){sprintf(s,"80%%");}else if(x>=3.92){sprintf(s,"70%%");}else if(x>=3.87){sprintf(s,"60%%");}else if(x>=3.82){sprintf(s,"50%%");}else if(x>=3.79){sprintf(s,"40%%");}else if(x>=3.77){sprintf(s,"30%%");}else if(x>=3.74){sprintf(s,"20%%");}else if(x>=3.68){sprintf(s,"10%%");}else if(x>=3.45){sprintf(s," 5%%");}else if(x>=3.33){sprintf(s," 1%%");}else{sprintf(s," 0%%");}
OLED_ShowString(0,0,s,8,1);//6*8
hh=second/3600;mm=(second%3600)/60;ss=second%60;
sprintf(s,"%02d:%02d:%02d",hh,mm,ss);OLED_ShowString(0,24,s,8,1);//6*8
// temp=adc_value[2]/4095.0*VOT;// y=25+(1.43-temp)/0.0043;// sprintf(s,"%6.3f",y);// OLED_ShowString(0,18,s,12,1);//6*8}if(T117_R_REG(0x03,&DAT)==0){if((DAT&0x20)==0){// DAT=HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4);// printf("A4:%d\r\n",DAT);// if(!(T117_R_REG(0x00,&DAT))){printf("LSB:%x\r\n",DAT);}// if(!(T117_R_REG(0x01,&DAT))){printf("MSB:%x\r\n",DAT);}DAT=T117_R_TEMP(&z);sprintf(s,"%5.2fC",z);OLED_ShowString(0,7,s,16,1);
}}
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1)){if(USART_RX_STA&0x8000){len=USART_RX_STA&0x3fff;//得到此次接收到的數(shù)據(jù)長(zhǎng)度HAL_UART_Transmit(&huart2,(uint8_t*)USART_RX_BUF,len,1000); //發(fā)送接收到的數(shù)據(jù)while(__HAL_UART_GET_FLAG(&huart2,UART_FLAG_TC)!=SET); //等待發(fā)送結(jié)束printf("\r\n\r\n");//插入換行USART_RX_STA=0;printf("\r\nLEN:%d\r\n",len);}if(DAT==0){printf("T=%5.2fC\r\n",z);}sprintf(s,"BT:OK");OLED_ShowString(18,0,s,8,1);//6*8printf("V=%6.3fV\r\n",x);printf("%02d:%02d:%02d\r\n",hh,mm,ss);

}else{sprintf(s,"BT:NO");OLED_ShowString(18,0,s,8,1);//6*8}
OLED_ShowChinese(48,0,0,16,1);OLED_ShowChinese(64,0,1,16,1);OLED_ShowChinese(80,0,2,16,1);OLED_ShowChinese(96,0,3,16,1);OLED_ShowChinese(112,0,4,16,1);//OLED_ShowChinese(48,16,5,16,1);OLED_ShowChinese(64,16,6,16,1);OLED_ShowChinese(80,16,7,16,1);OLED_ShowChinese(96,16,8,16,1);OLED_ShowChinese(112,16,9,16,1);
OLED_Refresh();HAL_Delay(2000);}/* USER CODE END 3 */}
/*** @brief System Clock Configuration* @retval None*/void SystemClock_Config(void){RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}
/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK){Error_Handler();}}
/* USER CODE BEGIN 4 */
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc){//HAL_ADC_Stop(&hadc1);//HAL_ADC_Stop_DMA(&hadc1);//HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);Flag=1;second += 2;HAL_ADC_Start_DMA(hadc,(uint32_t *)(&(adc_value[0])),4);
}
/* USER CODE END 4 */
/*** @brief This function is executed in case of error occurrence.* @retval None*/void Error_Handler(void){/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */}
#ifdef USE_FULL_ASSERT/*** @brief Reports the name of the source file and the source line number* where the assert_param error has occurred.* @param file: pointer to the source file name* @param line: assert_param error line source number* @retval None*/void assert_failed(uint8_t *file, uint32_t line){/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */}#endif /* USE_FULL_ASSERT */

到了這里,關(guān)于用STM32手搓一個(gè)體溫計(jì)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 嵌入式項(xiàng)目分享 單片機(jī)遠(yuǎn)程wifi紅外無(wú)接觸體溫測(cè)量系統(tǒng) - 物聯(lián)網(wǎng) stm32

    嵌入式項(xiàng)目分享 單片機(jī)遠(yuǎn)程wifi紅外無(wú)接觸體溫測(cè)量系統(tǒng) - 物聯(lián)網(wǎng) stm32

    ?? 這兩年開(kāi)始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長(zhǎng)自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。 為了大家能夠順利以及最少的精力通過(guò)畢設(shè),學(xué)長(zhǎng)分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)目,今天

    2024年02月20日
    瀏覽(90)
  • 通信工程畢設(shè) 基于Stm32的便攜體測(cè)儀(心率 體溫) - 單片機(jī) 嵌入式 物聯(lián)網(wǎng)

    通信工程畢設(shè) 基于Stm32的便攜體測(cè)儀(心率 體溫) - 單片機(jī) 嵌入式 物聯(lián)網(wǎng)

    ?? 這兩年開(kāi)始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長(zhǎng)自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。 為了大家能夠順利以及最少的精力通過(guò)畢設(shè),學(xué)長(zhǎng)分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)目,今天

    2024年02月20日
    瀏覽(94)
  • 【單片機(jī)畢設(shè)選題】單片機(jī)遠(yuǎn)程wifi紅外無(wú)接觸體溫測(cè)量系統(tǒng) - 物聯(lián)網(wǎng) stm32

    【單片機(jī)畢設(shè)選題】單片機(jī)遠(yuǎn)程wifi紅外無(wú)接觸體溫測(cè)量系統(tǒng) - 物聯(lián)網(wǎng) stm32

    ?? 這兩年開(kāi)始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長(zhǎng)自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。 為了大家能夠順利以及最少的精力通過(guò)畢設(shè),學(xué)長(zhǎng)分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)目,今天

    2024年02月20日
    瀏覽(24)
  • 【機(jī)器人/小車】自己動(dòng)手用ESP32手搓一個(gè)智能機(jī)器人:ESP32-CAM AI Robot(文末附完整工程源碼)

    目錄 介紹 硬件需求? 軟件需求 步驟 總結(jié) 源碼下載 ESP32-CAM是一款集成了Wi-Fi和藍(lán)牙功能的微控制器模塊,同時(shí)還集成了攝像頭接口,使其成為一個(gè)非常適合構(gòu)建智能機(jī)器人的選擇。在本項(xiàng)目中,我將向您展示如何使用ESP32-CAM模塊構(gòu)建一個(gè)

    2024年04月15日
    瀏覽(124)
  • 97、基于stm32單片機(jī)智能藥箱藥盒溫濕度體溫光照時(shí)鐘wifi手機(jī)APP監(jiān)控(程序+原理圖+PCB源文件+手機(jī)APP源碼+硬件設(shè)計(jì)資料+元器件清單等)

    97、基于stm32單片機(jī)智能藥箱藥盒溫濕度體溫光照時(shí)鐘wifi手機(jī)APP監(jiān)控(程序+原理圖+PCB源文件+手機(jī)APP源碼+硬件設(shè)計(jì)資料+元器件清單等)

    單片機(jī)類型選擇 方案一:可以使用現(xiàn)在比較主流的單片機(jī)STC89C5單片機(jī)進(jìn)行數(shù)據(jù)處理。這款單片機(jī)具有的特點(diǎn)是內(nèi)存和51的單片機(jī)相比多了4KB內(nèi)存,但是價(jià)格和51單片機(jī)一樣。并且支持?jǐn)?shù)據(jù)串行下載和調(diào)試助手。此款單片機(jī)是有ATMEL公司生產(chǎn),可用5V電壓編程,而且擦寫(xiě)時(shí)間僅需

    2024年02月13日
    瀏覽(28)
  • 記錄--ThreeJs手搓一個(gè)羅盤特效

    記錄--ThreeJs手搓一個(gè)羅盤特效

    最近在學(xué)Three.js.,對(duì)著文檔看了一周多,正好趕上碼上掘金的活動(dòng),就順便寫(xiě)了一個(gè)小demo,手搓一個(gè)羅盤特效。 先來(lái)看一下太極的實(shí)現(xiàn)方式,這里我們使用CircleGeometry,將其分解開(kāi)來(lái)可以看出是由圓形和半圓形組成 。 CircleGeometry 官網(wǎng)案例 radius 半徑 segments 分段(三角面)的數(shù)

    2024年02月03日
    瀏覽(22)
  • 【STM32】STM32CubeMX創(chuàng)建第一個(gè)工程

    【STM32】STM32CubeMX創(chuàng)建第一個(gè)工程

    STM32CubeMX是STM32Cube工具家族中的一員,從MCU/MPU選型,引腳配置,系統(tǒng)時(shí)鐘以及外設(shè)時(shí)鐘設(shè)置,到外設(shè)參數(shù)配置,中間件參數(shù)配置,它給STM32開(kāi)發(fā)者們提供了一種簡(jiǎn)單,方便,并且直觀的方式來(lái)完成這些工作。所有的配置完成后,它還可以根據(jù)所選的IDE生成對(duì)應(yīng)的工程和初始化

    2024年04月09日
    瀏覽(98)
  • unity開(kāi)發(fā)筆記#230821-手搓一個(gè)虛擬搖桿

    unity開(kāi)發(fā)筆記#230821-手搓一個(gè)虛擬搖桿

    做unity游戲時(shí),如果是做手機(jī)端則需要加一個(gè)虛擬搖桿以便玩家控制角色移動(dòng)(做pc端則直接獲取鍵值即可較方便)。原理就是用Image制作一個(gè)大圓圈住一個(gè)Image小圓,玩家拖拽小圓控制角色移動(dòng)。 中心思想是,以小圓中心為(0,0),獲取拖拽的偏移量即可。 首先將圖片資源拉入

    2024年02月12日
    瀏覽(87)
  • 【STM32】制作一個(gè)bootloader

    【STM32】制作一個(gè)bootloader

    工作環(huán)境:STM32CubeMX+Keil 相關(guān)環(huán)境準(zhǔn)備這里就不介紹了。 bootloader是什么 bootloader就是單片機(jī)啟動(dòng)時(shí)候運(yùn)行的一段小程序,這段程序負(fù)責(zé)單片機(jī)固件的更新,也就是單片機(jī)選擇性的自己給自己下載程序??梢愿?,可以不更新,更新的話,boot loader更新完程序后,跳轉(zhuǎn)到新程序

    2024年02月08日
    瀏覽(19)
  • 【ArcGIS Pro二次開(kāi)發(fā)】(45):手搓一個(gè)工具執(zhí)行進(jìn)度框

    【ArcGIS Pro二次開(kāi)發(fā)】(45):手搓一個(gè)工具執(zhí)行進(jìn)度框

    我在之前做的工具中,UI這部分基本沒(méi)怎么深入,都是直接用現(xiàn)成的控件。 其中有一個(gè)問(wèn)題比較突出,就是沒(méi)有工具執(zhí)行的進(jìn)度框提示。曾經(jīng)也用過(guò)系統(tǒng)自帶的信息提示框和進(jìn)度條,但太簡(jiǎn)陋,確實(shí)不好用。于是就想抄一個(gè)進(jìn)度框來(lái)用,自然而然想到了ArcGIS中地理工具執(zhí)行時(shí)

    2024年02月13日
    瀏覽(64)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包