中级会员
 
- 积分
- 484
- 金钱
- 484
- 注册时间
- 2017-11-6
- 在线时间
- 162 小时
|
发表于 2017-12-21 09:25:59
|
显示全部楼层
void sr04_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; //推挽输出
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_SetBits(GPIOB, GPIO_Pin_13);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB, &GPIO_InitStruct);
}
void send_ultrasonic()
{
TRIG_UP;
delay_us(20);
TRIG_DOWN;
}
u8 overcount;
float Get_Distance(void)
{
u8 i;
u16 tim;
float distance = 0.0f;
for(i=0;i<5;i++)
{
TRIG_UP;
delay_us(20);
TRIG_DOWN;
while(!ECHO); //等待返回信号
TIM_SetCounter(TIM3,0);
TIM_Cmd(TIM3,ENABLE); //开启定时器
while(ECHO);
TIM_Cmd(TIM3,DISABLE);
tim=TIM3->CNT;
distance+=(tim+overcount*1000)/58;
TIM3->CNT = 0;
overcount = 0;
delay_ms(100);
}
return distance/5;
}
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)
{
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
overcount++;
}
}
以前项目用到过 这个代码应该是可以用的 |
|