STM32F407之超声波模块使用

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "includes.h"
#include "HC_SR04.h"

int main()
{

	OS_ERR err;//错误
	
	uart_init(9600);//串口初始化
	//超声波初始化
	HC_SR04();
	
	
	//OS初始化 他是第一个运行的函数 初始化各种变量各种全局变量 列如 中断嵌套 优先级 存储器等
	OSInit(&err);
	//创建任务1
	OSTaskCreate(	(OS_TCB *)&HC_SR04_TCB,									//任务控制块,等同于线程id
					(CPU_CHAR *)"HC_SR04",									//任务的名字,名字可以自定义的
					(OS_TASK_PTR)HC_SR04_Init,								//任务函数,等同于线程函数
					(void *)0,												//传递参数,等同于线程的传递参数
					(OS_PRIO)6,											 	//任务的优先级6		
					(CPU_STK *)HC_SR04_STK,									//任务堆栈基地址
					(CPU_STK_SIZE)128/10,									//任务堆栈深度限位,用到这个位置,任务不能再继续使用
					(CPU_STK_SIZE)128,										//任务堆栈大小			
					(OS_MSG_QTY)0,											//禁止任务消息队列
					(OS_TICK)0,												//默认时间片长度																
					(void  *)0,												//不需要补充用户存储区
					(OS_OPT)OS_OPT_TASK_NONE,								//没有任何选项
					&err													//返回的错误码
				);
					
	//启动OS,进行任务调度
	OSStart(&err);
	

}

#include "HC_SR04.h"
#include "delay.h"
#include "usart.h"
/*
	引脚
		PB12 TRIG 输出模式
		PB13 ECHO 输入模式


*/
#define TRIG_SET(x)  (x)?GPIO_SetBits(GPIOB,GPIO_Pin_12):GPIO_ResetBits(GPIOB,GPIO_Pin_12)
//#define ECHO_READ GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)
#define  ECHO_READ    GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)
static GPIO_InitTypeDef  GPIO_InitStructure;

void HC_SR04(void)
{
	//启用GPIO时钟
	 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
	
	//给引脚PB2 TRIG 配置输出模式
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;  
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;  		//输出模式
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  	// 推挽
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; 	//速率
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;  	//无拉
	
	//给PB13引脚配置输入模式
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;  
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;        //输入模式
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;  	//无拉

	GPIO_Init(GPIOB, &GPIO_InitStructure);
	TRIG_SET(0);

}

//获取数据模块自动发送8bit
uint8_t Get_Data(void)
{
	
	uint8_t cnt = 0;
	TRIG_SET(1);//发送数据高电平
	delay_us(15);//至少延迟10us
	TRIG_SET(0);//停止发送
	
	while(ECHO_READ == 0);//等待高电平出现
	
	while(ECHO_READ == 1)//高电平出现
	{
		/*
			声速340m/s
				340m= 340*100cm = 340*100*10mm			3mm
			--------------------------------------- = ----------
				1s = 1000ms = 1000000us					?  = 8.8us
		*/
		delay_us(9);//为什么要延迟9us   

		cnt++;
	}
	//计算出来的距离则要/2
	cnt= cnt/2;
	return cnt;
}

//-----------------------------------------------------------
//操作系统任务块
//任务块
OS_TCB HC_SR04_TCB;

void HC_SR04_Init(void *parg);//函数名称

CPU_STK HC_SR04_STK[128]; //任务堆栈 大小128 也就是512

void HC_SR04_Init(void *parg)
{
	uint8_t distance = 0;
	
	while(1)
	{	
		
		distance = Get_Data();
		
		printf("distance is %d mm\n",distance);
		
		delay_ms(1000);
	
	}


}










#ifndef __HC_SR04_H
#define __HC_SR04_H 			   
#include "stm32f4xx.h"
#include "includes.h"
void HC_SR04(void);
uint8_t Get_Data(void);

//任务块
extern OS_TCB HC_SR04_TCB;

extern void HC_SR04_Init(void *parg);//函数名称

extern CPU_STK HC_SR04_STK[128]; //任务堆栈 大小128 也就是512
#endif

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/884394.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【大数据】数据中台怎么样助力企业创新和客户实践

在当今数字化时代,数据成为了企业竞争的关键因素。企业拥有大量的数据,但如何高效地利用这些数据,实现创新和提升客户体验,成为了一项重要的挑战。数据中台作为一种重要的数据管理和分析工具,发挥着关键的作用。本文将…

大数据毕业设计选题推荐-食品销售数据分析系统-Hive-Hadoop-Spark

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

数集相等定义凸显“R各元x的对应x+1的全体=R”是几百年重大错误

黄小宁 变量x所取各数也均由x代表,x代表其变域(x所有能取的数组成的集)内任一元。设集A{x}表A各元均由x代表,{x}中变量x的变域是A。其余类推。因各数x可是数轴上点的坐标所以x∈R变换…

AWS Network Firewall -NAT网关配置只应许白名单域名出入站

1. 创建防火墙 选择防火墙的归属子网(选择公有子网) 2. 创建规则白名单域名放行 3. 绑定相关规则 继续往下拉 绑定非托管规则 4. 配置网络路由 相关规则 参考图 解释 防火墙的归属公有子网路由表规则机器实例的规则子网路由表规则nat网管路…

springboot实战学习(7)(JWT令牌的组成、JWT令牌的使用与验证)

接着上篇博客的学习。上篇博客是在基本完成用户模块的注册接口的开发以及注册时的参数合法性校验的基础上,基本完成用户模块的登录接口的主逻辑以及提到了问题:"用户未登录,需要通过登录,获取到令牌进行登录认证,…

Linux 安装redis主从模式+哨兵模式3台节点

下载 https://download.redis.io/releases/ 解压 tar -zxvf redis-7.2.4.tar.gz -C /opt chmod 777 -R /opt/redis-7.2.4/安装 # 编译 make # 安装, 一定是大写PREFIX make PREFIX/opt/redis-7.2.4/redis/ install配置为系统服务 cd /etc/systemd/system/主服务…

一文上手SpringSecuirty【六】

自定义认证流程完成之后,前端收到了后端生成的token,那么在之后的所有请求当前,都必须携带token.作为服务器来说,得验证这个token,是否合法. 一、验证token是否合法 1.1 OncePerRequestFilter过滤器 OncePerRequestFilter是 Spring 框架中的一个过滤器,用于确保在…

基于nodejs+vue的校园二手物品交易系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…

Rust 语言开发 ESP32C3 并在 Wokwi 电子模拟器上运行(esp-hal 非标准库、LCD1602、I2C)

文章目录 esp-rs 简介GithubRust 包仓库Wokwi 电子模拟器开发环境Rust 环境esp-rs 环境创建 ESP32C3 项目项目结构编译项目命令运行模拟器ESP32C3 烧录 esp-rs 简介 esp-rs 是一个专注于为 Espressif 系列芯片(如 ESP32、ESP32-S2、ESP32-C3 等)提供 Ru…

如何在 Three.js 场景中创建可点击展开的标签

在复杂的可视化场景中,经常需要为 3D 对象添加可交互的标签,以便用户点击时可以查看详细信息。这篇文章将通过一个简单的案例展示,如何在 Three.js 中为对象创建可点击的标签,点击标签可以展开详细信息,再次点击可以关…

论文复现:考虑电网交互的风电、光伏与电池互补调度运行(MATLAB-Yalmip-Cplex全代码)

论文复现:考虑电网交互的风电、光伏与电池储能互补调度运行(MATLAB-Yalmip-Cplex全代码) 针对风电、光伏与电化学储能电站互补运行的问题,已有大量通过启发式算法寻优的案例,但工程上更注重实用性和普适性。Yalmip工具箱则是一种基于MATLAB平台的优化软件工具箱,被广泛应用…

基于单片机语音智能导盲仪仿真设计

文章目录 前言资料获取设计介绍设计程序具体实现截图设计获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们…

【Python】探索 Graphene:Python 中的 GraphQL 框架

人们常说挣多挣少都要开心,这话我相信,但是请问挣少了怎么开心? 随着现代 Web 应用对数据交互需求的不断增长,GraphQL 作为一种数据查询和操作语言,越来越受到开发者的青睐。Graphene 是 Python 语言中实现 GraphQL 的…

基于SpringBoot+Vue3的在线报名系统

一、项目介绍 1.1 项目介绍 本项目为一个报名系统,实现了基本的报名流程,功能完善,前后端皆有个人独立开发,功能相对不是特别难,但该有的功能还是都已经实现。 1.2 技术架构 主要技术栈: SpringBoot2 …

WebRTC中的维纳滤波器实现详解:基于决策导向的SNR估计

目录 1. 维纳滤波器的基本原理2. WebRTC中的维纳滤波器实现3. 代码逐步剖析4. 总结 在WebRTC的噪声抑制模块中,维纳滤波器(Wiener Filter)是一种非常常见且重要的滤波器,用于提高语音信号的清晰度并抑制背景噪声。本文将详细解释维…

erlang学习:Linux命令学习6

for循环学习 打印九九乘法表 for i in {1..9};do %%取1-9for j in $(seq 1 $i);do %%取1-iecho -n "$j*$i$((i*j)) " %%进行九九乘法表打印doneecho done尝试了很多次报错是因为后面的换行符不对,window系统中的换行符与linux对不上,因…

AI芯片WT2605C赋能厨房家电,在线对话操控,引领智能烹饪新体验:尽享高效便捷生活

在智能家居的蓬勃发展中,智能厨电作为连接科技与生活的桥梁,正逐步渗透到每一个现代家庭的厨房中。蒸烤箱作为智能厨电的代表,以其丰富的功能和高效的性能,满足了人们对美食的多样化追求。然而,面对众多复杂的操作功能…

OpenHarmony(鸿蒙南向)——平台驱动开发【MIPI DSI】

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 持续更新中…… 概述 功能简介 DSI(Display Serial Interface&#x…

小阿轩yx-案例:代码管理系统简介与部署

小阿轩yx-案例:代码管理系统简介与部署 前言 开发一个项目时,如果只有几十行代码或几百行代码时维护还算简单,但是代码数量达到一定程度或两三个人共同开发一个项目时,就很容易会出现代码混乱、冲突、排错难等问题。代码编写完成…

【软件测试】如何设计测试用例? 设计测试用例常用的方法.

目录 一.什么是测试用例?二.总体设计测试用例的万能公式.2.1 功能性能界面兼容易用安全2.2 弱网测试2.3 安装卸载测试. 三. 常用设计具体测试用例的方法3.1 等价类3.2 边界值3.3 正交法3.3.1 正交表3.3.2 如何设计正交表,并根据正交表编写测试用例 3.4 判定表法3.4.1 根据判定…