stm32超声波测距程序

发布者:LovingLife2023最新更新时间:2015-07-14 来源: 51hei关键字:stm32  超声波测距 手机看文章 扫描二维码
随时随地手机看文章
闲来传一些电设的时候写的一些小的功能程序,与大家分享交流。
单片机用的是STM32F103VC系列,超声波是淘宝买的一个模块,只有5个引脚,用起来很方便。
用的时候只需要其中4个脚,VCC,GND,TRIG,ECHO。 TRIG接PA8,OUT_PP模式;ECHO接PA9,IN_FLOATING模式。

 
#include "stm32f10x_heads.h"
#include "HelloRobot.h"
#include "display.h"

 
void Tim2_Init(void);

 
void TIM2_IRQHandler(void)
{
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_12)==0)
GPIO_SetBits(GPIOE,GPIO_Pin_12);
else
GPIO_ResetBits(GPIOE,GPIO_Pin_12);

 
 
TIM_ClearFlag(TIM2, TIM_FLAG_Update);
}

 
int main(void)
{
u16 count;
float length;
BSP_Init();
Tim2_Init();//定时器初始化函数
LCM_Init();
delay_nms(5);
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
Display_List_Char(1,0,"distance:"); //PA8:Trig PA0:Echo

 
while (1)
{
GPIO_SetBits(GPIOA,GPIO_Pin_8);
delay_nus(20);//拉高超过10us,发射超声波
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
 
TIM2->CNT=0;//计数器清0
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9)==0);//等待ECHO脚高电平
 
TIM_Cmd(TIM2, ENABLE);// TIM2 enable counter [允许tim2计数]

 
while((GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9)==1)&&(TIM2->CNTARR-10));

 
TIM_Cmd(TIM2, DISABLE);

 
count=TIM2->CNT;//ECHO脚低电平后读取计数器的值,从而算出往返时间
length=count/58.0;
Display_List_Char(1,9," ");
Display_List_Float(1,9,length);
delay_nms(200);
}
}

 
void Tim2_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

 
TIM_DeInit(TIM2);//复位TIM2定时器
TIM_TimeBaseStructure.TIM_Period = 49999;
TIM_TimeBaseStructure.TIM_Prescaler = 71;
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, & TIM_TimeBaseStructure);
 
TIM_ClearFlag(TIM2, TIM_FLAG_Update);
 
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
}

关键字:stm32  超声波测距 引用地址:stm32超声波测距程序

上一篇:NXP_LPC1114_LED灯程序
下一篇:stm32单片机12864驱动

推荐阅读最新更新时间:2024-03-16 14:25

浅谈QSPI的特点以及QSPI的三种工作模式
意法半导体STM32F7系列MCU采用高性能的ARM Cortex-M7核心,借助ST的ART Accelerator™和L1缓存,STM32F7微控制器可提供Cortex-M7内核的最高理论性能,而无论代码是从嵌入式闪存还是由外部存储器执行的:1082 CoreMark / 462 DMIPS在216 MHz f CPU。带有新外围设备的智能架构。可利用STM32系列丰富的外设资源来外扩SRAM芯片。STM32F7支持QSPI. 意法半导体MCU STM32F7系列释放了Cortex-M7内核,AXI和多AHB总线矩阵,用于互连内核,外围设备和存储器。具有高达2MB的嵌入式闪存,在某些设备上具有读-写功能。两个用于以太网的通
[单片机]
从库函数方向入门stm32的个人建议
必备工具:stm32开发板,一本库函数方向的书籍; (1)选定一个开发板后,注意该版对应的stm32型号,一般选F103ZET6,网上资料多,查看它对应的flash的大小,以后开发时会设置编译器用到。 (2)循序渐进地根据书中介绍进行工程的建设(我是使用野火的《stm32库函数开发》),在开始我们要注意其中如core.c,f103.h等等文件的作用,如内核驱动,系统时钟的设置,外设的驱动文件等等这些是那些文件,在以后的工程文件建设中,这些将几乎可以不修改地添加到其他工程文件中,而需要我们写入程序,实现我们想要功能的是如下文件:stm32.it.c:写入中断服务函数;stm32.conf.h:添加需要控制到的外设驱动文件,x
[单片机]
STM32 SPI NRF24L01复习整理
/********** mySpi.h****************/ #ifndef __MY_SPI_H #define __MY_SPI_H #include stm32f10x.h #include stdio.h #define SPI1_CSN_HIGH() GPIO_SetBits(GPIOA,GPIO_Pin_1); #define SPI1_CSN_LOW() GPIO_ResetBits(GPIOA,GPIO_Pin_1); #define SPI2_CSN_HIGH() GPIO_SetBits(GPIOB,GPIO_Pin_12); #define SPI2_CSN_LOW() GPIO
[单片机]
STM32 Bootloader与启动分析
一、STM32 程序下载与Bootloader 三种启动模式如下表: (截图与stm32中文参考资料) 1、从主闪存存储器启动,即从STM32内置的Flash启动,BOOT0=0,BOOT1=X, 一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,复位(软件复位、手动复位、硬件自动复位)后也直接从这启动程序。不需要使用到系统存储区的Bootloader程序。 2、从系统存储器启动,即STM32的ISP了。B00T0=1,B00T1=0,由于串口不能直接把程序下载到内置的flash里面,所以需要使用到ST公司内嵌于系统存储区(flash的某一部分的地址被编为0x1FFF_F000-0x1FFF_F7FF,这就
[单片机]
<font color='red'>STM32</font> Bootloader与启动分析
STM32 串口通信(库函数操作)
1.说在前面: 清明三天小假期,放松一下无可厚非,但是,依旧要完成自己的学习任务 2.串口通信的简单介绍: 1.将串口作为一个沟通的渠道,可以和外界进行接收和发送信号 2.STM32和串口相关的寄存器: 2-1:USART_SR(状态寄存器):存储着MCU的一些状态 2-2:USART_DR(数据寄存器):暂存着一些数据信息 2-3:USART_BRR(波特率寄存器:暂存波特率信息 2-4:USART_CRI(控制寄存器):用于给usart进行使能 3.注:波特率的计算方法: 只要给出相应的时钟频率和设置usartdiv,就可以计算出波特率 3.串口通讯的简单配置和使用 1.其实基于
[单片机]
<font color='red'>STM32</font> 串口通信(库函数操作)
STM32内存管理以及STM32中的堆栈
今天仔细读了一下内存管理的代码,然后还有看了堆栈的相关知识,把以前不太明白的一些东西想通了。 首先,先看一下stm32的存储器结构。 Flash,SRAM寄存器和输入输出端口被组织在同一个4GB的线性地址空间内。可访问的存储器空间被分成8个主要块,每个块为512MB。 FLASH存储下载的程序。 SRAM是存储运行程序中的数据。 所以,只要你不外扩存储器,写完的程序中的所有东西也就会出现在这两个存储器中。 这是一个前提! 堆栈的认知 1.STM32中的堆栈。 2.编程中的堆栈。 在编程中很多时候会提到堆栈这个东西,准确的说这个就是RAM中的一个区域。我们先来了解几个说明: (1) 程序中的所有内容最终只会出现
[单片机]
<font color='red'>STM32</font>内存管理以及<font color='red'>STM32</font>中的堆栈
STM32的串口通信
STM32的串口通信 在基础实验成功的基础上,对串口的调试方法进行实践。硬件代码顺利完成之后,对日后调试需要用到的printf重定义进行调试,固定在自己的库函数中。 b) 初始化函数定义: void USART_Configuration(void); //定义串口初始化函数 c) 初始化函数调用: void UART_Configuration(void); //串口初始化函数调用 初始化代码: void USART_Configuration(void) //串口初始化函数 { //串口参数初始化 USART_InitTypeDef USART_InitStructure
[单片机]
stm32利用oled显示屏与按键进行PID参数调节实现人机交互
上一个学期在学校做四轮车利用PID实现直线走,在调试过程中,我之前是每改一个参数就下载程序进控制板进行调试,观察车是否偏移来确定pid参数,但是后来我发现这样的效率很慢,经别人提醒后,我自己做了一个小小的人机交互界面,来显示pid的参数以及对pid参数进行调整。 以下是显示效果: 接着我在附上主要代码: // 功能描述 : OLED 7针SPI接口演示例程(STM32F103系列) // 说明: // ---------------------------------------------------------------- // GND 电源地 // VCC 3.
[单片机]
<font color='red'>stm32</font>利用oled显示屏与按键进行PID参数调节实现人机交互
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved