历史上的今天
返回首页

历史上的今天

今天是:2025年04月08日(星期二)

正在发生

2019年04月08日 | STM32F103 超声波 串口输出数据

2019-04-08 来源:eefocus

#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即可。但是不要忘了在此之前还要对编译器相关配置,这里请自行百度,很简单的。

推荐阅读

史海拾趣

G-Mag Usa公司的发展小趣事

为了进一步提升市场竞争力,G-Mag在2015年启动了国际化布局战略。公司首先在欧洲市场设立了研发中心和销售中心,随后又逐步拓展到亚洲、非洲等多个地区。在国际化过程中,G-Mag注重本土化运营和品牌建设,根据不同地区的市场特点和消费者需求推出定制化产品和服务。同时,G-Mag还积极参与国际展会和交流活动,提升品牌知名度和影响力。通过国际化布局,G-Mag成功打开了全球市场的大门,实现了业务的快速增长和品牌的全球化发展。

Hirect公司的发展小趣事
通过优化变压器的设计(如采用低损耗材料、改进绕组结构等)和选择合适的晶闸管(如低导通压降、低开关损耗的晶闸管),来减小电路中的能量损耗。
Cotco公司的发展小趣事

在电子行业快速发展的浪潮中,Cotco公司于XXXX年正式成立,由几位在电子行业有着丰富经验的企业家和技术专家共同创立。初期,公司专注于电子元器件的分销和贸易,凭借创始团队成员在行业内的人脉和资源,Cotco很快与多家知名电子元器件制造商建立了合作关系,开始为客户提供优质的元器件采购服务。随着市场需求的不断增长,Cotco的业务也逐渐扩展,开始涉足电子产品的设计和生产领域。

Horizon Electronics Enterprises Group公司的发展小趣事

随着技术产品的成功推出,Horizon开始积极拓展市场。公司首先在国内市场建立了完善的销售和服务网络,通过参加行业展会、举办技术研讨会等方式提升品牌知名度。同时,Horizon也意识到国际市场的巨大潜力,逐步在海外设立分支机构,将产品推向全球市场。通过持续的市场推广和优质的客户服务,Horizon的品牌影响力逐渐增强,成为电子行业内备受瞩目的新兴企业。

Adaptive Interconnect Electronics, Inc. [AIE]公司的发展小趣事

AIE公司自2005年成立以来,一直致力于推动电子测试配件的安全规范标准化。公司积极与各大电子厂商、行业协会以及标准化组织展开合作,共同制定了一系列关于测试配件的性能规格和安全标准。这一举措不仅提升了AIE产品的竞争力,也促进了整个电子行业的健康发展。通过与业界的紧密合作,AIE逐渐在电子测试配件领域树立了良好的口碑。

Compex Corporation公司的发展小趣事

为了进一步扩大市场份额,Compex Corporation开始实施全球化战略。公司积极开拓国际市场,与全球多个国家的客户建立了合作关系。同时,公司还在海外设立了生产基地和研发中心,以便更好地服务当地市场。这一战略的实施使得公司的业务范围不断扩大,国际影响力也逐渐增强。

问答坊 | AI 解惑

RFIC是分布参数还是集总参数?

与各位探讨: RFIC的整体电路结构和集总参数射频电路区别不大,差异是因为在芯片里有些元件需要用工艺可以实现的方式设计。 集成电路有它的特点,例如在IC中,线间距离和线的尺寸都很小,由此在分立电路中不会出现或影响不显著的一些物理效应( ...…

查看全部问答>

无法打开包括文件:“ca_merge30.h”

在编译时出现无法打开包括文件:“ca_merge30.h”,寻求大侠们帮忙。。。。谢谢…

查看全部问答>

新手请教GPRS发手机短信中的PDU模式

我用GPRS调试发短信,但是不知道怎么把文本的转换成PDU模式的,也可以是怎么把超级终端中收到的一堆16进制的转换成中文?…

查看全部问答>

关于传感器采样液体微量变化的问题?

关于传感器采样液体微量变化的问题?     想用传感器采样液体的微量变化,然后试了试挂吊瓶,用传感器采样滴液的变化情况,感觉液体在滴啊,但是采样值却是一会大一会小,完全没有规律,一点也没呈现出线性变小的趋势。这是怎么回事? ...…

查看全部问答>

用CETK测试CE下的DirectDraw的性能,测试结果显示330号的FLIP功能测试通过,但为什么DirectDraw的DDEX1测试例子测试不行呢?CE自

用CETK测试CE下的DirectDraw的性能,测试结果显示330号的FLIP功能测试通过,但为什么DirectDraw的DDEX1测试例子测试不行呢?CE自带的DDEX1例子调到了FLIP()函数…

查看全部问答>

pda上判断是否有存储卡或者内置存储卡

用vc2005,ppc2003,请问各位大侠我该如何判断pda上是否有存储卡或内置的存储卡并读出名字呢…

查看全部问答>

基于arm9的开发板运行一个wince系统,读写总线问题

基于arm9(EP9302)的开发板运行一个wince系统,读写总线问题: 在wince上写了一个小的测试程序, while循环读取一个虚拟地址(DI)的值, 再把这个值写到另一个虚拟地址(DO)上. 结果是:用示波器测得总线上的写信号正常, 读信号间隔时间有时要几秒钟才 ...…

查看全部问答>

据闻WINCE下能够定制触摸屏校准,具体如何定制呢?有大侠指教吗?

据闻WINCE下能够定制触摸屏校准,具体如何定制呢?有大侠指教吗?…

查看全部问答>

OLEDB 方法中的IID_IRowsetIndex 中的seek相关问题

请问一下各位大侠,我在一个数据表中建了三列(即3个字段)都是WCHAR类型,我想根据第二或第三列的值查询某一行的数据,请问要怎么实现啊?急急………

查看全部问答>

问个wince5.0的中断问题

就以SD卡为例子 注册表 [HKEY_LOCAL_MACHINE\\Drivers\\BuiltIn\\SDHC_SMDK2440]     \"Order\"=dword:21     \"Dll\"=\"sdhc_sc2440.dll\"     \"Prefix\"=\"SDH\"         \"DMAChann ...…

查看全部问答>