完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近想组装小车,学习了一下超声波测距模块,用的是US-100,测试过,模块是好的,代码检查了一下午+一晚上了,可能因为我是菜鸟的原因愣是没找出错误出在哪里来,我用的电平触发方式,没用输入捕获,直接发了20us的高电平等待回收信号:收到高就用定时器开始计数,拉低时就失能,然后算数……结果输出总是0。求大佬帮助!恳求看一下我的代码哪里出的错!拜谢!
附上代码【中间用串口输出是为了方便看数据】 tic/image/hrline/line6.png" lazyloadthumb="1" border="0" alt=""> [C] 纯文本查看 复制代码 #include "delay.h"#include "Ultrasonic.h"#include "TIM4.h"#include "led.h"#defineTRIG_PORT GPIOB//TRIG #defineECHO_PORT GPIOB//ECHO #defineTRIG_PIN GPIO_Pin_8 //TRIG #defineECHO_PIN GPIO_Pin_9//ECHO unsigned short int UltrasonicWave_Distance; //计算出的距离 vu32 averge_distance;/* * 函数名:UltrasonicWave_Configuration * 描述 :超声波模块的初始化 * 输入 :无 * 输出 :无 */void UltrasonicWave_Configuration(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = TRIG_PIN; //PB8接TRIG GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设为推挽输出模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(TRIG_PORT, &GPIO_InitStructure); //初始化外设GPIO GPIO_InitStructure.GPIO_Pin = ECHO_PIN; //PB9接ECH0 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //设为输入 GPIO_Init(ECHO_PORT,&GPIO_InitStructure); //初始化GPIOB }/* * 函数名:UltrasonicWave_CalculateTime * 描述 :计算距离 * 输入 :无 * 输出 :无 */void UltrasonicWave_CalculateTime(void){ UltrasonicWave_Distance=TIM_GetCounter(TIM4)*34*5/2000;}/* * 函数名:UltrasonicWave_StartMeasure * 描述 :开始测距,发送一个>10us的脉冲,然后测量返回的高电平时间 * 输入 :无 * 输出 :无 */void UltrasonicWave_StartMeasure(void){ GPIO_SetBits(TRIG_PORT,TRIG_PIN); //送>10US的高电平 delay_us(20); //延时20US GPIO_ResetBits(TRIG_PORT,TRIG_PIN); while(!GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN)); //等待高电平 TIM_Cmd(TIM4, ENABLE); //定时器4使能 while(GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN)==RESET); //等待低电平 //修正bug:不加==RESET会出错 TIM_Cmd(TIM4, DISABLE); //定时器4失能 UltrasonicWave_CalculateTime(); //计算距离 TIM_SetCounter(TIM4,0);printf("%dn",TIM_GetCounter(TIM4)); // printf("rndistance:%d%d cmrn",UltrasonicWave_Distance/256,UltrasonicWave_Distance%256);}void Average_Distance(void){ UltrasonicWave_StartMeasure(); averge_distance=UltrasonicWave_Distance/256*100+UltrasonicWave_Distance%256;} |
|
相关推荐
2个回答
|
|
定时求助定时上贴~
|
|
|
|
用US-100去做,是串口读取数据,电平的不好做
|
|
|
|
只有小组成员才能发言,加入小组>>
请问下图大疆lightbridge2遥控器主板电源芯片型号是什么?
4464 浏览 1 评论
使用常见的二极管、三极管和mos做MCU和模组的电平转换电路,但是模组和MCU无法正常通信,为什么?
341浏览 2评论
为了提高USIM卡电路的可靠性和稳定性,在电路设计中须注意的点有哪些?
339浏览 2评论
366浏览 2评论
357浏览 2评论
403浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 22:51 , Processed in 0.813637 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号