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

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

[复制链接]
mmuuss586 发布时间:2020-3-6 15:47
基于STM32F030+FT1610FF1高精度超声波测距模块测距教程及参考程序等开源分享
资料下载见附件,电脑登入
微信公众号:游名开源
硬件说明:
    2脚、3脚:需要接4.7到10K上拉电阻到3.3V或5V电源   
特性:  
极简的设计;
" P0 @0 G- T! |4 W4 N; I3 `! ]7 b 极轻的重量;2 P8 {/ P! I0 y3 I& |
极高的测量灵敏度;2 D  L& y* E% w, M
极低的消耗电流;
) W1 W! O' J" {; _9 }1 `$ S 接口ESD保护;
! @) f! g: ]& f2 |+ ?3 [9 @1 @! s 偏捷的安装及使用方式;
  D) J/ H, Q8 |# ?! z 有效测量距离3cm-1.5m(其它距离范围可定制);

5 O. _3 R' y# g3 A7 J0 b5 N4 N
支持3到5V宽电压,默认采用IO通信方式(默认IO通讯),接口兼容IIC、UART通信、485通信;
0 Q, Z5 ^: ^; I$ i* x7 n# u0 I! {

+ p0 o, Q5 {' F4 m0 p
微信图片_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中会被调用' X; c9 b  y* F- G
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
9 \/ l; Z( }. S- Q{
* d/ J# }9 b2 g9 k    if((TIM3CH2_CAPTURE_STA&0X80)==0)
0 a, @3 l, h) l# d  ~    {6 c$ f" ?8 D, W% a& F1 u) i
        if(TIM3CH2_CAPTURE_STA&0X40)           % G+ \8 e# [( M) r3 v  N
            {               
# w  P  o% F, J1 K2 f4 o* n) f( ~  C( [7 f                TIM3CH2_CAPTURE_STA|=0X80;     
5 y. F1 F( S0 [) C: r5 W- B% s                TIM3CH2_CAPTURE_VAL=HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_2);
; O3 ^# D/ C( ]- C$ U                long long temp=0;; Z1 N1 {- W3 F. A3 H
                                                                float distance=0.0;
) S8 |/ n! w) |9 E7 Z3 s9 S% B! _: _                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);
) m8 N  @  v  P                __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
            {
% O. W/ k. a: X9 Y0 t4 G9 H8 M1 {6 p                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;   
" ?5 Q/ Y- C! _) [% n+ n4 w7 V                __HAL_TIM_DISABLE(&htim3);      
% ~# q' h/ B" h! S5 p0 g+ v# K                __HAL_TIM_SET_COUNTER(&htim3,0);
8 h, e. C: H- L) {* x+ {4 E                TIM_RESET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2);  " H9 Q) K& \# Y' o3 n1 Z
                TIM_SET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2, TIM_ICPOLARITY_FALLING);         
# ~4 |' M3 S( O$ o! U& e+ W: v                                                }      
1 U3 w1 ]' c1 Y: C4 p4 G                        }1 U4 |9 ~3 U0 Y2 a
}
6 J; ?! h8 f( A! E. d% J3 v1 ~
mmuuss586 回答时间:2020-3-6 16:04:03
然后在main函数中添加定时器中断使能和捕获使能函数,及测试需要的功能代码,main函数如下
) ]% N" @) f2 V7 `( w1 dint main(void)
7 O! G7 A" I5 H$ Z1 F% y- [% R{+ 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();
; B5 {) T% n; i% k  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);
6 |) [: \0 G" e. A+ s2 B$ {  while (1), r! d2 Q7 l( c- ~  U
  {, O" y& S0 t$ c9 h
                Measure_Start();
  P" W& }* O1 r: `: O( ^0 r                 if(TIM3CH2_CAPTURE_STA&0X80)        
+ }( z6 v& ]% K' I1 N! @                {
% p+ w! y7 ?  W$ U                                __HAL_TIM_SET_COUNTER(&htim3,0);
6 M, y* V' r6 M8 [                                TIM_RESET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2);
9 B$ i- w  n" v; q, N                                TIM_SET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2,TIM_ICPOLARITY_RISING);
, _' `, w: I6 w2 F) w0 ?9 @/ k% }                                __HAL_TIM_ENABLE(&htim3);
/ a: V$ t1 b6 F- m+ m6 }                                TIM3CH2_CAPTURE_STA=0; . i0 S( J- H. o5 d9 t
                }
, ]: z8 H; G: T, Y! Q; C                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 |

+ o5 I4 j# s+ A8 e% m" I4 H0 \  }
4 R+ ?4 m: P+ u1 M- @& y}
$ M" t9 u) p$ ?/ N
mmuuss586 回答时间:2020-3-6 16:03:07
中断服务函数:/ D$ W% E0 W3 Y/ D7 p: C
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)! d" `( I# R# L; B5 E* U5 u9 _
{
, ^* y6 L5 Y3 n' ]: G, T9 o9 q8 v+ x: h" S+ v
    if((TIM3CH2_CAPTURE_STA&0X80)==0)
( _  w  g6 G. K8 E; [& m* r4 v7 U6 C    {$ Z8 d; K5 w, X. G
            if(TIM3CH2_CAPTURE_STA&0X40)
% D, N; O) v$ }$ m6 X            {+ ^- p( ?. x+ f0 I/ @
                if((TIM3CH2_CAPTURE_STA&0X3F)==0X3F)
( J# A) i6 L9 \+ M! l3 j/ i                {
( O: g( r! t  J1 {  e: r8 P                    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++;
: e: N/ I6 P% j: ?" C# S# l9 W2 y            }   
7 _& t, |( Y5 l9 [% @4 u    }       3 X- ]7 A% y1 v- [' \
}
. u/ {; E" v$ {
mmuuss586 回答时间:2020-3-6 15:57:03
1.png 2 |. W2 N; C* j7 {2 N
2.png
. w6 O  s! S  u: N1 q 3.png ; Z6 O4 J! S! S' f8 c& E! v6 [
4.png
- _+ n- C- T2 W$ D& \9 b 5.png
. G% q5 D1 a" F
) t) x# W' J  j" ?( B6 T5 S
mmuuss586 回答时间:2020-3-6 15:59:37
. Y" P2 k% E( ~
基于STM32F030+FT1610FF1高精度超声波测距模块测距教程

% O/ W2 S3 M- k5 ]: }
      学习板卡需求:官方NUCLEO-F030R8或自制NUCLEO-DG板卡和FT1610FF1超声波,杜邦线4根;板卡连接如图:
1.png - E4 t+ T" e" Z+ y3 ~" Z' g
# ?0 N1 B' c6 h0 G
mmuuss586 回答时间:2020-3-6 15:59:59
配置和连接方式& ?  n$ o" t$ S0 g! A
                NUC_LEO-DG-------------- FT1610FF1$ {" V! a; r9 N( y1 K1 w
                        PB3------------------------------T/SDA/TX
0 |0 d/ s5 P7 V. X/ s                        PB5------------------------------E/SCL/RX( S% _8 X  O# O4 P$ q0 H8 N
                        5V/3V----------------------------VCC
9 p" O$ S, A0 s                        GND-----------------------------GND! Y/ h) o0 z: f9 [( [
mmuuss586 回答时间:2020-3-6 16:00:42
USART2串口通信引脚PA2、PA3和LED2的指示灯引脚PA5,基本的Cube配置不做介绍,主要为我们需要通过PB5读取IO的高电平持续时间,这里用到的是定时器的输入捕获功能,具体的Cube配置如下图所示:
3 j* R5 Q4 v! F! ^1 n  @! e2 y+ O 1.png ' N- g- D" |0 M( _2 p

; K5 B  }8 y7 r  E$ ^. }; N1 w9 ~
8 ?4 g8 D1 e7 M, ~7 j1 E* K% Y7 T
mmuuss586 回答时间:2020-3-6 16:02:14

. W& l. w  }3 @- ?3 J- v% b' w然后再NVICSetings中选上TIM3 global interrupt,入下图:: D) o: m* f8 d, Y$ k* ^) J- \
1.png + B! b6 d: N6 s# o

2 [4 }& p5 ?$ Z# ?1 z' S6 b
1 B" f% s1 H: d+ p& R' _* n/ @) z
mmuuss586 回答时间:2020-3-6 16:02:41
然后把串口和LED输出配置好后生成MDK代码,编译无错误后添加需要的相关代码,主要缺少的代码为TIM3输入捕获的中断服务函数和串口通信的重定向函数,这里需要添加两个对应的全局变量,代码如下:
) j+ p7 a( ~, N- D全局变量:
( L1 z( V9 c" ^" S. o5 Puint8_t  TIM3CH2_CAPTURE_STA=0;                               
, v- d% Y" F& N- q9 huint32_t        TIM3CH2_CAPTURE_VAL;
/ W1 d0 C9 T$ g
mmuuss586 回答时间:2020-3-6 16:03:42
串口重定向函数为(需要包含对应的stdio.h头文件)- S5 l: o1 N/ m! q3 c
int fputc(int ch,FILE *f): f6 P. d4 H' D" X: s9 `
{
+ K+ ~) B; r1 r/ r2 d$ p7 Y        while(0==(USART2->ISR&0x40));/ a7 h  A5 z" P9 M* W, P7 V
        USART2->TDR=ch;
% A  b- X2 r8 c8 a8 w- B3 j  z        return ch;
! ?1 O2 r4 A4 p7 U: ?        7 q0 r8 X4 g- R
}, G3 v7 z8 ]8 }5 p
mmuuss586 回答时间:2020-3-6 16:04:21
其中Measur_Start()函数为触发超声波模块测量开始的TTL信号,代码如下
4 p% G8 ^. G0 dvoid 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);
- l4 C0 h. ~; |9 r5 uHAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);: A% B$ l8 F/ D+ R! l
}
, i6 d, W3 S1 y  l- E1 {( Q3 Z
mmuuss586 回答时间:2020-3-6 16:04:57
这一部分参照模块IO通信模式的时序图可知,模块通信模式设置如下图:
1.png 5 P' i! i9 k6 z5 ~; k7 R2 J& y
0 A* o$ C1 h! M2 W- ^' v# X
mmuuss586 回答时间:2020-3-6 16:06:25
代码添加后,烧录到板卡,然后打开串口通信助手,打开串口后就可以看到模块测试的数据如下图% R; K' ~# @. C+ d. x- B0 T2 i
1.png
4 l+ N; l1 \. h1 b  a$ J8 H

0 D3 J' t/ J; p& Y5 |: t' y5 J! S9 q8 I% K
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 手机版