历史上的今天
返回首页

历史上的今天

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

正在发生

2019年08月19日 | stm32驱动超声波模块

2019-08-19 来源:eefocus

#define HCSR04_PORT   GPIOB

#define HCSR04_CLK    RCC_APB2Periph_GPIOB

#define HCSR04_TRIG   GPIO_Pin_8

#define HCSR04_ECHO   GPIO_Pin_9

#define TRIG_Send(n)  do{               

if(n == 0)       

GPIO_ResetBits(HCSR04_PORT,HCSR04_TRIG);

else if(n == 1) 

GPIO_SetBits(HCSR04_PORT,HCSR04_TRIG); 

}while(0) 



#define ECHO_Reci     GPIO_ReadInputDataBit(GPIOB,HCSR04_ECHO)



void UltrasonicInit(void)

{



GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(HCSR04_CLK, ENABLE);

 

//IO初始化

GPIO_InitStructure.GPIO_Pin   = HCSR04_TRIG;       //发送电平引脚

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;//推挽输出

GPIO_Init(HCSR04_PORT, &GPIO_InitStructure);

GPIO_ResetBits(HCSR04_PORT,HCSR04_TRIG);

 

GPIO_InitStructure.GPIO_Pin  = HCSR04_ECHO;     //返回电平引脚

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入

GPIO_Init(HCSR04_PORT, &GPIO_InitStructure);  

GPIO_ResetBits(HCSR04_PORT,HCSR04_ECHO);   



TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;     //生成用于定时器设置的结构体

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);   //使能对应RCC时钟


//配置定时器基础结构体

TIM_DeInit(TIM6);

TIM_TimeBaseStructure.TIM_Period = (1000-1);          //设置在下一个更新事件装入活动的自动重装载寄存器周期的值         计数到1000为1ms

TIM_TimeBaseStructure.TIM_Prescaler =(72-1);          //设置用来作为TIMx时钟频率除数的预分频值  1M的计数频率 1US计数

TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//不分频

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式

TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);       //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位         



TIM_ClearFlag(TIM6, TIM_FLAG_Update);                 //清除更新中断,免得一打开中断立即产生中断

TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);              //打开定时器更新中断

  


NVIC_InitTypeDef NVIC_InitStructure;


NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn;            //选择串口1中断

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //抢占式中断优先级设置为1

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;         //响应式中断优先级设置为1

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;            //使能中断

NVIC_Init(&NVIC_InitStructure);


TIM_Cmd(TIM6,DISABLE);

}



//定时器6中断服务程序

u32 msHcCount = 0;

void TIM6_IRQHandler(void)   //TIM6中断

{

if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否

{

TIM_ClearITPendingBit(TIM6, TIM_IT_Update);       //清除TIMx更新中断标志 

msHcCount++;

}

}



static void OpenTimerForHc()    //打开定时器

{

TIM_SetCounter(TIM6,0);      //清除计数

msHcCount = 0;

TIM_Cmd(TIM6, ENABLE);       //使能TIMx外设

}

 

static void CloseTimerForHc()  //关闭定时器

{

TIM_Cmd(TIM6, DISABLE);      //使能TIMx外设

}



//获取定时器时间

u32 GetEchoTimer(void)

{

u32 t = 0;

t = msHcCount*1000;                  //将MS转换成US

t += TIM_GetCounter(TIM6);           //得到总的US

TIM6->CNT = 0;                       //将TIM6计数寄存器的计数值清零

return t;

}



//一次获取超声波测距数据 两次测距之间需要相隔一段时间,隔断回响信号

//为了消除余震的影响,取五次数据的平均值进行加权滤波。

float Hcsr04GetLength(void )

{


u32 t = 0;

int i = 0;

float lengthTemp = 0;

float sum = 0;



while(i!=5)

{

/*发送一个20ms的脉冲*/

TRIG_Send(1);             

osDelay(20);

TRIG_Send(0);


while(ECHO_Reci == 0);     //等待接收口高电平输出(超声波发出)

OpenTimerForHc();          //打开定时器

while(ECHO_Reci == 1);     //等待超声波返回

CloseTimerForHc();         //关闭定时器

t = GetEchoTimer();        //获取时间,分辨率为1US

lengthTemp = ((float)t*17/1000.0);//cm

sum = lengthTemp + sum ;

 i = i + 1;

  }


lengthTemp = sum/5.0;

return lengthTemp;



}


推荐阅读

史海拾趣

A-BRIGHT公司的发展小趣事

在快速发展的同时,A-BRIGHT公司深知品质的重要性。公司加大了对品质管理的投入,引入了先进的生产线和检测设备,并建立了严格的质量管理体系。通过持续改进和优化生产流程,A-BRIGHT的产品质量得到了显著提升,赢得了客户的信任和好评。

Hsuan Mao Technology Co公司的发展小趣事

随着全球环保意识的提高,A-BRIGHT公司积极响应环保号召,将环保理念融入到产品研发和生产中。公司研发了一系列节能环保的电子产品,不仅满足了客户的需求,也为全球环保事业做出了贡献。这一举措提升了A-BRIGHT的品牌形象,也为其在竞争激烈的市场中赢得了更多客户的青睐。

这些故事虽然是虚构的,但它们基于电子行业的发展趋势和可能情况,展示了A-BRIGHT公司可能的发展路径和成功因素。希望这些故事能够满足您的需求。

G24 Innovations公司的发展小趣事

远阳(FLYOUNG)公司创立于21世纪初,正值中国电子行业快速发展的黄金时期。公司创始人李先生,凭借在电子行业多年的技术积累和敏锐的市场洞察力,决定创立一家专注于数据工程电缆研发与生产的公司。初期,远阳面临着资金短缺和技术瓶颈的双重挑战。但李先生带领团队夜以继日地研发,终于成功推出了首款高性能HDMI线,其卓越的品质迅速赢得了市场的认可。这一技术创新不仅为公司赢得了第一批忠实客户,也为远阳后续的技术发展奠定了坚实基础。

Ford Aerospace & Communications Corp公司的发展小趣事

随着航空业的逐渐发展,福特汽车公司意识到航空通信技术的重要性。在20世纪30年代,福特开始投资研发航空无线电通信系统,旨在提高飞行中的通信效率和安全性。这一举措不仅促进了福特在航空技术领域的进一步拓展,也为后来的航空通信标准制定提供了参考。

DAVE Embedded Systems公司的发展小趣事

DAVE Embedded Systems深知品质对于企业发展的重要性。他们建立了严格的质量管理体系,确保从原材料采购到产品制造的每一个环节都符合高标准的质量要求。同时,公司还提供了优质的售后服务,为客户提供了全方位的技术支持和解决方案。这些举措不仅赢得了客户的信任和支持,还为公司树立了良好的口碑。

Focus公司的发展小趣事

Focus Enhancements, Inc.(根据参考文章中的信息)是一家无晶圆厂集成电路(IC)公司,专注于为家庭影院系统、便携式媒体播放器、智能手机等消费电子设备开发和销售IC解决方案和组件。自1996年以来,该公司凭借其强大的研发团队和敏锐的市场洞察力,不断推出创新产品,赢得了包括微软、东芝、LG、索尼等全球知名OEM厂商的青睐。随着物联网和智能设备的兴起,Focus Enhancements加大了对低功耗、高性能芯片的研发力度,成功拓展了智能家居、可穿戴设备等领域的应用市场。

问答坊 | AI 解惑

一种新型基于MEMS的GTI滤波器的设计

简介   波分复用器和解复用器几乎是所有WDM系统和网络的主要组成部分。从传统意义上讲,多路复用/解复用器(de/mux)都属于静态器件,随着温度的变化波长范围会有少许改变。几乎在第一个静态复用/解复用器获得商用的同时,人们就梦想出现一种能实 ...…

查看全部问答>

三星官网下载源码

问下大家有谁在三星官网上下载过资料,比如2440的相关源码驱动已经引导程序之类的?还有啊,官网到底一般都提供哪些资料?我在疑惑,对于向VIVI之类的引导程序,三星这些它提供不? 谢谢…

查看全部问答>

试用期快结束了,怎么和老总谈呢

大学刚毕业就直奔人才市场,很不错的在这家公司面试,当时说好了刚毕业工资会低点2200,包吃住的,转正3000.总体觉得还可以吧,就很高兴的周一去公司签了,可是谈工资的时候却说吃住要扣400也就是说工资1800了,当时真的很郁闷吧。说了包吃住结果这 ...…

查看全部问答>

LM3S811驱动SSD1306 OLED 程序!

驱动OLED管脚为PB2,PB3,OLED驱动芯片为SSD1306,分辨率为12864。本来是写给我老婆看的,所以大家自行更改!…

查看全部问答>

关于AD转换通过串口显示

在protues仿真中,用AD0804采集数据后,直接赋给SBUF,然后通过虚拟终端显示,但是不能显示出来,该怎么写?谢谢!               SBUF=P2; while(!TI); TI=0;这个是参照郭天翔那个写的 但是虚拟终端显示 ...…

查看全部问答>

看下这个程序这段是什么意思呢

/*********************************************************  串行中断服务函数*********************************************************/是郭天祥串口发送1602那个程序的,但是不知道这段是什么意思啊void  serial() interrupt 4 { ...…

查看全部问答>

飞思卡尔K60开发板出售/交换

http://www.iceasy.com/item-b42-453-91818-CFKUEVK-KIT.html 就是这个网址里的开发板,几乎全新,500顺丰包邮,价格咱可以再商量 也可以作交换,FPGA、DSP或ARM系列系统级的板子都可以 有意购买的请加QQ: 2992105026  加的时候请注 ...…

查看全部问答>

IAR批量代码后移

可能用词不太准确,记得当初KEIL有一个功能是把所有选中的代码统一后移一个TAB键的距离,不知道IAR有没有这个功能?…

查看全部问答>

关于stm32f103r8t6的定位问题!!!

本帖最后由 langmanhengxing 于 2014-7-17 17:27 编辑 我用UART-GPS-NEO-7M-C模块,通过杜邦线连接stm32f103r8t6核心板,通过串口usart  GPS 定位的信息都能够通过板子传输到电脑上。(我用sscom 串口工具观看定位数据) 但是定位误差 ...…

查看全部问答>