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

STM32傳感器外設(shè)集--超聲波模塊(HC_SR04)

這篇具有很好參考價值的文章主要介紹了STM32傳感器外設(shè)集--超聲波模塊(HC_SR04)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

1.器件介紹

1.1.參數(shù)

1.2.測量范圍

1.3.計算公式

1.4.優(yōu)點

2.1.原理

3.代碼編寫

3.1.接線圖

3.2.代碼

3.2.1.HC_SR04.h

3.2.2.HC_SR04.c

3.2.3.timer.h

3.2.4.timer.c

?3.2.5.main.c


stm32超聲波,嵌入式外設(shè)集,stm32,單片機(jī),嵌入式,嵌入式硬件

1.器件介紹

1.1.參數(shù)

  • 5根引腳
  • 工作電壓5v
  • 工作電流15mA
  • 工作頻率40Hz

1.2.測量范圍

  • 最近距離 2cm
  • 最遠(yuǎn)距離 4m
  • 測量角度 15度

1.3.計算公式

測試距離=(高電平時間*聲速(340M/S))/2

1.4.優(yōu)點

  • 性能穩(wěn)定
  • 測度距離精確
  • 模塊高精度
  • 盲區(qū)小
  • 易于使用

2.使用原理

2.1.原理

使用stm32的定時器測量反射波的返回時間,再根據(jù)計算公式求出物體的相對距離,

3.代碼編寫

3.1.接線圖

stm32超聲波,嵌入式外設(shè)集,stm32,單片機(jī),嵌入式,嵌入式硬件文章來源地址http://www.zghlxwxcb.cn/news/detail-620017.html

3.2.代碼

3.2.1.HC_SR04.h

#ifndef __HC_SR04_H
#define __HC_SR04_H	 
#include "sys.h"


#define SR04_Trlg PBout(12)// PB12
#define SR04_Echo PBin(13)// PB13	

void HC_SR04_IO_Init(void);
u16  Get_SR04_Distance(void);



	 				    
#endif

3.2.2.HC_SR04.c

#include "HC_SR04.h"
#include "timer.h"
#include "delay.h"

//	 

void HC_SR04_IO_Init(void)
{
 
 GPIO_InitTypeDef  GPIO_InitStructure;
 	
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	 //使能PB端口時鐘
	
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;				 // 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 		 //推挽輸出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度為50MHz
 GPIO_Init(GPIOB, &GPIO_InitStructure);					 //根據(jù)設(shè)定參數(shù)初始化GPIOB.12
	
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;				 // 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度為50MHz
 GPIO_Init(GPIOB, &GPIO_InitStructure);					 //根據(jù)設(shè)定參數(shù)初始化GPIOB.13
	
}

u16 TIM2_UPDATA = 0;
u32 temp = 0;
u16  Get_SR04_Distance(void)
{

   SR04_Trlg=1;       //觸發(fā)信號是高電平脈沖,寬度大于10us
   delay_us(20);
   SR04_Trlg=0;
   while(!SR04_Echo); //等待高電平
	 TIM_SetCounter(TIM2,0);  //重填計數(shù)器值
	 TIM2_UPDATA = 0;         //溢出次數(shù)清零
   while(SR04_Echo);  //等待低電平
	 TIM_Cmd(TIM2,DISABLE);  //暫時關(guān)閉定時器,保證數(shù)據(jù)正確性
   temp = (int)(((double)(TIM_GetCounter(TIM2) + (7200* TIM2_UPDATA)))/72/2);  //得到高電平總時間,單位us(定時器的計數(shù)值加上溢出的值才是高電平的時間),除以2是計算單程的時間
	 //(7200* TIM2_UPDATA這里為溢出的時間us,可以轉(zhuǎn)換為100* TIM2_UPDATA,因為在公式后面除以了72??勺罱K理解為TIM2_UPDATA個100us)
	 TIM_Cmd(TIM2,ENABLE);
	 return temp;
}
 


3.2.3.timer.h

#ifndef __TIMER_H
#define __TIMER_H
#include "sys.h"


void TIM2_Init(u16 arr,u16 psc);

#endif

3.2.4.timer.c

#include "timer.h"
#include "delay.h"
#include "sys.h"


void TIM2_Init(u16 arr,u16 psc)
{	 
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  NVIC_InitTypeDef NVIC_InitStructure;

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);	//使能TIM2時鐘
	
	//初始化定時器2	 
	TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)定計數(shù)器自動重裝值 
	TIM_TimeBaseStructure.TIM_Prescaler =psc; 	//預(yù)分頻器   
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //設(shè)置時鐘分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計數(shù)模式
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時間基數(shù)單位
  

	
	//中斷分組初始化
	NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;  //TIM3中斷
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;  //先占優(yōu)先級2級
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  //從優(yōu)先級0級
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
	NVIC_Init(&NVIC_InitStructure);  //根據(jù)NVIC_InitStruct中指定的參數(shù)初始化外設(shè)NVIC寄存器 
	
	TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//允許更新中斷 ,
	
  TIM_Cmd(TIM2,ENABLE ); 	//使能定時器2

}
//定時器2中斷服務(wù)程序	               主要記錄溢出次數(shù)

extern u16 TIM2_UPDATA;
extern u8 state_machine;
void TIM2_IRQHandler(void)
{ 
				if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //檢查指定的TIM中斷發(fā)生與否:TIM 中斷源 
				{
					  TIM2_UPDATA++;//當(dāng)回響信號很長時,記錄溢出次數(shù),每加一次代表加100us
						TIM_ClearITPendingBit(TIM2, TIM_IT_Update); //清除中斷標(biāo)志位
			  }
}

?3.2.5.main.c

int main(void)
{

	u16 time=0;
    delay_init();	    //延時函數(shù)初始化
	 uart_init(115200);
    HC_SR04_IO_Init();  //超聲波模塊GPIO初始化
    delay_ms(500);       //上電瞬間加入一定延時在初始化
    TIM2_Init(7199,0);    //以10KHz計數(shù),定時100us
		HC05_Role_Show();
		delay_ms(100);	
    while(1)
    {
			time++ ;

				Distance = (Get_SR04_Distance() * 331) * 1.0/1000;   //Get_SR04_Distance()返回單程聲波傳輸時間 us,轉(zhuǎn)換為秒=時間*10^(-6);331m/s等于331000mm/s,
			 //最終換算為Distance =Get_SR04_Distance()*10^(-6)*331000=(Get_SR04_Distance() * 331) * 1.0/1000;
			
			 delay_ms(10);
			 if(time==300) {
				 printf("%.1f\n",Distance);
				 HC05_Sta_Show();
				 time=0;
			 }	

    }
    
}

到了這里,關(guān)于STM32傳感器外設(shè)集--超聲波模塊(HC_SR04)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Arduino開發(fā)實例-DIY超聲波傳感器避障機(jī)器人

    在本應(yīng)用中,我們將使用一個超聲波傳感器與兩個直流電機(jī)和一個伺服電機(jī)相結(jié)合,Arduino作為主控板創(chuàng)建一個簡單的避障機(jī)器人。 超聲波傳感器發(fā)送和接收信號以確定物體的距離。 如果距離小于 15 厘米有物體,機(jī)器人將停止。 然后它環(huán)顧四周,轉(zhuǎn)向一個它什么都感覺不到

    2023年04月08日
    瀏覽(26)
  • STM32外設(shè)系列—HC-SR04(超聲波)

    STM32外設(shè)系列—HC-SR04(超聲波)

    ?? 文章作者:二土電子 ?? 關(guān)注文末公眾號獲取其他資料和工程文件! ?? 期待大家一起學(xué)習(xí)交流! 超聲波測距的原理非常簡單,超聲波發(fā)生器在某一時刻發(fā)出一個超聲波信號,當(dāng)這個超聲波信號遇到被測物體后會反射回來,被超聲波接收器接收到。這樣只要計算出從發(fā)出

    2024年02月09日
    瀏覽(26)
  • STM32外設(shè)系列—MPU6050角度傳感器

    STM32外設(shè)系列—MPU6050角度傳感器

    ?? 文章作者:二土電子 ?? 關(guān)注公眾號獲取更多資料! ?? 期待大家一起學(xué)習(xí)交流! ??MPU6050是由InvenSense公司生產(chǎn)的全球首款整合性六軸運(yùn)動處理模塊,它可以實時獲取運(yùn)動物體的在三維坐標(biāo)系內(nèi)的偏轉(zhuǎn)角度,如圖所示。 ??其中roll為繞X軸偏轉(zhuǎn)的角度,pitch為繞Y軸偏轉(zhuǎn)

    2024年02月03日
    瀏覽(26)
  • STM32傳感器外設(shè)集--心率模塊(MAX30102)

    STM32傳感器外設(shè)集--心率模塊(MAX30102)

    目錄 ??????? 一、模塊介紹 二、資料獲取連接? 歡迎關(guān)注微信公眾號--星之援工作室 發(fā)送(MAX30102) 三、接線方式 四、代碼編寫 main.c max30102.c max30102.h myiic.c myiic.h algorithm.c algorithm.h 五 、參考 MAX30102模塊是一種集成了光學(xué)傳感器和信號處理器的模塊,廣泛應(yīng)用

    2024年01月22日
    瀏覽(26)
  • STM32外設(shè)芯片驅(qū)動學(xué)習(xí)記錄 —— (一) BH1750光照傳感器驅(qū)動開發(fā)

    STM32外設(shè)芯片驅(qū)動學(xué)習(xí)記錄 —— (一) BH1750光照傳感器驅(qū)動開發(fā)

    一、芯片介紹 二、Datasheet解讀 1.硬件說明 2.寄存器說明 3.通信過程 三、驅(qū)動代碼編寫 1.軟件I2C驅(qū)動 2. BH1750芯片驅(qū)動函數(shù) 總結(jié) ? ? ? ? ? ? BH1750是16位數(shù)字輸出型,環(huán)境光強(qiáng)度傳感器集成電路,使用I2C接口通信,工作電壓:VCC(2.4~3.6V),I2C電平(1.65~VCC),用于各類消費(fèi)類LCD屏

    2024年02月02日
    瀏覽(17)
  • STM32超聲波避障小車(舵機(jī)云臺+超聲波/stm32f103/HAL/Cube)

    STM32超聲波避障小車(舵機(jī)云臺+超聲波/stm32f103/HAL/Cube)

    一、小車1.0——基本藍(lán)牙小車(僅藍(lán)牙遙控小車運(yùn)動方向,本篇) 二、小車2.0——藍(lán)牙小車PLUS(可以藍(lán)牙控制方向+藍(lán)牙直接調(diào)節(jié)車速) 三、小車3.0——避障小車(超聲波+舵機(jī)云臺) 四、小車4.0——無線手柄方向感知操控小車(mpu6050+雙藍(lán)牙透傳) 五、雙輪自平衡小車(HAL庫版

    2024年02月05日
    瀏覽(22)
  • 基于STM32F103C8T6(HAL庫)的HC-SR501紅外人體傳感及HC-SR04超聲波測距

    基于STM32F103C8T6(HAL庫)的HC-SR501紅外人體傳感及HC-SR04超聲波測距

    一、基于STM32F103C8T6最小系統(tǒng)板和STM32CubeMX實現(xiàn)LED燈循環(huán)閃爍 二、基于STM32F103C8T6和STM32CubeMX實現(xiàn)UART串口通信數(shù)據(jù)收發(fā) 三、實戰(zhàn)小例程 基于STM32F103C8T6最小系統(tǒng)板和STM32CubeMX驅(qū)動WS2812B光立方 四、基于STM32F103C8T6最小系統(tǒng)板HAL庫CubeMX驅(qū)動HC-SR501紅外人體傳感模塊 五、基于STM32F103C8

    2023年04月17日
    瀏覽(84)
  • 基于STM32的超聲波測距

    基于STM32的超聲波測距

    一、HC-SR04模塊介紹 HC-SR04超聲波測距模塊可提供2cm-400cm的非接觸式距離感測功能,測距精度可高達(dá)3mm;模塊包括超聲波發(fā)射器、接收器、與控制電路。 模塊的基本工作原理為: (1)采用 IO口 TRIG觸發(fā)測距,給最少 10us的高電平信呈。 (2)模塊自動發(fā)送 8個 40khz的方波,自動檢測是

    2024年02月13日
    瀏覽(28)
  • 基于STM32的超聲波雷達(dá)

    基于STM32的超聲波雷達(dá)

    視頻地址:1.基于STM32的超聲波雷達(dá)-演示_嗶哩嗶哩_bilibili 備注:文檔最后有所有文件的網(wǎng)盤地址 全部必要硬件(左到右) : ST-LINK調(diào)試器:調(diào)試下載程序 stm32f103c8t6核心板 1.8寸TFT顯示器 sg90舵機(jī) 超聲波傳感器 其他擴(kuò)展硬件 超聲波傳感器轉(zhuǎn)接板:方便超聲波傳感器接到舵機(jī)上

    2024年02月12日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包