初级会员
- 积分
- 65
- 金钱
- 65
- 注册时间
- 2018-4-10
- 在线时间
- 9 小时
|
最近想组装小车,学习了一下超声波测距模块,用的是US-100,测试过,模块是好的,代码检查了一下午+一晚上了,可能因为我是菜鸟的原因愣是没找出错误出在哪里来,我用的电平触发方式,没用输入捕获,直接发了20us的高电平等待回收信号:收到高就用定时器开始计数,拉低时就失能,然后算数……结果输出总是0。求大佬帮助!恳求看一下我的代码哪里出的错!拜谢!
附上代码【中间用串口输出是为了方便看数据】
[mw_shl_code=c,true]#include "delay.h"
#include "Ultrasonic.h"
#include "TIM4.h"
#include "led.h"
#define TRIG_PORT GPIOB //TRIG
#define ECHO_PORT GPIOB //ECHO
#define TRIG_PIN GPIO_Pin_8 //TRIG
#define ECHO_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("%d\n",TIM_GetCounter(TIM4));
// printf("\r\ndistance:%d%d cm\r\n",UltrasonicWave_Distance/256,UltrasonicWave_Distance%256);
}
void Average_Distance(void)
{
UltrasonicWave_StartMeasure();
averge_distance=UltrasonicWave_Distance/256*100+UltrasonicWave_Distance%256;
}
[/mw_shl_code] |
|