STM32F103 超声波 串口输出数据

最新更新时间:2019-04-08来源: eefocus关键字:STM32F103  超声波  串口输出数据 手机看文章 扫描二维码
随时随地手机看文章

#include "cj.h"

#include "stm32f10x.h"

#include "delay.h"

#include "usart.h"


unsigned int overcount=0;



void NVIC_Config(void)//优先级设置

{

NVIC_InitTypeDef NVIC_InitStructer;


NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);


NVIC_InitStructer.NVIC_IRQChannelPreemptionPriority=0;

NVIC_InitStructer.NVIC_IRQChannelSubPriority=0;

NVIC_InitStructer.NVIC_IRQChannel=TIM2_IRQn;//

NVIC_InitStructer.NVIC_IRQChannelCmd=ENABLE;


NVIC_Init(&NVIC_InitStructer);

}


void CH_SR04_Init(void)//超声波模块初始化

{

GPIO_InitTypeDef GPIO_InitStructer;

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructer;


RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);


GPIO_InitStructer.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructer.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_InitStructer.GPIO_Pin=GPIO_Pin_8;

GPIO_Init(GPIOB, &GPIO_InitStructer);//设置PB8作为触发引脚



GPIO_InitStructer.GPIO_Mode=GPIO_Mode_IN_FLOATING;

GPIO_InitStructer.GPIO_Pin=GPIO_Pin_9;

GPIO_Init(GPIOB,&GPIO_InitStructer);//设置PB9作为接受引脚


TIM_DeInit(TIM2);

TIM_TimeBaseInitStructer.TIM_Period=65534;

TIM_TimeBaseInitStructer.TIM_Prescaler=71; //经过预分频后,计数器的值,每隔0.5us就加一。

TIM_TimeBaseInitStructer.TIM_ClockDivision=TIM_CKD_DIV1;//

TIM_TimeBaseInitStructer.TIM_CounterMode=TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructer);


 


    //TIM_ITConfig(TIM2,TIM_IT_Update|TIM_IT_CC1,ENABLE);//


TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//

NVIC_Config();

TIM_Cmd(TIM2,DISABLE);//


}



 


float Senor_Using(void)//测距函数

{

float length=0,sum=0;

u16 tim;

unsigned int i=0;


 


while(i!=5)

{


PBout(8)=1; //

delay_us(20); //

PBout(8)=0;


while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==RESET);

TIM_Cmd(TIM2,ENABLE);//

i+=1;

while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==SET);//

TIM_Cmd(TIM2,DISABLE);//


tim=TIM_GetCounter(TIM2);//


length=(tim+overcount*1000)/58.0;//


sum=length+sum;

TIM2->CNT=0; //

overcount=0; //

delay_ms(100);

}

length=sum/5;

return length;//

}


 


void TIM2_IRQHandler(void) //

{

if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)

  {

TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//

overcount++;


  }

}

 


由于是复制粘贴过来的,所以只是对部分地方进行了注释。其实很简单,就是通过一个引脚输出超过10us高电平作为脉冲信号,在设置一个引脚作为接收引脚。当接收到高电平,就开启定时器计数,当检测到低电平,就停止计数。将数值取出来,通过公式计算即可得到距离。最后是这个串口输出,直接#include "stdio.h"后直接用pirntf即可。但是不要忘了在此之前还要对编译器相关配置,这里请自行百度,很简单的。

关键字:STM32F103  超声波  串口输出数据 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/2019/ic-news040843724.html

上一篇:关于STM32F103型号的矩阵按键的程序书写
下一篇:stm32中pwm频率和占空比设置

推荐阅读

STM32F103以SPI 驱动128*128的TFT彩屏
0.  关于本文:其实我一直都比较懒,不喜欢写博客。但网上关于详细讲解SPI驱动LCD的文章比较少,虽然也能下载到一些案例程序,但对于初学者来说,如果不懂LCD驱动的原理,不懂如何对文字和图片取模,即便拿到了别人的代码,也是一脸懵很难移植。所以写下本文,大家有不明白的,欢迎留言区一起交流,谢谢!1.  实验任务:本实验使用 STM32F103R6 芯片,通过软件SPI的方式,控制128*128分辨率的LCD,实现在液晶屏上显示汉字,英文,数字,图片等内容。2. 实验效果展示:   3.  硬件设计4. 硬件SPI和软件SPI的比较本实验用的是软件SPI的方式来控制LCD。好处是可以使
发表于 2022-01-25
<font color='red'>STM32F103</font>以SPI 驱动128*128的TFT彩屏
STM32F103单片机使用内部RC振荡器做时钟源
平时在做项目的时候都用的是外部晶振做为时钟源,想试试用内部RC振荡器做为时钟源,在网上搜了一下如何设置内部时钟,发现资料比较少的。决定将设置内部RC振荡器做为时钟源的方法记录下来。用的单片机是STM32F103C8T6,项目工程是在正点原子的示例代码上修改来的。用一个LED工程测试,在主程序中闪烁LED灯。#include "sys.h"#include "delay.h"#include "usart.h"#include "led.h"int main ( void ){    delay_init();   
发表于 2022-01-06
STM32F103单片机生成16路PWM波
单片机输出pwm波在项目中是恨常用的一个功能,今天就总结一下用STM32F103C8T6单片机输出16路 pwm波。使用keil5软件,用标准库函数来实现。首先看定时器初始化void TIM1_PWM_Init(u16 arr, u16 psc){    GPIO_InitTypeDef GPIO_InitStructure;    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;    TIM_OCInitTypeDef TIM_OCInitSturcture;     RCC_APB2Pe
发表于 2022-01-06
<font color='red'>STM32F103</font>单片机生成16路PWM波
STM32F103单片机输出相位可调PWM波
STM32定时器功能如下通常使用的是PWM模式,可以通过PWM功能可以生成频率和占空比可调的方波信号,有时候需要生成初始相位可调的方波,PWM功能就就不能满足要求了。可以通过输出比较模式来实现。输出比较模式是将计数器CNT的值和捕获比较寄存器CCR的对比,当CNT值等于CCR的值时,翻转输出电平。通过捕获比较寄存器CCMR模式设置位的描述可以看出,输出比较模式只有当 CCR = CNT时,输出电平才会翻转。而PWM模式下 CNT < CCR 时输出一个电平,CNT > CCR时输出相反的电平。通过一个示意图来看看PWM输出模式上图中是PWM输出的示意图,可以看出CNT的值从变化范围是 0---ARR,之间,CNT的值在C
发表于 2022-01-06
<font color='red'>STM32F103</font>单片机输出相位可调PWM波
STM32F103输出互补PWM波
STM32F103单片机定时器自带互补PWM波形输出功能,利用定时器输出比较模式,不仅可以输出互补的 PWM波,还可以设置输出方波的起始相位和死区时间。下面就总结一下如何实现PWM互补输出。void TIM1_PWM_DeadtimeInit( u16 arr, u16 psc, u16 ccr1, u16 ccr2, u16 deadtime ){    GPIO_InitTypeDef GPIO_InitSturcture;    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;    TIM_OCInitTypeDe
发表于 2022-01-06
<font color='red'>STM32F103</font>输出互补PWM波
STM32F103单片机JTAG端口重映射
STM32单片机复位后,JTAG口默认是被占用的。如果想将JTAG占用的几个IO口设置为普通IO口,就需要进行端口重映射。复位后端口默认功能可以在STM32参考手册上看到要将JTAG占用的这些口设置为普通IO口时,需要用复用功能重映射,在程序开始执行时将JTAG口重映射为普通IO口。将JTAG要设置为普通 IO口时,需要设置AFIO_MAPR寄存器的SWJ_CFG位。如果用寄存器操作的话,就直接设置这个寄存器的值就行。如果用库函数操作的话,可以直接调用库函数void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState)。这个库函数的具体实现可以在stm3
发表于 2022-01-05
<font color='red'>STM32F103</font>单片机JTAG端口重映射
小广播
设计资源 培训 开发板 精华推荐

何立民专栏 单片机及嵌入式宝典

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

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