STM32F103RCT6之超聲波測距(HC-SR04)測試篇

STM32F103RCT6之超聲波測距(HC-SR04)測試

涉及到的東西: 單片機stm32f103rct6、 hc-sr04超聲波測距模塊、串口輸出設備
在這裏插入圖片描述

之前買的測距,今天終於弄好了,首先是介紹HC-SR04

在這裏插入圖片描述
引腳連線:

引腳 連接
VCC 5V
GND 負極
Echo 接收端(PA0)
Trig 觸發端(PA1)

Trig觸發端,是爲了觸發超聲波測距工作的引腳
Echo接收信號端:超聲波返回到單片機一個高電平,而我們就是通過高電平持續的時間計算距離。

原理:
(1)採用 IO 觸發測距,給至少 10us 的高電平信號;
(2)模塊自動發送 8 個 40khz 的方波,自動檢測是否有信號返回;
(3)有信號返回,通過 IO 輸出一高電平,高電平持續的時間就是
(4)超聲波從發射到返回的時間.測試距離=(高電平時間*聲速(340M/S))/2;

在這裏插入圖片描述
以上是超聲波的手冊,可以在網上自行查找 我這裏主要是講我寫代碼的測試的過程。
公式很重要測試距離=(高電平時間*聲速(340M/S))/2;

開始正題

1.首先我們應該觸發塊:

Trig設置高電平時間至少 10us
下面展示一些 內聯代碼片

// PA1是觸發端
void hcsr04_init()
{	
	GPIOA->ODR |= GPIO_ODR_ODR1;
	 delay_us(20);//延時20us
	GPIOA->ODR &=~ GPIO_ODR_ODR1;
}

2.然後我們進行下一步------接收信號判斷延時

此過程我遇到很多問題,用了很多辦法,輸入捕獲還不熟,最後使用的是外部觸發中斷完成的判斷高電平時間。

以下重點!!!仔細閱讀

思路: 當引腳PA0接收到信號後,就進入中斷函數,然後判斷,如果是高電平定時器計時,低電平暫停計時並且跟新計時器的CNT。這樣只要是進入高點平,就會開啓計時器計時,高電平結束進入低電平,停止計時,講CNT內容獲取,最終通過公式計算出距離。

下面展示 中斷函數

// TIM2計時,中斷是Echo PA0
int a = 0;
	if(GPIOA->IDR& GPIO_IDR_IDR0)
	{
		TIM2->CR1 |=  TIM_CR1_CEN;//開始計時
	}
	else	
	{	
		TIM2->CR1 &=~  TIM_CR1_CEN; //停止
		TIM2->EGR = TIM_EGR_UG;

		b=  TIM2->CNT;//賦值
		b=b*170/10000;//公式
		printf("%dcm   ",b);
		for(int i = 0; i < 3000000; i++);
	}
		EXTI->PR = EXTI_PR_PR0;

注:我在公式中用時間us計算的,因爲我再TIM2配置的時間是us計算,公式340m/s。所以需要換算單位。

最後成功:(我的有小許誤差,後續修改,此爲測試階段)

在這裏插入圖片描述
(代碼工程後續上傳,如果您覺得有用就點個‘贊’吧!!!)

2020.3.30:工程地址

關注微信公衆號獲取工程“MeiXiangDao2020” 回覆:超聲波測距

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章