STM32单片机的基本原理与应用(七)

超声波测距实验

基本原理

超声波测距实验是STM32单片机通过控制HC-SR04超声波模块,使其发送超声波,遇到物体反射回超声波来实现距离测量,其原理就是在发射超声波到接收超声波会有一段时间,而超声波在空气中传播的速度为声速(340M/S),时间*声速就是超声波的往返距离,那么测量距离=(往返时间*声速)/2=超声波往返距离/2。
HC-SR04是怎样做到发送和接收超声波的呢?HC-SR04具有两个控制端口TRIG和ECHO,TRIG用于触发测距,ECHO用于检测是否有超声波信号返回。TRIG给至少10us的高电平信号(超过10us表示在正常工作),接着模块自动发送8个40khz的方波,自动检测是否有信号返回。有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。

实验原理图

在这里插入图片描述

程序代码

1、超声波发送与接收

void Wave_SRD_Strat(void)
{GPIO_SetBits(GPIOB,Trig);   //将Trig设置为高电平delay_us(20);               //持续大于10us触发,触发超声波模块工作GPIO_ResetBits(GPIOB,Trig); 	
}
void EXTI9_5_IRQHandler(void)
{delay_us(10);if(EXTI_GetITStatus(EXTI_Line8)!=RESET){TIM_SetCounter(TIM3,0);TIM_Cmd(TIM3,ENABLE);while(GPIO_ReadInputDataBit(GPIOF,Echo));  //等待低电平TIM_Cmd(TIM3,DISABLE);Distance=TIM_GetCounter(TIM3)*340/200.0;if(Distance>0){printf("Distance:%f cm\r\n",Distance);}	EXTI_ClearITPendingBit(EXTI_Line8);}
}

2、主函数

int main(void){		delay_init();	    	 //延时函数初始化	  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(115200);	 //串口初始化为115200//EXTIX_Init();		 	//外部中断初始化Timer_SRD_Init(5000,7199);Wave_SRD_Init(); while(1){	    Wave_SRD_Strat();	delay_ms(2000);       	}}

实验现象

在这里插入图片描述
运行程序后打开串口调试助手(注意选择波特率为115200),此时可以观察到串口实时输出超声波距离,可用障碍物遮挡不断实验,障碍物距离不同显示的数据不同。

IIC/EEPROM实验

单片机通过代码模拟IIC总线并对EEPROM芯片AT24C256进行读写,单片机会在0号地址写入字符串‘STM32 IIC TEST’,然后重新读取0号地址并通过TFTLCD屏显示出来。

AT24C256外围电路原理图

在这里插入图片描述
A0、A1:地址选择输入端。
SCL:串行时钟输入。上升沿将SDA上的数据写入存储器,下降沿从存储器读出数据送SDA上。
SDA:双向串行数据输入输出口。用于存储器与单片机之间的数据交换。
WP:写保护输入。此引脚与地相连时,允许写操作;与VCC相连时,所有的写存储器操作被禁止。如果不连,芯片内部下拉到地。
EEPROM 进入开始状态后,需要一个8位的地址字来选择芯片进行读写。设备地址字由5位0、1组成的命令字和两位地址选择位A1、A0和一位读/写操作位构成。对于 AT24C256,命令字为“10100”,同一串行总线上可以连接4个设备,由地址线A1,A0加以区分。如只有一个AT24C256,A1,A0都取 0。最低位为1表示读操作,0表示写操作。
写操作有写页和写字节两种,读操作有当前地址读、随机读、读串三种方式。

程序代码

此处仅展示主函数。

int main(void){	 u8 datatemp[SIZE];delay_init();	    	 //延时函数初始化	  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级uart_init(115200);	 	//串口初始化为115200LED_Init();		  		//初始化与LED连接的硬件接口LCD_Init();			   	//初始化LCD 		AT24CXX_Init();			//IIC初始化 POINT_COLOR=RED;//设置字体为红色 LCD_ShowString(30,50,200,16,16,"STM32");	LCD_ShowString(30,70,200,16,16,"IIC TEST");	LCD_ShowString(30,90,200,16,16,"STM32F103ZET6");LCD_ShowString(30,110,200,16,16,"2015/1/15");	//LCD_ShowString(30,130,200,16,16,"KEY1:Write  KEY0:Read");	//显示提示信息		while(AT24CXX_Check())//检测不到24c02{LCD_ShowString(30,150,200,16,16,"24C0256 Check Failed!");printf("24C0256 Check Failed!");delay_ms(500);LCD_ShowString(30,150,200,16,16,"Please Check!      ");delay_ms(500);LED0=!LED0;//DS0闪烁}LCD_ShowString(30,150,200,16,16,"24C0256 Ready!");    POINT_COLOR=BLUE;//设置字体为蓝色	  LCD_Fill(0,170,239,319,WHITE);//清除半屏    LCD_ShowString(30,170,200,16,16,"Start Write 24C0256....");AT24CXX_Write(0,(u8*)TEXT_Buffer,SIZE); //写入LCD_ShowString(30,170,200,16,16,"24C0256 Write Finished!");//提示传送完成delay_ms(1800);			LCD_ShowString(30,170,200,16,16,"Start Read 24C0256.... ");AT24CXX_Read(0,datatemp,SIZE);  //读取LCD_ShowString(30,170,200,16,16,"The Data Readed Is:");//提示传送完成LCD_ShowString(30,190,200,16,16,datatemp);//显示读到的字符串while(1);}

实验现象

运行程序可以发现TFTLCD屏上显示EEPROM中0号地址保存的字符串“STM32 IIC TEST”。

触摸屏实验

触摸屏实验就是利用单片机制作一个绘图板功能,实现手、触摸笔写画功能。其主要采用电容式触摸屏。 电容式触摸屏主要分为两种:
1、 表面电容式电容触摸屏
表面电容式触摸屏技术是利用 ITO(铟锡氧化物,是一种透明的导电材料)导电膜,通过电场感应方式感测屏幕表面的触摸行为进行。但是表面电容式触摸屏有一些局限性,它只能识别一个手指或者一次触摸。
2、 投射式电容触摸屏
投射电容式触摸屏是传感器利用触摸屏电极发射出静电场线。一般用于投射电容传感技术的电容类型有两种:自我电容和交互电容。
自我电容又称绝对电容,是最广为采用的一种方法,自我电容通常是指扫描电极与地构成的电容。
交互电容又叫做跨越电容,它是在玻璃表面的横向和纵向的 ITO 电极的交叉处形成电容。交互电容的扫描方式就是扫描每个交叉处的电容变化,来判定触摸点的位置。

主函数

int main(void){	 		    delay_init();	    	 //延时函数初始化	  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级uart_init(115200);	 	//串口初始化为115200 LED_Init();			     //LED端口初始化LCD_Init();	
//	KEY_Init();	 	tp_dev.init();	 POINT_COLOR=RED;//设置字体为红色 LCD_ShowString(60,50,200,16,16,"STM32");	LCD_ShowString(60,70,200,16,16,"TOUCH TEST");	LCD_ShowString(60,90,200,16,16,"STM32F103ZET6");LCD_ShowString(60,110,200,16,16,"2020/1/15");//LCD_ShowString(60,130,200,16,16,"Press KEY0 to Adjust");	
//   	if(tp_dev.touchtype!=0XFF)LCD_ShowString(60,130,200,16,16,"Press KEY0 to Adjust");//电阻屏才显示delay_ms(1500);Load_Drow_Dialog();	 	if(tp_dev.touchtype&0X80)ctp_test();	//电容屏测试else rtp_test(); 						//电阻屏测试
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大厂AI课学习笔记】【1.6 人工智能基础知识】(3)神经网络

深度学习是机器学习中一种基于对数据进行表征学习的算法。观测值(例如一幅草莓照片)可以使用 多种方式来表示,如每个像素强度值的向量,或者更抽象地表示成一系列边、特定形状的区域等。 深度学习的最主要特征是使用神经网络作为计算模型。神经网络模型 …

汉服租赁网站:Java技术的文化应用

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

指纹浏览器能为TikTok运营提供哪些便利?

在数字时代,TikTok已成为全球短视频平台的佼佼者,吸引了数以亿计的活跃用户。为了更有效地进行TikTok运营,许多人开始探索先进的工具和技术。本文将重点探讨指纹浏览器如何为TikTok运营提供便利,提高账户管理的效率和安全性。 1.账…

用code去探索理解Llama架构的简单又实用的方法

除了白月光我们也需要朱砂痣 我最近也在反思,可能有时候算法和论文也不是每个读者都爱看,我也会在今后的文章中加点code或者debug模型的内容,也许还有一些好玩的应用demo,会提升这部分在文章类型中的比例 今天带着大家通过代码角度…

Ubuntu Desktop - Details (设备详情)

Ubuntu Desktop - Details [设备详情] 1. OverviewReferences 1. Overview System Settings -> Details -> Overview ​ References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

学习Android的第十天

目录 Android CheckBox 复选框 获得选中的 CheckBox 的值 自定义点击效果 改变文字与选择框的相对位置 修改文字与选择框的距离 Android ToggleButton 开关按钮 改变 ToggleButton 的状态和文本 Android Switch 开关 改变 Switch 的状态和文本 Android CheckBox 复选框…

骑砍战团MOD开发(44)-可编程渲染管线shader编程

一.可编程渲染管线 在GPU进行3D模型投射到2D平面过程中,渲染管线算法对开发者开放,目前支持的编程语言有OpenGL的ARB语言(pp文件),Direct3D的HLSL高级shader编程语言(fx文件). Direct3D提供一下API实现程序加载shader着色器文件: D3DXCreateEffectFromFile(gDevice,"fxfn…

《UE5_C++多人TPS完整教程》学习笔记11 ——《P12 Steam 地区(Steam Regions)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— P12 Steam 地区(Steam Regions)》 的学习笔记,该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版,UP主(也是译者&#…

sheng的学习笔记-docker部署springboot

部署文章目录:目录 docker部署,原理,命令,可以参考:docker原理图,部署,命令 目录 将springboot部署到docker中 遇到过的问题: pom配置 操作步骤 生成jar 构建镜像 查看镜像d…

使用client-only 解决组件不兼容SSR问题

目录 前言 一、解决方案 1.基于Nuxt 框架的SSR应用 2.基于vue2框架的应用 3.基于vue3框架的应用 二、总结 往期回顾 前言 最近在我的单页面SSR应用上开发JSON编辑器功能,在引入组件后直接客户端跳转OK,但是在直接加载服务端渲染的时候一直报这…

java基础(3) 异常处理 -反射

异常处理 处理异常一般有两种 约定返回错误码。,比如读写一个文件,返回code为0则成功,返回1表示不存在,返回2表示没权限…在语言层面上提供一个异常处理机制。(java就属于第二种) java的异常 java内置了一套异常处理机制&…

基于微信小程序的在线课堂的研究与实现,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…