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

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

[复制链接]
mmuuss586 发布时间:2020-3-6 15:47
基于STM32F030+FT1610FF1高精度超声波测距模块测距教程及参考程序等开源分享
资料下载见附件,电脑登入
微信公众号:游名开源
硬件说明:
    2脚、3脚:需要接4.7到10K上拉电阻到3.3V或5V电源   
特性:  
极简的设计;
& g1 X$ n* [; p" m 极轻的重量;
2 d! i% z, x+ | 极高的测量灵敏度;
) L1 h/ a5 a' ?( e# v/ F 极低的消耗电流;0 ?& y$ v& V9 ~" Q! \( k
接口ESD保护;
9 b( p/ S! s5 E- ?- M 偏捷的安装及使用方式;
5 G) `8 C$ c: \3 a5 t; r" o 有效测量距离3cm-1.5m(其它距离范围可定制);
: c; r! Z( X, Z9 I
支持3到5V宽电压,默认采用IO通信方式(默认IO通讯),接口兼容IIC、UART通信、485通信;

+ O6 \, I- S9 \+ o$ W% E

# ]: a/ h1 V- h4 S. S& m
微信图片_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中会被调用# z/ l1 |% C5 m
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)+ K4 m8 g$ C# Z
{
" b+ e3 Q. O# z+ s    if((TIM3CH2_CAPTURE_STA&0X80)==0)
: M) n* N3 k0 J    {
9 x' K9 v% ^! r2 W! L( W        if(TIM3CH2_CAPTURE_STA&0X40)           
- ~* V6 l& A" D, `$ D2 a            {               + v" m3 @: w, P$ q+ C
                TIM3CH2_CAPTURE_STA|=0X80;     
4 i6 _3 M( l$ M* ]. u8 B                TIM3CH2_CAPTURE_VAL=HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_2);
3 S6 p! y; ]: [3 ]+ H# @& G5 c                long long temp=0;
! L4 m" u) ]5 l                                                                float distance=0.0;
9 |( P$ \6 n. }" P7 y                temp=TIM3CH2_CAPTURE_STA&0X3F; , \2 F" A- r/ B* `9 K& D
                temp*=0XFFFF;              # M. z# s# s& L: `5 B, m
                temp+=TIM3CH2_CAPTURE_VAL;   
6 J! x, w" J# b: E* f$ }" a                temp=(temp*100)/58;! q0 g2 U8 a& B  ~
                                                                distance=(float)temp/100;( m1 \7 C# w6 F$ V, Q
                printf("Goal distence:%.2lf cm\r\n",distance);1 W& z# Q9 W- G% Z7 j* o6 l; ~$ ^) \
                __HAL_TIM_DISABLE(&htim3);      
1 E) v8 T" q( [* f, K0 ~3 b. L% N            }
( X. I. d8 T, [- f: _: v        else                               5 _9 _4 F& W/ I: k
            {
9 _$ _* s8 Q% t& G                TIM3CH2_CAPTURE_STA=0;         
9 z4 i3 n2 Y+ `6 p+ x0 }( m                TIM3CH2_CAPTURE_VAL=0;5 y' I& L' Z8 D4 A9 b
                TIM3CH2_CAPTURE_STA|=0X40;    5 P% d0 m* R( t
                __HAL_TIM_DISABLE(&htim3);      
% k+ [- v6 i, ^/ j; }                __HAL_TIM_SET_COUNTER(&htim3,0);4 c; P8 \& a, v* X
                TIM_RESET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2);  / Y, J; E* \. f
                TIM_SET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2, TIM_ICPOLARITY_FALLING);            `0 @+ \; j( Y
                                                }       * K* `' [# l7 q$ ]
                        }: r1 H+ q$ Y/ E" N  ]
}
" f& g. W" e+ j& a$ P
mmuuss586 回答时间:2020-3-6 16:04:03
然后在main函数中添加定时器中断使能和捕获使能函数,及测试需要的功能代码,main函数如下
8 h& |! H/ E3 ~8 }( ?9 a8 Hint main(void), Y$ C/ W; l1 i, {7 ?* i1 c0 O
{  k3 S0 l7 N5 o1 r- A) r* A
* r; k5 A  j  f4 V$ e& N, T0 G( |; ~
  HAL_Init();
" G1 |  M' P4 f6 [5 J; [. r$ n  ^  SystemClock_Config();
, O& T, f7 F7 g3 M) G  MX_GPIO_Init();
) b5 |" u; z. O9 {: B  MX_DMA_Init();
4 T: y- |) {3 }$ v+ o3 D% p  MX_USART2_UART_Init();: p* i9 u* a8 J( ^6 B1 i9 d4 y& G
  MX_TIM3_Init();$ G  H4 n4 a9 S9 z1 c' x
  /* USER CODE BEGIN 2 *// e, j5 u/ J% C8 p' u6 y: _
        __HAL_TIM_ENABLE_IT(&htim3,TIM_IT_UPDATE);, h. q% K' I! n, J3 p
        HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);$ t7 J' P) h( j4 Q
  while (1)
# m9 Z1 L( V7 ^, N* Z: e" p  {1 J. e: ~7 ^6 o; O8 S% {- d; ^
                Measure_Start();
) n5 z0 ]5 @3 m+ }0 i  D( ?: d' s  ~                 if(TIM3CH2_CAPTURE_STA&0X80)        / y# `- ]2 c7 Y8 d  e" x: l
                {
2 d8 X, q6 I2 d* A, ?                                __HAL_TIM_SET_COUNTER(&htim3,0);" c! m/ Z( m+ K) J' W! ]
                                TIM_RESET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2); # j$ W1 l& m) u7 m' L  p
                                TIM_SET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2,TIM_ICPOLARITY_RISING);
* Y' _2 I8 A' @& {4 Z/ @" r% V9 z                                __HAL_TIM_ENABLE(&htim3);
; |  I) @# |  h                                TIM3CH2_CAPTURE_STA=0; , D( o# N' H7 w2 ~
                }
- u6 T0 c! m) L& F+ l) D                HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin);
; f0 u4 r8 \2 ~+ L  e% `+ P& H3 j                HAL_Delay(1000);% X5 V! s0 U4 Z2 D# z0 {
1 d, Y% U4 W( g% v2 e. _
  }& Y! h6 k7 }9 z1 i
}( Y) o, c0 f% P4 U
mmuuss586 回答时间:2020-3-6 16:03:07
中断服务函数:
! b9 u. i: A. n( e: d" Mvoid HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
% H: d7 S- M) {, d+ v1 u8 `{
0 i% F4 R0 q5 ~( F8 @+ p$ a. |1 D
% E6 r% @( \; v7 c    if((TIM3CH2_CAPTURE_STA&0X80)==0)
! y* o( v$ H. z" |9 G    {$ [) {& ^6 S/ n/ p1 n9 c! w
            if(TIM3CH2_CAPTURE_STA&0X40). i2 G* e1 G. ^7 c6 Q! Y
            {+ S, A4 G+ M. ~$ ^2 f
                if((TIM3CH2_CAPTURE_STA&0X3F)==0X3F)
4 u5 K9 G" i7 P# M0 O& K                {( }3 g  |1 L' w
                    TIM3CH2_CAPTURE_STA|=0X80;     . M  y! j! I# f! E5 ?. N8 s1 m7 g
                    TIM3CH2_CAPTURE_VAL=0XFFFF;7 H& q7 {  r# ]1 `; l
                }
  W( s9 i" S( R" j8 Q& ?6 x                else TIM3CH2_CAPTURE_STA++;) L9 r& T* n5 U
            }    ; F9 e5 T- m7 {! N; v
    }       6 O9 \2 F8 i6 @2 x9 \& N
}# n+ X4 ?( m* j% z- k, }, _
mmuuss586 回答时间:2020-3-6 15:57:03
1.png % a, e# L- b0 G5 M+ r
2.png
  _1 P) j2 h6 N2 s7 O! W 3.png
3 y" ]' A6 I! A, p: v. N 4.png
9 c& q. I' p4 k, n$ Z) c 5.png
% S3 t* ]3 {) G5 D
8 L. L  I. F; D; y- R0 z1 C1 a
mmuuss586 回答时间:2020-3-6 15:59:37

2 l; i6 K( w7 n$ f* G' ?# }
基于STM32F030+FT1610FF1高精度超声波测距模块测距教程
$ q6 b4 g6 V( W1 T% ^' d+ M
      学习板卡需求:官方NUCLEO-F030R8或自制NUCLEO-DG板卡和FT1610FF1超声波,杜邦线4根;板卡连接如图:
1.png
, M, ^) x( x0 p7 O& E$ |2 K0 C6 F$ K

" B: ?1 s" r5 O  G1 j8 |% j
mmuuss586 回答时间:2020-3-6 15:59:59
配置和连接方式5 w% @2 T# \7 W/ `2 }
                NUC_LEO-DG-------------- FT1610FF1: b9 g/ l/ b1 J, @
                        PB3------------------------------T/SDA/TX
. \* b+ _; k! H1 X                        PB5------------------------------E/SCL/RX: n5 D5 u2 L7 S' [' n' X3 H# D
                        5V/3V----------------------------VCC+ G8 B+ p! Y( H7 t8 g, k
                        GND-----------------------------GND" |2 w' a# x* w9 f: Z5 I
mmuuss586 回答时间:2020-3-6 16:00:42
USART2串口通信引脚PA2、PA3和LED2的指示灯引脚PA5,基本的Cube配置不做介绍,主要为我们需要通过PB5读取IO的高电平持续时间,这里用到的是定时器的输入捕获功能,具体的Cube配置如下图所示:
% k7 X, ~1 w  \6 A; ^ 1.png   s. h0 P# [. K, a1 z. i  d, [
4 E! ^4 o6 }  f, o! c
5 E9 p# C: E3 H& o& S9 Z) ]- s
mmuuss586 回答时间:2020-3-6 16:02:14

" k8 [  `- P6 ]9 ^  t1 `# ?! d5 C3 P; ^然后再NVICSetings中选上TIM3 global interrupt,入下图:& L# c1 t. }. Y; F$ q. q- R
1.png 5 K+ c$ d3 c. G, N* M8 }! j
& y- n9 @3 d5 W  T7 J3 I

- @$ F0 F5 V6 ?
mmuuss586 回答时间:2020-3-6 16:02:41
然后把串口和LED输出配置好后生成MDK代码,编译无错误后添加需要的相关代码,主要缺少的代码为TIM3输入捕获的中断服务函数和串口通信的重定向函数,这里需要添加两个对应的全局变量,代码如下:6 m# |) z% j" l# B' x9 l! e
全局变量:
( ?3 P3 y5 W1 ]8 W' `: n: uuint8_t  TIM3CH2_CAPTURE_STA=0;                               
, X5 N3 e' d3 luint32_t        TIM3CH2_CAPTURE_VAL;5 R& }' w, X6 R( S8 w% y) O
mmuuss586 回答时间:2020-3-6 16:03:42
串口重定向函数为(需要包含对应的stdio.h头文件)# N# _" `; [$ D7 F4 L
int fputc(int ch,FILE *f)
8 {+ G* Z* K' V2 g, I{1 j9 w: G2 h/ X& o1 s# C: Y( I6 G
        while(0==(USART2->ISR&0x40));
* L7 Y) k: d3 A9 Z- {1 p9 M4 e& A        USART2->TDR=ch;) _7 t0 l6 Y% N- Q6 O" \
        return ch;  t; M0 _  k" E( z8 R( H* D. Y
        * a3 }) v# |  U8 J( f
}
2 H* R0 S' s+ ?
mmuuss586 回答时间:2020-3-6 16:04:21
其中Measur_Start()函数为触发超声波模块测量开始的TTL信号,代码如下
- }# ~& j, a* H5 E0 lvoid Measure_Start(void)7 D2 i( x$ n5 K, c! x
{
! N9 K$ ^  a; O: R        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);; }7 `) C  ?4 ^% i5 O
                HAL_Delay(1);
- t; n6 I7 o# h0 z: B# ~, B7 o0 j  THAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);
, k* |5 T& h4 v( d9 o0 Z! b}
% q) c; n# {: B) G/ e- F. }1 l# r# x
mmuuss586 回答时间:2020-3-6 16:04:57
这一部分参照模块IO通信模式的时序图可知,模块通信模式设置如下图:
1.png
8 \" e  V% G# _, k2 L. L9 C; h5 a( y
# Y2 {, f. J+ s& r  d
mmuuss586 回答时间:2020-3-6 16:06:25
代码添加后,烧录到板卡,然后打开串口通信助手,打开串口后就可以看到模块测试的数据如下图" C: i! F1 \) w, a3 `( X" f3 @: P
1.png
/ S, F1 F" W# R& P  m

/ L  i3 Z/ S& y- E. M0 B$ f' J
" @1 r8 k/ E: X. d; x
mmuuss586 回答时间:2020-3-6 16:06:48
:P:P:P:P:P:P:P

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版