完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
.h文件内容:
#ifndef __HC_SR04_H #define __HC_SR04_H #define Trig PBout(5) #define Echo PAin(2) void GPIO_Config(void); void tiM_Config(void); float HC_SR04_Init(void); void NVIC_Config(void); #endif .c文件内容: #include "STM32f10x.h" #include "hc-sr04.h" #include "sys.h" #include "delay.h" u32 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 GPIO_Config(void) 函数说明:配置相应管脚,Trig->PB.5;Echo->TIM2_CH3(PA.2) 入口参数:无 返回值:无 *********************************************************/ void GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitTypeStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitTypeStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_InitTypeStruct.GPIO_Pin=GPIO_Pin_2; GPIO_InitTypeStruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitTypeStruct); GPIO_InitTypeStruct.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitTypeStruct.GPIO_Pin=GPIO_Pin_5; GPIO_InitTypeStruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitTypeStruct); } /********************************************************************** 函数名称:void TIM_Config(void) 函数说明:配置TIM2_CH3,通过TIM2计算HC-SR4返回的高电平时间 入口参数:无 返回值:无 **********************************************************************/ void TIM_Config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitTypeStruct; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); TIM_TimeBaseInitTypeStruct.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseInitTypeStruct.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInitTypeStruct.TIM_Period=5999; TIM_TimeBaseInitTypeStruct.TIM_Prescaler=719; TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitTypeStruct); TIM_Cmd(TIM2,DISABLE); NVIC_Config(); } /*********************************************************************** 函数名称:float HC_SR04_Init(void) 函数说明:对超声波模块进行相应的配置 入口参数:无 返回值: ************************************************************************/ float HC_SR04_Init(void) { float time=0; Trig=1; //给超声波模块20us的高电平 delay_us(20); Trig=0; while(!Echo); //等待回响信号为高 while(Echo) //回响信号为高则开启TIM2进行计时 { TIM_Cmd(TIM2,ENABLE); } time=TIM_GetCounter(TIM2)+overcount*60000; //获取TIM2的值,单位为us TIM2->CNT=0; delay_ms(60); return time; } void TIM2_IRQHandler(void) //中断,当回响信号很长是,计数值溢出后重复计数,用中断来保存溢出次数 { if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET) { TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除中断标志 overcount++; } } 主函数内容: #include "delay.h" #include "sys.h" #include "led.h" #include "key.h" #include "usart.h" #include "lcd.h" #include "hc-sr04.h" int main(void) { float s=0; float temp=0; uart_init(115200); GPIO_Config(); TIM_Config(); NVIC_Config(); temp=HC_SR04_Init(); s=340*temp/2000000; while(1) { printf("%fn",temp);//打印时间 printf("%fn",s); //打印距离 } } |
|
相关推荐
4个回答
|
|
先把串口调试好把!
|
|
|
|
|
|
|
|
没什么大问题
|
|
|
|
你好 你的问题解决了吗 我现在也出现了这样的问题 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
801 浏览 0 评论
4961 浏览 0 评论
如何使用python调起UDE STK5.2进行下载自动化下载呢?
2638 浏览 0 评论
开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束
2978 浏览 0 评论
获奖公布!2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
31937 浏览 11 评论
73142 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 10:56 , Processed in 0.673689 second(s), Total 79, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号