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

STM32的定时器输入捕获-超声波测距案例

STM32的定时器输入捕获-超声波测距案例

    • gitee代码
    • 输入捕获硬件电路
    • 案例说明
    • 主函数代码

gitee代码

https://gitee.com/xiaolixi/l-stm32/tree/master/STM32F103C8T6/2-1tem-ld-timer-input-pluse

输入捕获硬件电路

在这里插入图片描述

超声波测距

案例说明

  1. 使用超声波测距传感器
  2. 使用tim1的输入捕获测量超声波传感器的返回值,其中Echo引脚使用通道1和通道2的间接选择,Trig使用PB0。距离小于1M点亮LED,LED灯使用PA1

主函数代码

其他代码见仓库

#include "stm32f10x.h"
#include "LED.h"
#include "app_timer.h"
#include "Delay.h"
#include "math.h"#define TRIG GPIOB/**
Echo 		PA8
Trigger PB0
LED 		PA1
*/
void GPIOB_0_init() {// Trigger引脚RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;GPIO_Init(TRIG, &GPIO_InitStruct);
}void timer_init(void) {RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);TIM_TimeBaseInitTypeDef TIM_TIM_TimeBaseInitStruct;TIM_TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;TIM_TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;TIM_TIM_TimeBaseInitStruct.TIM_Period = 65535;TIM_TIM_TimeBaseInitStruct.TIM_Prescaler = 71;TIM_TimeBaseInit(TIM1, &TIM_TIM_TimeBaseInitStruct);// Echo 引脚RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;GPIO_Init(GPIOA, &GPIO_InitStruct);TIM_ICInitTypeDef TIM_ICInitStruct;TIM_ICInitStruct.TIM_Channel = TIM_Channel_1;TIM_ICInitStruct.TIM_ICFilter = 0;TIM_ICInitStruct.TIM_ICPolarity = TIM_ICPolarity_Rising;TIM_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1;TIM_ICInitStruct.TIM_ICSelection = TIM_ICSelection_DirectTI;TIM_ICInit(TIM1, &TIM_ICInitStruct);TIM_ICInitStruct.TIM_Channel = TIM_Channel_2;TIM_ICInitStruct.TIM_ICFilter = 0;TIM_ICInitStruct.TIM_ICPolarity = TIM_ICPolarity_Falling;TIM_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1;TIM_ICInitStruct.TIM_ICSelection = TIM_ICSelection_IndirectTI; // 间接选择TIM_ICInit(TIM1, &TIM_ICInitStruct);
}int main(void)
{GPIOB_0_init();// LED 显示LED_Init();LED1_OFF();timer_init();while(1) {TIM_SetCounter(TIM1, 0);TIM_ClearFlag(TIM1, TIM_FLAG_CC1);TIM_ClearFlag(TIM1, TIM_FLAG_CC2);TIM_Cmd(TIM1, ENABLE);GPIO_WriteBit(TRIG, GPIO_Pin_0, Bit_SET);Delay_us(20);GPIO_WriteBit(TRIG, GPIO_Pin_0, Bit_RESET);while(TIM_GetFlagStatus(TIM1, TIM_FLAG_CC1) == RESET) {;}while(TIM_GetFlagStatus(TIM1, TIM_FLAG_CC2) == RESET) {;}TIM_Cmd(TIM1, DISABLE);// 换算float distance = (TIM_GetCapture2(TIM1) - TIM_GetCapture1(TIM1)) * 1e-6 * 340.0f / 2;if (distance < 1.0) {LED1_ON();} else {LED1_OFF();}Delay_ms(100);}
}
http://www.dtcms.com/a/287748.html

相关文章:

  • 嵌入式学习-PyTorch(9)-day25
  • MVCC(多版本并发控制)介绍及实现原理
  • 算法题(175):小明的游戏
  • Map集合
  • 以太坊的心脏与大脑:详解执行客户端(EL)与共识客户端(CL)
  • NW993NX584美光固态闪存NX559NX561
  • Java 中的函数式编程详解
  • PHP框架在大规模分布式系统的适用性如何?
  • Python构建AI数独求解器:从回溯算法到深度学习
  • 网络基础DAY13-NAT技术
  • (后者可以节约内存/GPU显存)Pytorch中求逆torch.inverse和解线性方程组torch.linalg.solve有什么关系
  • [FFmpeg] AVFormatContext、AVInputFormat、AVOutputFormat | libavformat
  • SQLShift:一款异构数据库存储过程迁移工具
  • 网络大提速,RDMA,IB,iWrap
  • 数据库第三次和第四次作业
  • 异步解决一切问题 |消息队列 |减少嵌套 |hadoop |rabbitmq |postsql
  • 计算机网络体系结构
  • 【Java源码阅读系列56】深度解读Java Constructor 类源码
  • 物联网系统中-设备管理定义方法
  • 物联网iot、mqtt协议与华为云平台的综合实践(万字0基础保姆级教程)
  • Hyperliquid:探索去中心化衍生品交易的“速度与激情”
  • C++ 内存管理详解(new,delete)
  • 1. Spring AI概述
  • 暑假训练七
  • 在非Spring Boot的Spring项目中使用Lock4j
  • 让 Windows 用上 macOS 的系统下载与保姆级使用教程
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘sqlalchemy’问题
  • 力扣经典算法篇-26-长度最小的子数组(暴力求解法,左右指针法)
  • ARINC818协议综述
  • Python+ArcGIS+AI蒸散发与GPP估算|Penman-Monteith模型|FLUXNET数据处理|多源产品融合|专业科研绘图与可视化等