
基于STM32F030+FT1610FF1高精度超声波测距模块测距教程及参考程序等开源分享 资料下载见附件,电脑登入 微信公众号:游名开源 硬件说明: 2脚、3脚:需要接4.7到10K上拉电阻到3.3V或5V电源 特性: 极简的设计; 极轻的重量; 极高的测量灵敏度;" C: Q& i( z1 ^* P 极低的消耗电流;, x. G" l! n# V/ ] 接口ESD保护;6 o! j/ Z2 z2 x4 z/ {/ u 偏捷的安装及使用方式;" l) i$ \8 q) x2 v 有效测量距离3cm-1.5m(其它距离范围可定制);2 m4 d' x) y8 g& ] 支持3到5V宽电压,默认采用IO通信方式(默认IO通讯),接口兼容IIC、UART通信、485通信; |
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{! z* A7 F; }) h) M$ l5 g
if((TIM3CH2_CAPTURE_STA&0X80)==0)# v5 |% p% }. b; j1 _1 u7 r
{
if(TIM3CH2_CAPTURE_STA&0X40)
{
TIM3CH2_CAPTURE_STA|=0X80; 5 o! u7 | `# {9 l, q1 D( v
TIM3CH2_CAPTURE_VAL=HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_2);( Z7 M. y4 Z+ ]3 M( e8 f y
long long temp=0;
float distance=0.0;
temp=TIM3CH2_CAPTURE_STA&0X3F;
temp*=0XFFFF; 3 w6 C" a6 @8 ?- w8 I6 s: d4 M
temp+=TIM3CH2_CAPTURE_VAL;
temp=(temp*100)/58;
distance=(float)temp/100;
printf("Goal distence:%.2lf cm\r\n",distance);
__HAL_TIM_DISABLE(&htim3); / J6 Y: ^: ?8 C5 f5 L
}4 s* N9 F) W6 r. w
else : ~6 A. e* x; |8 N; ^
{. t0 \! g9 l# U8 q4 N
TIM3CH2_CAPTURE_STA=0;
TIM3CH2_CAPTURE_VAL=0;) r9 \7 w0 T6 s! B( T& F
TIM3CH2_CAPTURE_STA|=0X40; / b: `* R* `3 Q ~8 c/ o# H) j
__HAL_TIM_DISABLE(&htim3); 5 x, L0 K8 x/ K% k* D- T6 [2 s
__HAL_TIM_SET_COUNTER(&htim3,0);! {6 U5 k, ]" O. Z! b; k9 I
TIM_RESET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2); * k& H2 \" y8 c9 p9 h! H
TIM_SET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2, TIM_ICPOLARITY_FALLING);
} ! r$ Z0 U4 N; {, x
}
}7 P- I: L3 N# u; ]* V$ l
int main(void)
{
HAL_Init();4 i! A4 z3 j+ D# a" d$ ~ p
SystemClock_Config();
MX_GPIO_Init();) \% }- C" t0 o" J
MX_DMA_Init();
MX_USART2_UART_Init();
MX_TIM3_Init();4 R/ n) [4 r) s+ F- m- i
/* USER CODE BEGIN 2 */
__HAL_TIM_ENABLE_IT(&htim3,TIM_IT_UPDATE);) F) b1 T) ~2 g, Q4 S" R- z3 m
HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);
while (1)% a- s, X. I3 Z# M4 O
{3 N1 T$ c" l$ [8 c$ C5 I! C1 q0 M' ~9 x
Measure_Start();- G. N/ i% a. C6 j
if(TIM3CH2_CAPTURE_STA&0X80) 9 r. {: b, [% r5 n* z
{
__HAL_TIM_SET_COUNTER(&htim3,0);
TIM_RESET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2); , b7 q9 O) U- A& F+ a9 Z
TIM_SET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2,TIM_ICPOLARITY_RISING);9 ^: N! T6 d) p: i3 y2 H) L, s! A
__HAL_TIM_ENABLE(&htim3);3 p: l( k s0 e6 ?" ?7 r7 J! d
TIM3CH2_CAPTURE_STA=0; - Z& S" c3 G/ L
}0 M& e7 y7 ^" ^! L+ k4 C% g A
HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin);
HAL_Delay(1000);
- ~6 r( C7 F+ M1 x
}
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)) l4 q% l3 |/ A: B
{4 U9 A! s) l4 J/ {9 O
, s' c! Y- h; b& r
if((TIM3CH2_CAPTURE_STA&0X80)==0)- }3 K( T8 G1 B+ x# K
{% T1 j( p1 J/ J' K" p5 \; v
if(TIM3CH2_CAPTURE_STA&0X40). R% F P8 s& o5 R$ S6 g* ~3 f1 z( x+ V
{' {: n- n0 m& V m/ d1 t: s3 z" T
if((TIM3CH2_CAPTURE_STA&0X3F)==0X3F) S4 B7 d% G7 l* P8 i
{$ d* h- d7 d8 j
TIM3CH2_CAPTURE_STA|=0X80; # T }: J2 I8 T$ t4 Z3 ^. @
TIM3CH2_CAPTURE_VAL=0XFFFF;' e' B. t, r: w2 Z+ K
}
else TIM3CH2_CAPTURE_STA++;9 W5 Y7 \) i8 l
} " k( O' \- T7 X5 F$ U
} 7 Y& {0 p+ |$ E. {
}( B8 s5 N$ e$ S' S
) @. s, V9 H; ^. {; A2 T
NUC_LEO-DG-------------- FT1610FF1* ^$ i9 T! }* D+ K0 k6 y% U/ \
PB3------------------------------T/SDA/TX
PB5------------------------------E/SCL/RX, O$ ~) \) T( l0 a. `
5V/3V----------------------------VCC
GND-----------------------------GND- f5 U" U7 A8 m0 W- P( K8 {
. m) {* O1 `" D' r) d# z* n$ @
' \( u2 y* x+ m
然后再NVICSetings中选上TIM3 global interrupt,入下图: J0 m e5 u$ e& ^1 D
/ _3 }, n( M* p2 [/ [$ |4 e+ p* n
全局变量:
uint8_t TIM3CH2_CAPTURE_STA=0;
uint32_t TIM3CH2_CAPTURE_VAL;1 w v8 s0 s* f( i9 q! L9 @
int fputc(int ch,FILE *f)
{7 P) d [; {( p* y/ X
while(0==(USART2->ISR&0x40));
USART2->TDR=ch;* z& K& N+ |8 a% j# p
return ch;
) e' ]% I! Z4 r$ I, N+ n
}
void Measure_Start(void)2 d& `0 n$ E. w: U) m
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);
HAL_Delay(1);; `" g# l# q1 U" j2 i7 }( w2 F
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);8 K; }# f7 t; N; Y, }% |
}
$ I. W, A a# Y. ?/ \/ c