你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

游名:STM32F030+FT1610FF1高精度超声波测距模块测距教程及参...  

[复制链接]
mmuuss586 发布时间:2020-3-6 15:47
基于STM32F030+FT1610FF1高精度超声波测距模块测距教程及参考程序等开源分享
资料下载见附件,电脑登入
微信公众号:游名开源
硬件说明:
    2脚、3脚:需要接4.7到10K上拉电阻到3.3V或5V电源   
特性:  
极简的设计;0 r) K5 O4 y9 i% W5 w+ P
极轻的重量;
- m* h0 g4 |  | 极高的测量灵敏度;% g* }+ N; `0 \7 Z, ^7 z
极低的消耗电流;
! ^( f) r. E( \5 k6 {4 ? 接口ESD保护;' t: c+ E* I' D6 r2 E9 `
偏捷的安装及使用方式;6 W5 J7 E0 p( G! R6 }
有效测量距离3cm-1.5m(其它距离范围可定制);
+ k( ~0 u8 |8 `% V
支持3到5V宽电压,默认采用IO通信方式(默认IO通讯),接口兼容IIC、UART通信、485通信;
3 {* S6 ?; N" ~2 D; L% w/ t! c
* r4 J3 i7 }' l4 L; h1 X, L
微信图片_20200306155141.jpg

FT1610FF1超声波测距模块产品规格书V2.0.pdf

下载

1.09 MB, 下载次数: 31

基于STM32F030+FT1610FF1高精度超声波测距模块测距教程.pdf

下载

416.85 KB, 下载次数: 34

游名科技产品目录(2020-7-21).pdf

下载

1.05 MB, 下载次数: 1

收藏 4 评论83 发布时间:2020-3-6 15:47

举报

83个回答
mmuuss586 回答时间:2020-3-6 16:03:25
//定时器输入捕获中断处理回调函数,该函数在HAL_TIM_IRQHandler中会被调用# L# i0 l5 g" _) p, g8 Q0 I1 v
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)8 k6 L; i) M! d: G6 Y3 Z* O
{
5 ?, }9 F4 c: ~, `! h  l    if((TIM3CH2_CAPTURE_STA&0X80)==0)
) _: f# q+ W& w* R3 b" P3 N    {
2 D' ]8 G; W3 u: G3 h$ o        if(TIM3CH2_CAPTURE_STA&0X40)           
: s; c0 i7 K& w3 L            {               , i3 @  q4 B" f. u+ W- l+ {
                TIM3CH2_CAPTURE_STA|=0X80;     ( g! l& Q; I' d. N
                TIM3CH2_CAPTURE_VAL=HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_2);
: F* t- }0 Y$ v) k1 E                long long temp=0;7 L, c6 N9 [( x: {% D/ i" i
                                                                float distance=0.0;
' t+ |+ o* `* ]2 |  ^2 Q2 p8 y                temp=TIM3CH2_CAPTURE_STA&0X3F;
! {+ e/ [  `" k1 U, \                temp*=0XFFFF;              
. S% v- L5 i* Y5 D& x  K+ G                temp+=TIM3CH2_CAPTURE_VAL;   
+ i% R8 D4 R5 Y. O; n4 m/ X                temp=(temp*100)/58;
: N! Z/ Z/ Z2 \" x: ?( x- n                                                                distance=(float)temp/100;
) s$ t4 P( Q/ C0 @# J- O& Z; N) f+ o                printf("Goal distence:%.2lf cm\r\n",distance);
4 J/ H8 A3 Q+ @9 H1 }2 x                __HAL_TIM_DISABLE(&htim3);       ! S# L- j$ b) s  @3 a' x3 K
            }' X. s, W0 `$ }
        else                              
+ H0 U: _7 M; T! r+ L% b* Q! M# H8 i            {9 C) H5 d  v" P
                TIM3CH2_CAPTURE_STA=0;         
( e5 s4 e4 T* \) X+ u+ u- I                TIM3CH2_CAPTURE_VAL=0;
) F& R6 J; `. S5 h8 q' _3 O                TIM3CH2_CAPTURE_STA|=0X40;   
7 U/ A4 b! j) _. {9 L: I: e                __HAL_TIM_DISABLE(&htim3);      
6 d4 A( w  Y) T) z. I                __HAL_TIM_SET_COUNTER(&htim3,0);
3 [4 ~; N* l. n$ t                TIM_RESET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2);  
4 s  i' P8 P% H2 V2 n                TIM_SET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2, TIM_ICPOLARITY_FALLING);          ! G/ Z. m" {2 N+ U9 n$ Q
                                                }      
. I/ K& M' x/ K( v7 v                        }
2 O: n! J( X  j. [8 Y# b# \' Q}0 F/ Y  [% H( n" R; }" y' ^
mmuuss586 回答时间:2020-3-6 16:04:03
然后在main函数中添加定时器中断使能和捕获使能函数,及测试需要的功能代码,main函数如下2 U% l& k* _  ]8 Q$ C* S/ x% W
int main(void): O/ b0 w4 R. |5 V# X5 X
{
; I( u: @( m( l/ V! P* s/ |+ @5 Q, {$ I1 ]2 `* A
  HAL_Init();
+ D" G) N! o& E- }% J1 F  SystemClock_Config();5 g9 @8 w" b7 [/ R" }1 X
  MX_GPIO_Init();
  L- f8 W- X5 o' W7 _7 h  MX_DMA_Init();+ T; P, l: t; @( Q3 u8 J; X
  MX_USART2_UART_Init();
0 @$ w: |  i# l( o  MX_TIM3_Init();8 d- z) b  C" H! u$ O8 ^$ @& y
  /* USER CODE BEGIN 2 */
3 R( \: [( a' n2 j! `: o0 M        __HAL_TIM_ENABLE_IT(&htim3,TIM_IT_UPDATE);+ q& {' X+ S  Z" r2 z
        HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);
- D5 M# b& O" f' \* \  while (1)$ p& L% e/ j0 i' w! j; Z
  {
+ m4 W$ k$ i3 \6 a& ^5 S6 v                Measure_Start();
& V3 e; z, ]' b8 y( ^- p* n                 if(TIM3CH2_CAPTURE_STA&0X80)        
* d( j1 T8 N& r% v                {
6 M( [9 V9 Q/ P( N5 j                                __HAL_TIM_SET_COUNTER(&htim3,0);
' i8 d# B7 l$ L4 Z3 ?  [2 V3 y                                TIM_RESET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2); 0 N6 u9 R4 u8 R8 X
                                TIM_SET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2,TIM_ICPOLARITY_RISING);
8 g" t" g9 X0 L, q, ?                                __HAL_TIM_ENABLE(&htim3);+ l/ q% o" h5 n. n  k5 j! z1 y* c
                                TIM3CH2_CAPTURE_STA=0;
& U/ @$ F$ [/ X& w$ k% K                }1 q& P# c7 `/ U* p- I6 ]
                HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin);; U: o( P: ^* x7 j' _: c
                HAL_Delay(1000);- F0 k+ e! x* F, \& e+ U2 c( h

" m6 G+ R+ }' s7 r  }
) h4 |( l6 q+ W/ K  p& w}
, }6 P7 ]  u9 O# |+ f
mmuuss586 回答时间:2020-3-6 16:03:07
中断服务函数:9 C; ^7 f8 C' E
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)2 B- c: B' V, N# n
{
' h% \2 o. ^4 [0 }# ~- ~4 T( ]5 H7 f! O% I) o
    if((TIM3CH2_CAPTURE_STA&0X80)==0)
8 y  X$ Z# z, c    {8 Z# x  W; }% f: A+ a
            if(TIM3CH2_CAPTURE_STA&0X40)
9 V% E: {, |5 _" _4 f            {
, P6 j7 u3 b- {1 h                if((TIM3CH2_CAPTURE_STA&0X3F)==0X3F)" |' N% h7 _* u& _* @$ E8 W
                {) u2 M+ Q3 c. |$ Z0 [; J$ v! J1 r
                    TIM3CH2_CAPTURE_STA|=0X80;       ~+ K3 w% o. V# Q; g
                    TIM3CH2_CAPTURE_VAL=0XFFFF;7 b! u. Q" L9 k. [! q* Z
                }* B; Y- K+ F9 `7 z* j9 Z$ p
                else TIM3CH2_CAPTURE_STA++;8 J% J6 M* U- h" c' G
            }    ! N( b( f  H6 J) J% J7 n) J  y
    }       4 ?' ~) K9 W9 s) P6 ]: F6 x
}& [9 I/ W# C5 n2 L
mmuuss586 回答时间:2020-3-6 15:57:03
1.png
. w6 ]& j. I( J$ f) w& T2 g. m 2.png 4 T1 H3 C9 ?4 ?# p% C
3.png % E4 N; J0 e+ C. `. p  z
4.png - E, s6 B0 B9 K; [
5.png % \" s  c, I- r+ e8 n" P1 T
4 R4 Z! d* J( w1 I0 O2 ?. }
mmuuss586 回答时间:2020-3-6 15:59:37

7 i& K% T# b3 Z) V1 L# S: S
基于STM32F030+FT1610FF1高精度超声波测距模块测距教程

4 c( b) _! s6 w  H8 m
      学习板卡需求:官方NUCLEO-F030R8或自制NUCLEO-DG板卡和FT1610FF1超声波,杜邦线4根;板卡连接如图:
1.png & x; ?8 O* l% k$ D

1 H" {9 g8 M/ s# u) e
mmuuss586 回答时间:2020-3-6 15:59:59
配置和连接方式
9 w- s2 r0 L/ w0 A                NUC_LEO-DG-------------- FT1610FF17 P! g, q1 k' _! J
                        PB3------------------------------T/SDA/TX
1 K& _6 |. z1 q- N4 y3 R                        PB5------------------------------E/SCL/RX6 O' G- `+ n8 q0 v- G9 A
                        5V/3V----------------------------VCC
0 d; P: K+ {" N% _; z3 i+ _4 M2 U                        GND-----------------------------GND
. D% E6 D2 {# ^5 X
mmuuss586 回答时间:2020-3-6 16:00:42
USART2串口通信引脚PA2、PA3和LED2的指示灯引脚PA5,基本的Cube配置不做介绍,主要为我们需要通过PB5读取IO的高电平持续时间,这里用到的是定时器的输入捕获功能,具体的Cube配置如下图所示:6 ~* H( Q- u7 W) M0 t
1.png - m/ u8 f8 ?2 Q3 A5 x

$ F* s( q$ z* n! z' \6 ^( d( G0 Z/ u  y- X( z+ y
mmuuss586 回答时间:2020-3-6 16:02:14
3 ?8 y' {5 v! I$ q7 i8 X5 P! ~
然后再NVICSetings中选上TIM3 global interrupt,入下图:
2 Z& D+ p: e! s& q 1.png
. J: x! [0 p; j! h7 I# o6 b
/ A8 G7 x3 P6 H
) q$ u' g. Z2 m3 u$ C  j+ @7 ]
mmuuss586 回答时间:2020-3-6 16:02:41
然后把串口和LED输出配置好后生成MDK代码,编译无错误后添加需要的相关代码,主要缺少的代码为TIM3输入捕获的中断服务函数和串口通信的重定向函数,这里需要添加两个对应的全局变量,代码如下:6 ^# Q# T$ r! U9 b; Y/ o/ m5 {
全局变量:! `( l7 h3 M1 A* z
uint8_t  TIM3CH2_CAPTURE_STA=0;                               
2 Q& `8 n8 `  c; \uint32_t        TIM3CH2_CAPTURE_VAL;
  |9 A& }# A. g9 T* d& \; l( N
mmuuss586 回答时间:2020-3-6 16:03:42
串口重定向函数为(需要包含对应的stdio.h头文件)
. v) j- \' Z) Kint fputc(int ch,FILE *f)( t: C" w4 R9 q. b# G6 \
{0 t, B! K% q' H9 w" O1 J
        while(0==(USART2->ISR&0x40));
$ I  w% X( }' U9 W7 r        USART2->TDR=ch;; I4 v, M$ m7 @' b- H1 w4 T
        return ch;. K& V  L9 h' R7 ~- F6 R* F
        8 X" F  n8 u) o$ k
}
; n$ M6 N) K) ^: f) o! e, i, o$ z
mmuuss586 回答时间:2020-3-6 16:04:21
其中Measur_Start()函数为触发超声波模块测量开始的TTL信号,代码如下$ h0 d0 o& X( D1 ~4 h( @
void Measure_Start(void)2 E2 G' u  z5 b, V8 v3 N
{
2 p; ^) z: r0 m        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);6 l, H3 E' @5 u) i5 j
                HAL_Delay(1);3 A8 V$ d, A( l  i! W8 u% x$ w. p0 P
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);( @6 _7 V6 c$ a: F  |0 n
}
# C0 E1 H+ N9 I
mmuuss586 回答时间:2020-3-6 16:04:57
这一部分参照模块IO通信模式的时序图可知,模块通信模式设置如下图:
1.png
# E- n2 I' w+ F+ U  G

0 Y6 G0 K* r9 C! p" D
mmuuss586 回答时间:2020-3-6 16:06:25
代码添加后,烧录到板卡,然后打开串口通信助手,打开串口后就可以看到模块测试的数据如下图
. e- D. V4 E! W 1.png
  i) K7 c$ Q5 Q' ^, S, x, M$ a
. \: Q2 {0 h6 g  u2 X

- V6 U0 ?: k) g
mmuuss586 回答时间:2020-3-6 16:06:48
:P:P:P:P:P:P:P

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版