STM32F407之超声波模块使用

news/2024/9/28 19:51:23 标签: stm32, 嵌入式硬件, 单片机

#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.niftyadmin.cn/n/5681745.html

相关文章

英文翻译中文怎么做?试试这四款翻译工具!

日常工作中,我时常需要处理各种学术资料,其中不乏英文文献。在这个信息爆炸的时代,翻译工具成为了我们不可或缺的好帮手。今天,我想和大家分享几款我常用的翻译工具,它们在英文翻译中文方面的表现,真的让我…

【Redis 源码】7RDB持久化

1 功能说明 RDB (Redis Database Backup) 是 Redis 的一种持久化方式,它通过将某一时刻的内存快照(snapshot)以二进制格式保存到磁盘上。这种持久化方式提供了高性能和紧凑的数据存储,但相对于 AOF (Append Only File) 来说&…

【机器学习】——支持向量机

文章目录 支持向量机(Support Vector Machine, SVM)概述SVM 的工作原理线性不可分数据:软间隔与核技巧SVM 的数学形式SVM 的优势SVM 的缺点SVM 的应用 支持向量机(Support Vector Machine, SVM)概述 支持向量机&#…

py 元组,列表,函数的学习和使用

代码 下面两个Python脚本&#xff0c;分别解决问题。 1. 脚本 test1.ipynb # 创建一个元组 t1 和一个空列表 list1 t1 (1, 2, R, py, Matlab) list1 [] # 使用 while 循环&#xff0c;将 t1 中的元素添加到 list1 i 0 while i < len(t1): list1.append(t1[i]) …

动手学深度学习(李沐)PyTorch 第 4 章 多层感知机

4.1 多层感知机 隐藏层 我们在 3.1.1.1节中描述了仿射变换&#xff0c; 它是一种带有偏置项的线性变换。 首先&#xff0c;回想一下如 图3.4.1中所示的softmax回归的模型架构。 该模型通过单个仿射变换将我们的输入直接映射到输出&#xff0c;然后进行softmax操作。 如果我们…

如何优化JVM性能:调优参数技巧

在现代Java应用中&#xff0c;JVM的性能直接影响到应用的整体表现。通过合理配置JVM参数&#xff0c;可以显著提升系统的运行效率。本文将介绍一些常见的JVM参数及其调优技巧&#xff0c;帮助开发者根据应用需求进行优化。 1. 堆内存设置 参数: -Xms&#xff08;初始堆大小&a…

elasticsearch向量数据库服务搭建

elasticsearch向量数据库服务搭建 文章目录 elasticsearch向量数据库服务搭建一、es安装步骤二、es可视化kibana安装步骤三、安装elasticsearch-head 四、数据测试&#xff0c;kibana脚本&#xff0c;操作es五、向量数据测试&#xff0c;kibana脚本&#xff0c;操作es参考资料 …

.NET MAUI(.NET Multi-platform App UI)上下文菜单

在.NET MAUI&#xff08;.NET Multi-platform App UI&#xff09;框架中&#xff0c;上下文菜单&#xff08;通常称为右键菜单&#xff09;是一个为用户提供针对特定控件上下文相关命令的界面元素。这些菜单可以非常方便地添加到.NET MAUI应用的Mac Catalyst和Windows平台上&am…