|
#include "HCSR04.h"
#include "usart.h"
//float d=0;
extern u8 TIM5CH1_CAPTURE_STA;
extern u16 TIM5CH1_CAPTURE_VAL;
void HCSR04(void)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_Initure.Pin=GPIO_PIN_12; //PB12
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽輸出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;//高速
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
GPIO_Initure.Pin=GPIO_PIN_13; //PB13
GPIO_Initure.Mode=GPIO_MODE_INPUT; //輸入
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;//高速
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
}
void HCSR04_getdistance(void)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET);
delay_ms(500);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET);
// if (TIM5CH1_CAPTURE_STA&0x80)
// {
// d=TIM5CH1_CAPTURE_STA&0x3F;
// d*=65536;
// d+=TIM5CH1_CAPTURE_VAL;
// d=d*170*0.0001;
// TIM5CH1_CAPTURE_STA=0;
// }
delay_ms(500);
}
這是hcsr04.c文件的
#include "sys.h"
#include "delay.h"
#include "usart.h"#include "key.h"
#include "timer.h"
#include "HCSR04.h"
#include "beep.h"
extern u8 TIM5CH1_CAPTURE_STA; //輸入捕獲狀態(tài)
extern u32 TIM5CH1_CAPTURE_VAL; //輸入捕獲值
int main(void)
{
long long temp=0;
HAL_Init(); //初始化HAL庫
Stm32_Clock_Init(RCC_PLL_MUL9); //設置時鐘,72M
delay_init(72); //初始化延時函數(shù)
uart_init(115200); //初始化串口 TIM5_CH1_Cap_Init(0XFFFF,72-1); //以1Mhz的頻率計數(shù)
while(1)
{
delay_ms(10); HCSR04_getdistance();
if(TIM5CH1_CAPTURE_STA&0X80) //成功捕獲到了一次高電平
{
temp=TIM5CH1_CAPTURE_STA&0X3F;
temp*=65536; //溢出時間總和
temp+=TIM5CH1_CAPTURE_VAL; //得到總的高電平時間 if(temp<10){BEEP=!BEEP;}
TIM5CH1_CAPTURE_STA=0; //開啟下一次捕獲
|
|