
基于STM32F030+FT1610FF1高精度超声波测距模块测距教程及参考程序等开源分享 资料下载见附件,电脑登入 微信公众号:游名开源 硬件说明: 2脚、3脚:需要接4.7到10K上拉电阻到3.3V或5V电源 特性: 极简的设计; 极轻的重量;2 P8 {/ P! I0 y3 I& | 极高的测量灵敏度;2 D L& y* E% w, M 极低的消耗电流; 接口ESD保护; 偏捷的安装及使用方式; 有效测量距离3cm-1.5m(其它距离范围可定制); 支持3到5V宽电压,默认采用IO通信方式(默认IO通讯),接口兼容IIC、UART通信、485通信; 0 Q, Z5 ^: ^; I$ i* x7 n# u0 I! { |
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
if((TIM3CH2_CAPTURE_STA&0X80)==0)
{6 c$ f" ?8 D, W% a& F1 u) i
if(TIM3CH2_CAPTURE_STA&0X40) % G+ \8 e# [( M) r3 v N
{
TIM3CH2_CAPTURE_STA|=0X80;
TIM3CH2_CAPTURE_VAL=HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_2);
long long temp=0;; Z1 N1 {- W3 F. A3 H
float distance=0.0;
temp=TIM3CH2_CAPTURE_STA&0X3F; 1 s" E; E0 D$ G o5 C
temp*=0XFFFF; + h, s. s) v O. _) b
temp+=TIM3CH2_CAPTURE_VAL; : w% Q! C0 b* E( j
temp=(temp*100)/58;7 l$ {$ m: g- o
distance=(float)temp/100;+ i5 e% N' D6 u# k3 u, m% {1 u' S$ Y
printf("Goal distence:%.2lf cm\r\n",distance);
__HAL_TIM_DISABLE(&htim3); . f' v! A0 L& d& s
}+ _' ^3 G# `; @& x: N; F1 c% s" M
else & v4 G* S7 C9 F7 B
{
TIM3CH2_CAPTURE_STA=0; ) {' K, l; H/ x" }( N! e- { B! k# |5 B
TIM3CH2_CAPTURE_VAL=0;/ N$ G' k0 \" s0 s9 E% t
TIM3CH2_CAPTURE_STA|=0X40;
__HAL_TIM_DISABLE(&htim3);
__HAL_TIM_SET_COUNTER(&htim3,0);
TIM_RESET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2); " H9 Q) K& \# Y' o3 n1 Z
TIM_SET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2, TIM_ICPOLARITY_FALLING);
}
}1 U4 |9 ~3 U0 Y2 a
}
int main(void)
{+ E3 E3 Z/ t+ }$ H% J
/ T- x: p; z* n! Y& ^ q
HAL_Init();5 e4 {: K" j1 |% o7 l1 d! Z
SystemClock_Config();
MX_GPIO_Init();# L) E: F: z6 f5 G
MX_DMA_Init();6 N, s: x. ^- K& D- L
MX_USART2_UART_Init();( l! b& {& A: s# F2 Z1 g5 u6 G4 @
MX_TIM3_Init();% d, c# Z% v- E# \# n7 X& {1 ^
/* USER CODE BEGIN 2 */4 M7 f4 ^' ]; o- w7 {5 m
__HAL_TIM_ENABLE_IT(&htim3,TIM_IT_UPDATE);$ Z) k/ F2 S. o" C$ z: r l
HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);
while (1), r! d2 Q7 l( c- ~ U
{, O" y& S0 t$ c9 h
Measure_Start();
if(TIM3CH2_CAPTURE_STA&0X80)
{
__HAL_TIM_SET_COUNTER(&htim3,0);
TIM_RESET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2);
TIM_SET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2,TIM_ICPOLARITY_RISING);
__HAL_TIM_ENABLE(&htim3);
TIM3CH2_CAPTURE_STA=0; . i0 S( J- H. o5 d9 t
}
HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin); ]- M, t$ _2 ?( x; z2 L I6 P
HAL_Delay(1000);! q/ z2 l3 h% K: V7 |
}
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)! d" `( I# R# L; B5 E* U5 u9 _
{
' ]: G, T9 o9 q8 v+ x: h" S+ v
if((TIM3CH2_CAPTURE_STA&0X80)==0)
{$ Z8 d; K5 w, X. G
if(TIM3CH2_CAPTURE_STA&0X40)
{+ ^- p( ?. x+ f0 I/ @
if((TIM3CH2_CAPTURE_STA&0X3F)==0X3F)
{
TIM3CH2_CAPTURE_STA|=0X80; / @% I9 I* t5 d
TIM3CH2_CAPTURE_VAL=0XFFFF;5 v' `8 @' k- u+ L! Q9 h2 r0 b# {% ^8 g
}' G: h" |3 ?4 E6 z
else TIM3CH2_CAPTURE_STA++;
}
} 3 X- ]7 A% y1 v- [' \
}
NUC_LEO-DG-------------- FT1610FF1$ {" V! a; r9 N( y1 K1 w
PB3------------------------------T/SDA/TX
PB5------------------------------E/SCL/RX( S% _8 X O# O4 P$ q0 H8 N
5V/3V----------------------------VCC
GND-----------------------------GND! Y/ h) o0 z: f9 [( [
然后再NVICSetings中选上TIM3 global interrupt,入下图:: D) o: m* f8 d, Y$ k* ^) J- \
全局变量:
uint8_t TIM3CH2_CAPTURE_STA=0;
uint32_t TIM3CH2_CAPTURE_VAL;
int fputc(int ch,FILE *f): f6 P. d4 H' D" X: s9 `
{
while(0==(USART2->ISR&0x40));/ a7 h A5 z" P9 M* W, P7 V
USART2->TDR=ch;
return ch;
7 q0 r8 X4 g- R
}, G3 v7 z8 ]8 }5 p
void Measure_Start(void)) ~& s: H7 v5 {
{/ o* C! p9 n" U' }7 C1 }# h
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);2 o+ `& i# L8 J6 J4 _ Z5 S
HAL_Delay(1);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);: A% B$ l8 F/ D+ R! l
}
& Y5 |: t' y5 J! S9 q8 I% K