参考CSDN这篇
原理
超声波测距原理都差不多
引脚
VCC | Trig | Echo | GND |
---|
一般5V | 接收信号,触发开始 | 返回信号,用于计算距离 |
顺序

注意
被测物体的面积不少于0.5平方米且平面尽量要求平整
使用方法
- 在 cubemx 中设置 trig 为 output GPIO,设置 echo 为 input GPIO
- 开启 TIM 时钟,两参数分别为 72-1 和 65535,用于精确计时
1 2 3 4
| #define CSB_Trig_GPIO_Port GPIOB #define CSB_Trig_Pin GPIO_PIN_5 #define CSB_Echo_GPIO_Port GPIOB #define CSB_Echo_Pin GPIO_PIN_6
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| void TIM1_Delay_us(uint16_t n_us) { __HAL_TIM_SetCounter(&htim1, 0);
__HAL_TIM_ENABLE(&htim1);
while(__HAL_TIM_GetCounter(&htim1) < ((1 * n_us)-1) ); __HAL_TIM_DISABLE(&htim1); }
float csb_get_distance(void) { float CSB_value = 0 ; HAL_GPIO_WritePin(CSB_Trig_GPIO_Port, CSB_Trig_Pin , GPIO_PIN_SET); TIM1_Delay_us(20); HAL_GPIO_WritePin(CSB_Trig_GPIO_Port, CSB_Trig_Pin, GPIO_PIN_RESET); while( HAL_GPIO_ReadPin(CSB_Echo_GPIO_Port,CSB_Echo_Pin) == 0); __HAL_TIM_SetCounter(&htim1, 0); __HAL_TIM_ENABLE(&htim1); while( HAL_GPIO_ReadPin(CSB_Echo_GPIO_Port,CSB_Echo_Pin) == 1); CSB_value = __HAL_TIM_GetCounter(&htim1); __HAL_TIM_DISABLE(&htim1); return ( CSB_value*340/1000/2); }
|
多想多做,发篇一作