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

基于Nucleo-F031的激光测距仪

[复制链接]
wenyangzeng 发布时间:2020-12-5 20:32
基于Nucleo-F031的激光测距仪
# A8 u8 C. g! p7 Z  {8 }
    Nucleo-F031麻雀虽小,五脏俱全。用它来驱动ST的VL53L1X激光测距传感器,是一个经济实用的方案。% S, R* Z- k- _& o/ s# Q; X/ S
' g* R4 h  f- x0 a# c' N
NUCLEO.png

& C9 ?( j9 X2 }6 D6 ^
3 h# _$ D, w/ c  本方案采用RS232串口通讯方式来驱动VL53L1X。有关VL53L1X的详细资料请参考ST官方:
& ]8 o5 B, n* T/ l* |7 V: bhttps://www.stmcu.com.cn/Article ... ode/news/art_id/707
' B$ m& G- O" z; Q0 ^. @! h: R% l
# `$ i$ H# }! {- P& c, ]硬件连接:

* h8 \+ E5 K8 H% Y/ [& j" H) A  ^5 G/ I3 a2 V
原理图.png 5 G$ B7 Y2 J: c9 i/ N- s* e* t

4 I; h+ ^- l% L: W- D' |使用Nucleo-F031的PA0、PA3、PA4来驱动OLED显示屏,PA9、PA10是USART1的TXD、RXD。串口波特率9600,8为数据位,1位停止位,无校验。中断方式接收。
! M  b( L6 `! l! R1 h
7 {- `) F8 e; V4 ~+ Z; l/ q9 m- X7 q6 p4 s' Z5 |0 O" e! Y
CubeMX的配置:

+ x5 q  p2 e8 ^  M+ K% S4 P. F( V+ I CUBEMX.png 5 d" G" \/ Z' j  G5 Z5 R* o
2 H6 r5 z( y+ N' `- J( i2 p

6 l, @9 F0 H" u( j运行结果
- U+ T; b8 r' l2 J4 u4 m  i

5 a$ ^* q( s8 r. ] 161908qcsd7czzj39t3j5z.png ) ~5 o# `& J9 j3 B+ e
: W8 J! L- h* G7 l* S
主要代码:
$ i. ]& X# @2 P; D* Y& x/ }

  1. 1 S; M: m3 u6 k+ ?
  2. int main(void)
    ( S1 e' m! R9 Z$ K
  3. {
    5 L. \% o7 E& R; @$ s1 n
  4.   HAL_Init();
    : U: e" Q. _/ c- D+ M3 }
  5.   SystemClock_Config();
    5 c# c3 m8 A8 h3 E: a7 z
  6.   MX_GPIO_Init();
    ' z' j6 ^5 ?. V1 T
  7.   MX_USART1_UART_Init();
    : Q  G) a0 S9 Y1 ^% m
  8.   LCD_Init();
    " A$ O9 X3 ?3 \  i( n
  9.   __HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);
    ( r0 p( V5 _5 C2 g! X
  10.   __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
    " F3 r6 a( \) Q6 Z+ q! g  f
  11.   __HAL_UART_CLEAR_IDLEFLAG(&huart1);
    ' j8 B) b2 z% G, o. ^
  12.   Tx_buf[0]=0xa5;
    ' R0 A: Q9 C% w- Y0 M4 D# V; c
  13.   Tx_buf[1]=0x45;0 O& |. B7 ?& K
  14.   Tx_buf[2]=0xea;! q( T3 G1 T" k; j
  15.   HAL_UART_Transmit(&huart1,(uint8_t *)Tx_buf,3,0xffff);. q4 o2 J0 B% C7 t7 B+ O
  16.   LCD_Print(20,0,"Nucleo-F031",TYPE16X16,TYPE8X16);0 k% H' \  K4 f. z$ }
  17.   LCD_Print(30,24,"激光测距",TYPE16X16,TYPE8X16);
    7 K0 W9 B# ]+ j* s7 o+ {
  18.   Disp_buf[2]='.';
    7 v, q' z1 V  X& _( b
  19.   Disp_buf[4]=' ';
    , p+ i- ?6 ^6 `' ^4 r, z; q5 O
  20.   Disp_buf[5]='C';/ A) E. ~9 B+ U' H- [/ f
  21.   Disp_buf[6]='m';8 j3 M/ t5 Z, Y$ m8 W1 R# T7 m
  22.   Disp_buf[7]='\0';
    . h3 D2 t# B& z6 z" X
  23.   while (1)
    ! L3 X# p. l( x
  24.   {3 K' e4 |$ l8 b
  25.    bcdcode=HEX2BCD(Lenght);5 S  q, ]3 P$ d, k5 @( V7 |( |9 r
  26.    Disp_buf[0]=bcdcode%1000/100+0x30;
    % u  p& n/ ]6 }" S8 v* V
  27.    Disp_buf[1]=bcdcode%100/10+0x30;
    3 e* n( C' R* x  I6 e
  28.    Disp_buf[3]=bcdcode%10+0x30;
    ' z3 C2 d/ \/ C# V5 E! @% M
  29.    LCD_Print(36,48,Disp_buf,TYPE16X16,TYPE8X16);9 S/ M( o' X( i) m
  30.    HAL_Delay(200);
    % m' M8 X4 a: B6 n+ P2 Q1 O( u
  31.   }
    8 K( w  L1 F/ `+ j0 }  R
  32. }
复制代码
3 k: P& E& r5 S! i  F
中断函数:
  1. void USART1_IRQHandler(void)- z/ _" L4 H3 S5 B
  2. {
    " D9 w1 j- }, j, C
  3. if((USART1->ISR & USART_ISR_RXNE) != RESET)        ' G" q# w" V# A/ B
  4.      {/ k$ v7 a' S3 Y3 M+ I3 R$ u1 O. t
  5.       Rx_buf[RxCount++]=USART1->RDR;
    4 B7 j% s+ B, g; B; a  T
  6.      }, I1 \- M$ I5 A+ _+ b6 A8 T

  7. 2 l* R5 s' S% k' |2 y  ?
  8.     if(RxCount==8)% z7 C! ^; D) _' M
  9.       {
    ( V# I5 K. G9 r
  10.       Lenght=Rx_buf[4]<<8;
    ! s7 k( f: V0 W( Y7 B9 K
  11.      Lenght |=Rx_buf[5];
    0 i& @$ d0 j; r1 i3 b7 t" ^
  12.      RxCount=0;        - t+ ?' A8 K# r3 i: p& c
  13.      }        3 ~# Y2 j* l+ V! J( i7 d
  14.   HAL_UART_IRQHandler(&huart1);
    $ {. n* k$ [9 f: |% {- H( E
  15. }
复制代码
1 e+ B' l) K5 ^+ J. s

3 J/ J+ q4 ^( K+ }) R% R# _; s
7 M1 s( o* ]& ~7 Q; A
; T3 n6 g" e1 g9 r* L4 k6 V
; g# H2 t/ N* \# D" v" u0 p5 y: f
; e+ y6 j- T) a" h. P3 A
收藏 评论0 发布时间:2020-12-5 20:32

举报

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