STM32控制HC-SR04超聲模塊獲取距離

歡迎入群共同學習交流
時間記錄:2024/5/23

一、模塊介紹

(1)引腳介紹
VCC:電源引腳,接單片機3.3/5V
GND:電源地
Trig:超聲信號觸發引腳
Echo:超聲信號接收引腳
(2)時序圖
HC-SR04時序圖
介紹:通過Trig觸發引腳設置一個大于10us的TTL高電平,觸發內部循環發送8個40KHZ的超聲波,然后通過接收引腳判斷接收信號高電平的持續時間,通過聲速進行計算來回的距離,如果超過38ms仍未接收到回波也會觸發高電平,此時電平持續時間最長

二、示例代碼

(1)頭文件

#ifndef __HCSR04_H__
#define __HCSR04_H__
#include "stm32f10x.h"/**HC-SR04超聲模塊初始化*/
void Hcsr04_Init(void);
/**獲取距離,單位CM*/
void vGetDistance(float *dis,float temp);#endif

(2)源文件

#include "hc_sr04.h"
#include "delay.h"//端口宏定義
#define Tring_GPIO GPIOB
#define Tring_PIN  GPIO_Pin_5
#define Echo_GPIO GPIOB
#define Echo_PIN GPIO_Pin_6void Hcsr04_Init(void)
{//使能時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);/**初始化GPIO端口*/GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin = Tring_PIN;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(Tring_GPIO,&GPIO_InitStruct);GPIO_InitStruct.GPIO_Pin = Echo_PIN;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(Echo_GPIO,&GPIO_InitStruct);/**初始化TIM2,進行計時*/TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseInitStruct.TIM_Period=0xFFFF;TIM_TimeBaseInitStruct.TIM_Prescaler=72-1; //1us計數一次TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);TIM_Cmd(TIM2,ENABLE);//使能/開啟定時器
}void vGetDistance(float *dis,float temp)
{u16 time = 0;/**Tring引腳拉高10us的TTL電平,使模塊發送超聲波*/GPIO_SetBits(Tring_GPIO,Tring_PIN);vDelayUs(10);GPIO_ResetBits(Tring_GPIO,Tring_PIN);/*獲取回波時間,高電平持續時間38ms為無回波時返回時間*/while(GPIO_ReadInputDataBit(Echo_GPIO,Echo_PIN) == 0);TIM_SetCounter(TIM2,0);while(GPIO_ReadInputDataBit(Echo_GPIO,Echo_PIN) == 1);time = TIM_GetCounter(TIM2);//計算距離*dis = time*(334.1+0.6*temp) / 20000;vDelayMs(5); //等待下一次開始,官方建議60ms采樣周期,自己根據情況修改
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/13696.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/13696.shtml
英文地址,請注明出處:http://en.pswp.cn/web/13696.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java.util.Arrays 詳解

排序 sort(int[] a): 對指定 int 型數組按數字升序進行排序。sort(Object[] a): 對指定對象數組進行排序&#xff08;對象的類必須實現 Comparable 接口&#xff09;。sort(T[] a, Comparator<? super T> c): 使用指定的比較器對數組進行排序。sort(int[] a, int fromI…

給你一把接口響應斷言神器,你要不要?

JSON Schema是用來標記和校驗JSON數據&#xff0c;類似于XMLSchema,可用在自動化測試驗證JSON數據。 官網&#xff1a;http://json-schema.org/ 最常用版本&#xff1a;draft 04。&#xff08;目前各類編程語言對draft 04支持最廣泛&#xff09; 舉個例子 假如你有一個接口…

202473讀書筆記|《但愿呼我的名為旅人:松尾芭蕉俳句300》——圍爐夜話,身頓心安,愿每個人都能在愛里自由馳騁

202473讀書筆記|《但愿呼我的名為旅人&#xff1a;松尾芭蕉俳句300》——圍爐夜話&#xff0c;身頓心安&#xff0c;愿每個人都能在愛里自由馳騁 &#x1f60d;&#x1f60d;&#x1f929;&#x1f929; 譯者序正文二正文三正文四正文五正文六正文七 《但愿呼我的名為旅人&…

Lua中table.sort()使用方式

table.sort(tab,compare) 參數如下&#xff1a; tab:表名 compare:比較規則函數名 簡略寫法&#xff1a; a {1,2,3} table.sort(a,function(a,b) return a>b end) compare這個參數是一個函數&#xff0c;它有兩個參數&#xff0c;你可以理解為表中的兩個不同元素&…

智能進化:讓AI大模型變得更聰明的路徑探索

前言 隨著人工智能&#xff08;AI&#xff09;技術的飛速發展&#xff0c;大模型在多個領域展現出了前所未有的能力。然而&#xff0c;它們仍然面臨著理解力、泛化能力和適應性等方面的挑戰。如何讓大模型變得更聰明&#xff0c;是當前AI研究和應用的一個重要課題。本文將探討…

解除網頁禁止選擇

控制臺輸入以下命令 復制&#xff1a;javascript:void(document.body.οncοpy) 可選&#xff1a;javascript:void(document.body.onselectstart) 拖拉&#xff1a;javascript:void(document.body.οnmοuseup)

C++實現基于http協議的epoll非阻塞模型的web服務器框架(支持訪問服務器目錄下文件的解析)

使用方法&#xff1a; 編譯 例子&#xff1a;./httpserver 9999 ../ htmltest/ 可執行文件 端口 要訪問的目錄下的 例子&#xff1a;http://192.168.88.130:9999/luffy.html 前提概要 http協議 &#xff1a;應用層協議&#xff0c;用于網絡通信&#xff0c;封裝要傳輸的數據&…

npm install [Error]

npm install 依賴的時候報錯 依賴版本問題的沖突&#xff0c;忽視即可 使用 npm install --legacy-peer-deps

剪畫小程序:3個分離人聲提取小技巧,趕緊收藏起來吧!

Hello&#xff01;大家好呀&#xff01;這里是社會主義搬磚人小畫&#xff01; 人聲分離&#xff0c;是指將混合在一起的人聲和其他聲音&#xff08;如背景音樂、環境噪音等&#xff09;分離開來&#xff0c;提取出單獨的人聲部分的過程。 在實際應用中&#xff0c;人聲分離技…

leetcode654.最大二叉樹、617.合并二叉樹、700.二叉搜索樹中的搜索

654.最大二叉樹 構造樹一般采用的是前序遍歷&#xff0c;因為先構造中間節點&#xff0c;然后遞歸構造左子樹和右子樹 確定遞歸函數的參數和返回值 參數傳入的是存放元素的數組&#xff0c;返回該數組構造的二叉樹的頭結點&#xff0c;返回類型是指向節點的指針。 TreeNode…

Unity 開發Hololens,制作面板跟隨眼鏡一起移動,(面板跟蹤)

Hololens滑動框以及面板跟蹤 創建空物體&#xff0c;并添加組件 SolverHandler、RedialView、FollowMeToggle 創建按鈕&#xff0c;控制停止/開始跟蹤 創建一個Hololens自帶的按鈕放到右上角&#xff0c;并添加事件 創建藍色背景板 創建空物體Backplate&#xff0c;下面再…

個體因果效應估計|EDVAE:用于個體治療效果估計的反事實推理中的解開潛在因素模型

【摘要】根據觀察數據估計個體治療效果&#xff08;ITE&#xff09;是一項至關重要但具有挑戰性的任務。解纏結表示已用于將代理變量分為混雜變量、工具變量和調整變量。然而&#xff0c;根據觀測數據準確地進行反事實推理來識別 ITE 仍然是一個懸而未決的問題。在本文中&#…

AppInventor2要在界面上做一個電量圖標,有什么好的思路嗎?

問&#xff1a;要在界面上做一個電量圖標&#xff0c;有什么好的思路嗎&#xff1f; 答&#xff1a;首先&#xff0c;很容易想到使用進度條相關的組件&#xff0c;原生”滑動條“組件可以嗎&#xff1f; 答案顯而易見&#xff0c;首先它的樣式自定義不夠&#xff0c;UI不外乎上…

STM32_ADC

1、ADC簡介 ADC&#xff0c;即Analog-Digital Converter&#xff0c;模擬-數字轉換器。 ADC可以將引腳上連續變化的模擬電壓轉換為內存中存儲的數字變量&#xff0c;建立模擬電路到數字電路的橋梁。 12位逐次逼近型ADC&#xff0c;1us轉換時間。 輸入電壓范圍&#xff1a;0~3.3…

P6【力扣144,94,145】【數據結構】【二叉樹遍歷】C++版

【144】二叉樹的前序遍歷 1、遞歸法&#xff1a; class Solution { public:void preorder(TreeNode* root, vector<int> &res){if(root nullptr){return;}res.push_back(root->val);preorder(root->left, res);preorder(root->right, res);}vector<in…

沒有密碼如何卸載卡巴斯基?

如果忘記卡巴斯基6.0的保護密碼&#xff0c; &#xff08;1&#xff09;進入安全模式下 &#xff08;2&#xff09;打開6.0的安裝目錄 Kaspersky Anti-Virus 6.0: C://Program Files//Kaspersky Lab//Kaspersky Anti-Virus 6.0 &#xff08;3&#xff09;將目錄中的avp.exe改…

CVE-2020-7982 OpenWrt 遠程命令執行漏洞學習(更新中)

OpenWrt是一款應用于嵌入式設備如路由器等的Linux操作系統。類似于kali等linux系統中的apt-get等&#xff0c;該系統中下載應用使用的是opgk工具&#xff0c;其通過非加密的HTTP連接來下載應用。但是其下載的應用使用了SHA256sum哈希值來進行檢驗&#xff0c;所以將下載到的數據…

開發過程中使用MySQL和Oracle的差異

前言 小型項目中使用MySQL的占比還是相對較高的&#xff0c;但是也不排除隨著項目的擴大&#xff0c;產品的豐富&#xff0c;或者甲方的財大氣粗&#xff0c;有可能會有MySQL換成Oracle。那么這兩者對于開發者而言&#xff0c;有什么差異化的地方呢。 官方文檔 MySQL5.7 htt…

weblogic簡介

WebLogic是美國Oracle公司出品的一個Application Server&#xff0c;它是一個基于JAVA EE架構的中間件。WebLogic主要用于開發、集成、部署和管理大型分布式Web應用、網絡應用和數據庫應用的Java應用服務器。它將Java的動態功能和Java Enterprise標準的安全性引入大型網絡應用的…

什么是安全左移如何實現安全左移

文章目錄 一、傳統軟件開發面臨的安全挑戰二、什么是安全左移四、安全左移與安全開發生命周期&#xff08;SDL&#xff09;三、安全左移對開發的挑戰五、從DevOps到DevSecOps六、SDL與DevSecOps 一、傳統軟件開發面臨的安全挑戰 傳統軟件開發面臨的安全挑戰主要包括以下幾個方…