chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32F103驅(qū)動HCSR04超聲波測距顯示

jf_88434166 ? 來源:jf_88434166 ? 2026-04-11 16:54 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

目錄

超聲波模塊介紹

超聲波模塊在電子DIY作品中實現(xiàn)小車避障測距等方面均應(yīng)用廣泛,在大學(xué)生智能車DIY愛好者中尤為顯眼。

①實物圖

1-主圖.png

②產(chǎn)品說明

HC-SR04超聲波測距模塊可提供2cm-400cm的非接觸式距離感測功能,測距精度可達3mm,包括發(fā)射器、接收器控制電路,它是一種壓電式傳感器,利用電致伸縮現(xiàn)象而制成。

電氣參數(shù)

電氣參數(shù)HCSR04超聲波模塊
工作電壓DC5V
工作電流15mA
工作頻率40KHz
最遠射程4M
最近射程2cm
測量角度15°
輸入觸發(fā)信號10us的TTL脈沖
輸出回響信號輸出TTL電平信號,與射程成比例

④超聲波工作原理

首先我們可以看下面的一張超聲波的時序圖:
在這里插入圖片描述
圖中我們可以大致看出,要使用HCSR04這個超聲波模組,我們必須先給超聲波發(fā)送一個觸發(fā)信號,引導(dǎo)超聲波內(nèi)部循環(huán)發(fā)出8個40Khz的脈沖然后輸出回響信號引腳上拉為高電平,然后我們利用超聲波回響信號引腳的高電平所得計數(shù)時間經(jīng)過相關(guān)運算就可以得到對應(yīng)的距離,具體公式如下:
測試距離 = (高電平時間聲速(340M/S)/2)= ((float)t/58.0)
這個公式的具體換算過程,大家可以用以前學(xué)過的知識進行還算下,最后得到的距離單位是厘米。
下面放一張超聲波的引腳功能示意圖,能更好的理解HCSR04的具體使用和接線在代碼中:
在這里插入圖片描述

驅(qū)動代碼

之前寫過用51單片機驅(qū)動HCSR04在LCD1602上的驅(qū)動代碼,這篇文章我使用STM32驅(qū)動HCSR04在0.96OLED(使用人數(shù)較多并且開源初始化代碼方便移植)上面使用的驅(qū)動代碼。

①STM32配置初始化代碼

時鐘和GPIO以及中斷相關(guān)配置:

void HCSR04_Init(void)
{  
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;     //定義定時器結(jié)構(gòu)體
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
     
    //IO 初始化
    GPIO_InitStructure.GPIO_Pin = HCSR04_TRIG;       	//發(fā)送高點平引腳
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;	//推挽輸出
    GPIO_Init(HCSR04_PORT, &GPIO_InitStructure);
    GPIO_ResetBits(HCSR04_PORT,HCSR04_TRIG);
     
    GPIO_InitStructure.GPIO_Pin = HCSR04_ECHO;    	 //返回電平引腳
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;	
    GPIO_Init(HCSR04_PORT, &GPIO_InitStructure);  
    GPIO_ResetBits(HCSR04_PORT,HCSR04_ECHO);	
	 
	//定時器初始化使用基本定時器3
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);   //打開TIM3定時器時鐘

	TIM_DeInit(TIM3);
	TIM_TimeBaseStructure.TIM_Period = 65535; //(1000-1); //設(shè)置在下一個更新時間裝入活動的自動重裝載寄存器周期的值         計數(shù)到1000為1ms
	TIM_TimeBaseStructure.TIM_Prescaler =(72-1); //設(shè)置用來作為TIMx時鐘頻率除數(shù)的預(yù)分頻  1M的計時頻率 1US計數(shù)
	TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;	//不分頻
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上計數(shù)模式
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時間基數(shù)單位	 
		
	TIM_ClearFlag(TIM3, TIM_FLAG_Update);   	//清除更新中斷避免立即產(chǎn)生更新中斷
	TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);    //啟用計時器更新中斷

	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;            	//設(shè)置中斷服務(wù)
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  	//主優(yōu)先級
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;         	//次優(yōu)先級
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;        		//啟用中斷
	NVIC_Init(&NVIC_InitStructure);
	
    TIM_Cmd(TIM3,DISABLE);     
}

//定時器中斷服務(wù)程序
void TIM3_IRQHandler(void)   //TIM3中斷
{
    if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //檢查TIM更新中斷是否發(fā)生
    {
         TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  //清除TIM更新中斷標志位
         msHcCount++;
    }
}

①超聲波驅(qū)動應(yīng)用代碼

下面展示寫根據(jù)超聲波時序圖可以寫出下面的驅(qū)動代碼:

//開始計數(shù)
static void StartTimer()        //打開定時器
{
    TIM_SetCounter(TIM3,0);	//清除計數(shù)
    msHcCount = 0;
    TIM_Cmd(TIM3, ENABLE);  //啟用TIM3外設(shè)
}
 
static void StopTimer() 	//關(guān)閉定時器外設(shè)
{
    TIM_Cmd(TIM3, DISABLE); //關(guān)閉TIM定時器外設(shè)
}
 
//獲取計時器時間
float GetEchoTimer(void)
{
    u32 t = 0;
    t = msHcCount*1000;			//得到ms
    t += TIM_GetCounter(TIM3);	//得到us
	TIM3- >CNT = 0;  			//將TIM3定時計數(shù)器的寄存器清零
	delay_ms(50);
    return t;
}

②超聲波距離計算代碼

//取五次數(shù)據(jù)平均值,為了使測距所得到的值更加精確可采取多次測距的平均值來使用應(yīng)用中
float HCSR04GetLength(void)
{
	u32 t = 0;
	int i = 0;
	float lengthTemp = 0;  
	float sum = 0; 	
	float distance;

	for(i=0;i< 5;i++){		
		
		TRIG_SEND = 1;      //發(fā)送高電平輸出
		delay_us(20);
		TRIG_SEND = 0;
			
		while(ECHO_RECEIVE == 0); 	//等待接收高電平輸出
		StartTimer();        	//打開計時器

		while(ECHO_RECEIVE == 1);
		StopTimer();        	//關(guān)閉計時器
		
		t = GetEchoTimer();     //獲取時間,解析度為1US

		lengthTemp = ((float)t/58.2);	//cm
		sum = lengthTemp + sum ;
	}
	distance = 100*sum/5.0;
	return distance;
}

具體測試現(xiàn)象

本次使用OLED屏幕顯示超聲波所測距離并顯示如下圖所示:
在這里插入圖片描述

總結(jié)

文章中使用的顯示方式為0.96寸OLED模塊顯示,驅(qū)動MCU使用的為STM32F103C8T6,在使用HCSR04的過程中也可以自己根據(jù)HCSR04的驅(qū)動代碼所得到的距離值去做其他的接口應(yīng)用,例如做小車,或者其他測距案例均可移植使用,需要完整工程的可下方留言郵箱獲取。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2848

    瀏覽量

    53428
  • 超聲波
    +關(guān)注

    關(guān)注

    63

    文章

    3320

    瀏覽量

    145990
  • 測距
    +關(guān)注

    關(guān)注

    2

    文章

    115

    瀏覽量

    20853
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    求msp430f149與hcsr04程序,

    各位大神,我才學(xué)430不久,想做一個超聲波測距,但是寫的程序一直調(diào)試不出來,希望你們有這個程序的發(fā)給我一下,msp430f149與hcsr04程序,用12864
    發(fā)表于 06-18 00:14

    單片機hcsr04超聲波對射測距

    求教,兩個單片機相隔一段距離怎么通過hcsr04超聲波模塊和藍牙來測距
    發(fā)表于 03-11 15:13

    基于STM32超聲波測距設(shè)計的合集

    本文檔的主要內(nèi)容介紹的是STM32超聲波測距設(shè)計的合集包括了的原始材料,原理圖,程序和原理說明的詳細資料概述合嵌入式處理器STM32F103超聲波
    發(fā)表于 09-05 16:13

    基于STM32超聲波測距設(shè)計

    基于STM32F103超聲波測距(定時器)使用的硬件設(shè)備:stm32f103c8t6,0.96寸OLED,超聲波模塊HC-SR
    發(fā)表于 07-22 08:53

    STM32f103是如何驅(qū)動超聲波測距模塊

    STM32f103驅(qū)動超聲波測距模塊關(guān)鍵詞:輸入捕獲 定時器 中斷使用的超聲波測距模塊型號為US
    發(fā)表于 08-12 08:11

    淺析TM32F1系列超聲波測距程序

    STM32F1系列超聲波測距程序因為自己做畢設(shè)的緣故,用到超聲波HCSR04模塊,在網(wǎng)上查找了相關(guān)的代碼,發(fā)現(xiàn)關(guān)于
    發(fā)表于 08-16 06:10

    STM32F103ZET6超聲波測距hcsr04模塊

    STM32F103ZET6超聲波測距(hcsr04模塊)實驗一、硬件連線圖接線描述:1.供電采+5V,我試了下+3V也是可以的2. 注意Trig引腳跟Echo引腳不要接錯;二、hcrs
    發(fā)表于 08-24 07:36

    怎樣去編寫HCSR04模塊超聲波測距程序呢

    超聲波測距原理是什么?怎樣去編寫HCSR04模塊超聲波測距程序呢?
    發(fā)表于 11-17 06:45

    STM32F103超聲波HCSR04模塊串口輸出距離代碼分享

    STM32F103超聲波HCSR04模塊串口輸出距離代碼分享
    發(fā)表于 12-14 08:01

    超聲波HCSR-04驅(qū)動及開發(fā)講解

    文章目錄1、超聲波HCSR-04驅(qū)動及開發(fā)本次的超聲波主要是用于測試小車前方與障礙物之間的距離的,本次主要是通過獲取到超聲波的距離后,然后
    發(fā)表于 01-05 07:32

    基于單片機的HCSR04超聲波測距傳感器設(shè)計有哪些注意事項

    基于單片機的HCSR04超聲波測距傳感器設(shè)計有哪些注意事項?
    發(fā)表于 01-20 06:52

    超聲波HCSR04模塊的工作原理是什么

    代碼是基于STC89C52RC單片機芯片寫的,有些地方引腳定義不同根據(jù)情況更換即口HCSR04模塊超聲波HCSR04模塊的工作原理其實還是較為簡單的,我們只需要通過IO口給超聲波模塊的
    發(fā)表于 03-02 07:20

    用lcd1602顯示超聲波hcsr04測出的距離

    單片機stm32發(fā)送消息啟動HCSR04超聲波模塊發(fā)出超聲波超聲波模塊通過測量發(fā)出超聲波和接收
    發(fā)表于 09-22 07:26

    使用STM32F103單片機實現(xiàn)超聲波測距OLED顯示的設(shè)計程序和電路圖

    本文檔的主要內(nèi)容詳細介紹的使用使用STM32F103單片機實現(xiàn)超聲波測距OLED顯示的設(shè)計程序和電路圖及工程文件免費下載
    發(fā)表于 11-09 08:00 ?47次下載
    使用<b class='flag-5'>STM32F103</b>單片機實現(xiàn)<b class='flag-5'>超聲波</b><b class='flag-5'>測距</b>OLED<b class='flag-5'>顯示</b>的設(shè)計程序和電路圖

    使用HCSR04超聲波傳感器DIY測距

    電子發(fā)燒友網(wǎng)站提供《使用HCSR04超聲波傳感器DIY測距儀.zip》資料免費下載
    發(fā)表于 11-16 09:33 ?3次下載
    使用<b class='flag-5'>HCSR04</b><b class='flag-5'>超聲波</b>傳感器DIY<b class='flag-5'>測距</b>儀