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

基于Nucleo-F031的激光测距仪

[复制链接]
wenyangzeng 发布时间:2020-12-5 20:32
基于Nucleo-F031的激光测距仪# f/ I, d4 ?, x
    Nucleo-F031麻雀虽小,五脏俱全。用它来驱动ST的VL53L1X激光测距传感器,是一个经济实用的方案。
& b: `. H' `6 e2 y) h  R- T5 y& b3 X
NUCLEO.png
3 ^# ~' N; t3 g) u( b- x8 \  x
6 C* y% P3 \0 v+ E- [6 U
  本方案采用RS232串口通讯方式来驱动VL53L1X。有关VL53L1X的详细资料请参考ST官方:
; D1 {" O# Y4 W4 Z0 Thttps://www.stmcu.com.cn/Article ... ode/news/art_id/707
4 |$ M; B9 I( L" J! X$ p7 k  c+ o$ h3 I5 c! f# r1 Y
硬件连接:

1 S" W* a* l6 n1 w6 o. [# f7 E! H
原理图.png
/ B5 t- k; T4 b/ o6 m
3 r  G7 s  l9 f2 c使用Nucleo-F031的PA0、PA3、PA4来驱动OLED显示屏,PA9、PA10是USART1的TXD、RXD。串口波特率9600,8为数据位,1位停止位,无校验。中断方式接收。
4 o$ H( e; g4 x+ B! x) P- ^2 n4 ?8 \9 Y
) j$ U+ }7 X/ [: N
CubeMX的配置:

0 M, k9 I. U4 t5 h! P CUBEMX.png
& ?$ O( j( F; Y# h1 n
% ]( R5 |6 R$ E3 w7 G
1 Z1 i7 c& F' {运行结果
- F% I" f6 N0 o9 J8 ?; N1 Q. m2 A

% k7 z1 [, a; R( `. A 161908qcsd7czzj39t3j5z.png
, C! q0 z' e3 [" ~% G+ \. F* V7 i0 }& O; F' ^' L! C: g- b
主要代码:9 y: ~0 i; E" O, h

  1. - e0 |; @: }" y3 h. w
  2. int main(void)  v; u2 P( O; p9 M
  3. {5 v; ?1 t4 G3 F& I# V! j/ v
  4.   HAL_Init();  ], m) i& n* A
  5.   SystemClock_Config();$ u3 P9 }4 ~1 {+ C: C3 O  B. z
  6.   MX_GPIO_Init();
    5 @3 i) y$ {, P6 z
  7.   MX_USART1_UART_Init();
    . m( Z$ \7 Z8 N' T1 _1 p
  8.   LCD_Init();% s- b8 \1 K2 n; V
  9.   __HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);
    / K& \) t# K1 _- E
  10.   __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
    + R' N- i) ~- H8 M/ }' b
  11.   __HAL_UART_CLEAR_IDLEFLAG(&huart1);
    6 `* S  f- O' w/ R  H
  12.   Tx_buf[0]=0xa5;
    ' g: T, i/ |- Q
  13.   Tx_buf[1]=0x45;4 x3 O. G1 e( i7 P4 q3 b' S- I2 [
  14.   Tx_buf[2]=0xea;  I2 S  g) Q6 ]+ ], W( l. `
  15.   HAL_UART_Transmit(&huart1,(uint8_t *)Tx_buf,3,0xffff);* v# G, T' ?: p6 f
  16.   LCD_Print(20,0,"Nucleo-F031",TYPE16X16,TYPE8X16);
    , Q3 W2 D7 z5 J
  17.   LCD_Print(30,24,"激光测距",TYPE16X16,TYPE8X16);* g3 [7 F- j. x) b, S6 y) ^
  18.   Disp_buf[2]='.';. v" [7 m4 [/ r; p+ ^% p
  19.   Disp_buf[4]=' ';
    2 a# a* d* y+ S$ ?" T) @
  20.   Disp_buf[5]='C';: g/ C. [9 a3 Q- j% j
  21.   Disp_buf[6]='m';
    . A) C0 O$ l* G/ K( o4 _- `2 j
  22.   Disp_buf[7]='\0';
    9 b6 @$ `5 n6 }2 [' B* Q
  23.   while (1)2 x4 O/ ~, Q3 N+ a0 }" a
  24.   {
    ; R) i. c2 C% S
  25.    bcdcode=HEX2BCD(Lenght);
    . o3 _* |: F3 N6 x( E9 |4 z6 F* ~, O
  26.    Disp_buf[0]=bcdcode%1000/100+0x30;
    $ Q4 K% N* B, e9 F1 W$ W) ~
  27.    Disp_buf[1]=bcdcode%100/10+0x30;7 W) @$ P% M) m) g
  28.    Disp_buf[3]=bcdcode%10+0x30;- P! D. k3 b  j" I
  29.    LCD_Print(36,48,Disp_buf,TYPE16X16,TYPE8X16);
    4 N7 J( o9 ^. [5 Z8 j4 e  T
  30.    HAL_Delay(200);
    ! }5 R  L8 p8 L9 R( o
  31.   }
    4 b4 |, @$ n$ g( Q
  32. }
复制代码

) n! ?  [" I: o& J* b中断函数:
  1. void USART1_IRQHandler(void)
    & e3 ?: X8 F( w' a" s
  2. {
    9 V( b- M+ p4 s( Y7 c2 i3 a
  3. if((USART1->ISR & USART_ISR_RXNE) != RESET)        / I6 Z. e4 j' d9 j
  4.      {- @- @9 u# n" U$ y) B2 V- q# J+ h
  5.       Rx_buf[RxCount++]=USART1->RDR;! R. k2 e: a" e- O: c' }( e
  6.      }
    + W7 r: K8 Q, ?7 ?- |

  7. 3 B. `& T3 {- N3 b1 {
  8.     if(RxCount==8)
    " I8 e; n. b3 f% m, r/ `8 g
  9.       {. [( v' W6 R& w2 S
  10.       Lenght=Rx_buf[4]<<8;' K/ Z+ Q# b. o% y6 f1 k
  11.      Lenght |=Rx_buf[5];$ i% h! Z0 ]; L
  12.      RxCount=0;        3 H  _0 o4 R& c8 g. y0 z5 ]$ W" P$ V
  13.      }        $ X3 B( Q4 I$ _& S# j" Z1 m7 M
  14.   HAL_UART_IRQHandler(&huart1);
    8 ^1 {( }, F& L
  15. }
复制代码

$ z: ?; U6 W7 g( X' Z  b2 N6 U) k9 i2 p3 L5 V

/ m  V3 p1 Z- v, K: O: Y9 y9 z6 Y0 s5 s. ]( D2 N* |
' q* p' L4 L0 q. t( m1 M
$ R! y2 Y! z8 u( E
收藏 评论0 发布时间:2020-12-5 20:32

举报

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