当前位置: 首页 > news >正文

STM32定时器超声波测距实验手册

1. 实验目标

  • 使用STM32 HAL库和定时器实现超声波测距功能。

  • 当超声波模块前方障碍物距离 < 10cm 时,点亮板载LED。


2. 硬件准备

硬件模块说明
STM32开发板STM32F103C8T6
HC-SR04模块超声波测距模块
杜邦线若干连接模块与开发板

3. 硬件连接

HC-SR04引脚STM32引脚备注
VCC3.3V
TrigPA0GPIO_Output
EchoPA8GPIO_Input(建议串联1kΩ电阻)
GNDGND

4. STM32CubeMX配置

  • GPIO配置

  • 定时器配置TIM1

  • 设置通道模式参数

  • 设置通道参数

  • 设置板载LED参数

  • 设置时基单元参数

5.代码实现

功能流程分析

while (1)
  {
		//1.CNT归零
		__HAL_TIM_SET_COUNTER(&htim1,0);
		//1.CC1,CC2清除
		__HAL_TIM_CLEAR_FLAG(&htim1,TIM_FLAG_CC1);
		__HAL_TIM_CLEAR_FLAG(&htim1,TIM_FLAG_CC2);

		//2.启动输入捕获
		HAL_TIM_IC_Start(&htim1,TIM_CHANNEL_1);
		HAL_TIM_IC_Start(&htim1,TIM_CHANNEL_2);

		//3.向Trig发送脉冲
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);
		for(uint32_t i = 0;i < 10;i++);
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);
		
		//4.等待测量结束
		uint8_t success = 0; // 测量是否成功,0 - 失败,1 - 成功
		uint32_t expireTime =  HAL_GetTick()+50; //最长等待时间
		
		while(expireTime > HAL_GetTick()){
			uint32_t cc1Flag = __HAL_TIM_GET_FLAG(&htim1, TIM_FLAG_CC1);
			uint32_t cc2Flag = __HAL_TIM_GET_FLAG(&htim1, TIM_FLAG_CC2);
			if(cc1Flag && cc2Flag){
				success = 1;
				break;
			}
		}
		
		//5.关闭定时器
		HAL_TIM_IC_Stop(&htim1,TIM_CHANNEL_1);
		HAL_TIM_IC_Stop(&htim1,TIM_CHANNEL_2);
		
		//6.计算测量结果
		if(success == 1){
			uint16_t ccr1 = __HAL_TIM_GET_COMPARE(&htim1, TIM_CHANNEL_1);
			uint16_t ccr2 = __HAL_TIM_GET_COMPARE(&htim1, TIM_CHANNEL_2);
			
			float pulseWidth = (ccr2 - ccr1) * 1e-6f;
			
			float distance = 340.0f * pulseWidth / 2.0f;
				
			if(distance < 0.2){
				HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
			}else{
				HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
			}
		}
		   
    }
 
}

6.代码解析

相关文章:

  • 【VxLAN】二、VxLAN-EVPN分布式网关-ensp实验
  • Android Trace埋点beginSection打tag标签,Kotlin
  • 【Linux】命令行参数 | 环境变量(四)
  • Educational Codeforces Round 174 (Rated for Div. 2)
  • 充电枪和充电桩的区别
  • 破解密码防线:渗透测试中的密码攻击手法汇总
  • 敏捷原则与实践(Agile principles and practices)
  • 【RAG系列】当RAG遇到多模态 - 打开新世界的大门
  • Redis版本的EOL策略与升级路径(刷到别划走)
  • 蓝桥杯 6.数学
  • Tomcat基础知识及其配置
  • Linux——基本指令
  • 解决Vscode项目同时运行两个项目终端无法自动叠加的问题
  • 【Python 语法】算法合集
  • Python的多继承
  • c++中深拷贝和浅拷贝的联系和区别
  • VirtualBox启动报错WIN32_EXIT_CODE : 1077 (0x435)
  • AQS源码级别解析
  • 查找Excel包含关键字的行
  • 【星云 Orbit-F4 开发板】05. NVIC中断分组与配置(重要)
  • 怎么做网站实惠/查域名的网址
  • 桂林百姓生活网/seo专员是什么职位
  • 网站设计描述/代运营竞价公司
  • 网站建设技术服务费怎么入账/软文广告经典案例800字
  • 网站与网页的区别./网络营销广告案例
  • 红色 网站配色/菏泽地网站seo