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

基于Nucleo-F031的激光测距仪

[复制链接]
wenyangzeng 发布时间:2020-12-5 20:32
基于Nucleo-F031的激光测距仪
, w2 u8 D* \: ~  L/ X  h: ]- |
    Nucleo-F031麻雀虽小,五脏俱全。用它来驱动ST的VL53L1X激光测距传感器,是一个经济实用的方案。- o) B% n# H- t0 s
3 l. c- \' y/ w+ C$ \7 b# m
NUCLEO.png

, O! \$ r5 K; U- N( z. B5 N" L5 R
( l0 @) b& C5 l+ J# ]  本方案采用RS232串口通讯方式来驱动VL53L1X。有关VL53L1X的详细资料请参考ST官方:
/ h! o. Z% o+ {3 E" Q: o/ m$ \https://www.stmcu.com.cn/Article ... ode/news/art_id/707
8 a3 K' q, @6 q" A+ X' q$ E/ w' g) Z6 r1 ]1 r/ d
硬件连接:

( j" N- O5 R) @( g/ p5 c3 i! n+ x; u
原理图.png
0 i: }4 ^6 e- S9 y# K- h# X
/ s" z$ p! r3 G! {) N使用Nucleo-F031的PA0、PA3、PA4来驱动OLED显示屏,PA9、PA10是USART1的TXD、RXD。串口波特率9600,8为数据位,1位停止位,无校验。中断方式接收。
0 ?  t+ P/ E1 A: I" Y- Q& D6 B* H. P1 V
" G4 R  X- u% ^! T
CubeMX的配置:

" A; ]( Z7 _: _+ j! D# g+ G CUBEMX.png
4 Q& e/ g" D% d  \" e6 O  k( S" w/ p- U" q7 |0 x6 O! X9 C. F
! z$ e; b  M4 Y# f! F
运行结果
! ]2 S! G( F) b4 E( C# G

8 j  }- W1 }( s  B* O 161908qcsd7czzj39t3j5z.png
9 o. I# ~+ Z! S6 m3 y# K$ M9 E6 ~- q4 ]
主要代码:, {/ g! v( o$ ^& F( k: L
  1. % h4 e6 k% ^3 I/ B+ M2 X
  2. int main(void)* l$ z- e2 P% ]6 i- d
  3. {
    ; C$ [1 K$ q+ u! I
  4.   HAL_Init();
    1 |- k, V% |  a8 u' ]5 x) h, J; Y
  5.   SystemClock_Config();
    ) J5 e3 u/ P$ J
  6.   MX_GPIO_Init();
    ' f, ^" N) E+ a$ [* ^0 B
  7.   MX_USART1_UART_Init();
    6 r. y4 Y! m$ u( w3 E
  8.   LCD_Init();6 ?+ {4 f: W! {4 |- f* Q3 v
  9.   __HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);
    - V0 q& N6 m+ K+ b0 B9 C& }2 G; ?
  10.   __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE); 0 {: \9 H5 T, S) I. j% {- L
  11.   __HAL_UART_CLEAR_IDLEFLAG(&huart1);
    ! M  I  V; b. c5 i
  12.   Tx_buf[0]=0xa5;
    : D7 x! H9 m" |  x) l/ D1 Q. Y0 B
  13.   Tx_buf[1]=0x45;
    . z, b+ D+ r5 T& ?& x; D. y' h
  14.   Tx_buf[2]=0xea;
    / O' c3 H  D, A# ~) ]1 N
  15.   HAL_UART_Transmit(&huart1,(uint8_t *)Tx_buf,3,0xffff);4 R% i8 v! ?( T/ u$ M- Z
  16.   LCD_Print(20,0,"Nucleo-F031",TYPE16X16,TYPE8X16);
    $ D3 f% m* w  k4 |- s
  17.   LCD_Print(30,24,"激光测距",TYPE16X16,TYPE8X16);
    3 ?3 m+ w7 x+ [+ l+ W3 I. w$ c
  18.   Disp_buf[2]='.';
    6 w* @" h7 g0 f! x: `
  19.   Disp_buf[4]=' ';/ U: Z2 a5 H5 q; s, X
  20.   Disp_buf[5]='C';
    ) X6 g9 j" W9 n- p: l0 U
  21.   Disp_buf[6]='m';
    ' }! d, I4 S1 _$ O3 I1 f# n
  22.   Disp_buf[7]='\0';2 F0 z, q% v7 Z8 c
  23.   while (1)# ^( q: O+ [0 j2 M
  24.   {
    * Q3 U- S3 |2 h$ a
  25.    bcdcode=HEX2BCD(Lenght);
    % s$ @; b) D/ I. U
  26.    Disp_buf[0]=bcdcode%1000/100+0x30;
    4 d1 V* u" V" g1 b5 ^
  27.    Disp_buf[1]=bcdcode%100/10+0x30;# G+ ~: W( F3 T8 K
  28.    Disp_buf[3]=bcdcode%10+0x30;: P+ L4 P# k8 S1 {+ ]
  29.    LCD_Print(36,48,Disp_buf,TYPE16X16,TYPE8X16);; B: E1 i' t# ?$ G/ f: }# M
  30.    HAL_Delay(200);, ?, r8 T' l! F* x
  31.   }
    6 x; l, j" b  v/ n2 f& E
  32. }
复制代码

+ Z5 v8 h2 L- J中断函数:
  1. void USART1_IRQHandler(void)
    ! k  c: Q1 T$ M" p5 T7 g
  2. {
    ! C1 O1 R9 u6 }# R' @* W. o$ T
  3. if((USART1->ISR & USART_ISR_RXNE) != RESET)        + l/ E( S. y; H
  4.      {
    $ b5 p& R$ V. `/ r' D. L) ]# o% |
  5.       Rx_buf[RxCount++]=USART1->RDR;9 w3 _+ p6 ^  [0 k8 T/ z. f
  6.      }, v. e# @  P! t7 S: [

  7. . ~# r. \6 j9 p
  8.     if(RxCount==8)& B: c+ ^5 Q4 ^  T) Q/ \) v
  9.       {
    8 i. W- X/ f; ~6 n
  10.       Lenght=Rx_buf[4]<<8;) ]3 a! E3 F& ]6 W  u, P
  11.      Lenght |=Rx_buf[5];
    - ^# R. O( r2 ]2 J# i3 U8 e7 {2 p
  12.      RxCount=0;       
    4 j0 N, W' _8 c+ l
  13.      }        ) }3 ?9 u9 I' A7 c4 k
  14.   HAL_UART_IRQHandler(&huart1);
    4 ^6 f7 S3 p& p7 e3 e# ^$ Y9 S
  15. }
复制代码
9 B' d2 x0 b+ q3 p
% q+ l( B9 _$ j% l, U- t" R

# C! V7 g; P3 K% K; k$ n; C1 H

6 N" ^9 h  \: ~$ T  M/ P2 J, b; R& G  q9 B0 E& m
收藏 评论0 发布时间:2020-12-5 20:32

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版