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

【NUCLEO-H533RE评测】1.FDCAN 通讯测试

[复制链接]
jundao721 发布时间:2024-7-1 23:14

2 e4 K$ l- o: F      收到板卡,先点个灯,没什么问题就进入正式测试阶段。仔细阅读H533的Datasheet,是一款资源很丰富的MCU,发现其有两个FDCAN接口,这样就丰富了板卡通讯。这种总线通信方式当前使用的比较多,就先测试下这个外设功能。) k7 t6 {( N. p8 e8 L
    首先搭建测试硬件条件,使用板卡上的PB12和PB13作为通讯接口,连接到TJA1044 驱动芯片板卡上,按照datasheet对应上即可。如图1所示:, b* c6 F, S* ~8 ]5 _* R5 V
5.jpg + |" V4 n" Y/ L8 B; f& R" g
2 j( ^4 E( p8 z' A# h) N# Q
图1
2 h7 {) }4 b  ?' E5 A$ ~9 N8 ~) m9 w
7 M- {' E" R. I( M, D7 R 1.JPG
; u# c) x4 Y8 P# O0 i+ m" k( R1 D2 O  F5 g! y4 k' p$ ^
图2& ^8 T3 y( J* G/ E( L
  a( g" p8 m) q. q, l/ E
    然后是使用Cubemx软件对MCU的时钟,外设等进行配置,并生成所需要的项目框架。时钟配置如图3所示:
( s6 L% b5 `% ?' s) \0 c$ w 6.JPG - e( d1 }  h* T. D5 v  E9 X

$ M: z1 y' d: H0 J/ A图30 `; b7 K; ?& V- k# ^, v/ B
    FDCAN的时钟使用24M,不倍频,波特率为1Mbps,数据波特率为2Mbps,外设的配置如图4所示:* G2 N6 O* J; h, j3 a5 j
7.JPG 3 F+ W+ [% h' ~; }

" i$ P3 z' @6 p2 g# B图4
3 x, @) E* Y0 ?; i! A& r    使用板载的LED作为接收数据的指示灯,可在图上进行配置,如图5所示:
- f+ ?( u  h4 y& X* \: f4 A* J 8.JPG
4 [( v& H& ~) `8 b" k
$ u% m6 [  G8 e, q% ]图50 R. ^: m- p& P7 H
    这样配置完后,生成所需要的项目框架。编写接收和发送数据的初始化函数,如下所示:" A7 M. q$ L, {) C( D
   
8 j) v3 S, U0 {
  1. /* Prepare Tx message Header */  q: O" i  w7 b: \4 g3 P# F
  2.   txHeader.Identifier          = Tx_ID;1 p) e0 b7 z' p" @4 f
  3.   txHeader.IdType              = FDCAN_STANDARD_ID;) x4 h) u7 r- A% b7 A2 i' e
  4.   txHeader.TxFrameType         = FDCAN_DATA_FRAME;
    - I2 p, e0 C) z5 Q
  5.   txHeader.DataLength          = FDCAN_DLC_BYTES_64;- T6 F3 Q: B% }0 R
  6.   txHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
    * \- {2 O- c! c4 ?9 \# x
  7.   txHeader.BitRateSwitch       = FDCAN_BRS_ON;
    $ m5 X3 f: V# G5 V) u
  8.   txHeader.FDFormat            = FDCAN_FD_CAN;  Y# f  b0 S& W0 T+ t' j
  9.   txHeader.TxEventFifoControl  = FDCAN_NO_TX_EVENTS;
    2 n& e7 V% T" S/ ]# I
  10.   txHeader.MessageMarker       = 0U;
    ) `7 u" X' `, [1 b9 W

  11.   L- C0 Y' \$ H) @2 L+ }
  12.   /**0 ~# O. z; \0 Y3 d% Z
  13.     * Configure and enable Tx Delay Compensation, required for BRS mode.
    + @: n; |, r$ `: e! f2 d
  14.     * TdcOffset default recommended value: DataTimeSeg1 * DataPrescaler, K" P. \* q  X9 R3 L2 l
  15.     * TdcFilter default recommended value: 0- j+ U$ m8 B" Y# p$ E
  16.     */
    7 {2 D; M3 N& h# D& Q& Z
  17.   if (HAL_FDCAN_ConfigTxDelayCompensation(&hfdcan2,) E( o( W% [3 r3 S
  18.                                           (hfdcan2.Init.DataPrescaler * hfdcan2.Init.DataTimeSeg1), 0U) != HAL_OK)* ]4 M  H) R, I* g7 C
  19.   {$ R, t# q: p% l
  20.     Error_Handler();$ O% ^( d  D2 {+ O
  21.   }
    8 [+ R8 a1 z; h; n' g" b
  22. # J2 P0 a, w& ~$ ~) ]) a2 z
  23.   if (HAL_FDCAN_EnableTxDelayCompensation(&hfdcan2) != HAL_OK)$ \" o. U5 D3 o  w7 W# W
  24.   {# Y2 j, ~" x; e1 i
  25.     Error_Handler();
    3 m4 b% `5 d* H/ ^
  26.   }
    + i+ y& l$ ?+ a6 I; g" p

  27. ; x7 Y' e& p1 S5 U, Z) b1 V
  28.   /* Start FDCAN controller */
    2 z. l3 v+ ^) N  Q  W8 X& L
  29.   if (HAL_FDCAN_Start(&hfdcan2) != HAL_OK)
    0 U0 [4 P2 a  [) j% c6 l% V) T" V
  30.   {, |4 E5 V& i8 [) X1 v
  31.     Error_Handler();4 T% k- }& k5 n! v
  32.   }
复制代码
  1. void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs)
      z5 v' y# F% l( ]
  2. {
    & D3 ]% U5 ]& x, m: B- s" }
  3.   if ((RxFifo0ITs & FDCAN_IT_RX_FIFO0_NEW_MESSAGE) != 0U)
    , s2 K- T- c* v2 V/ \
  4.   {
    0 {% S! e; C% y0 \" s1 d# Z9 o
  5.     /* Retrieve Rx messages from RX FIFO0 */- c3 y7 d* K7 I1 S- P7 P" T
  6.     if (HAL_FDCAN_GetRxMessage(hfdcan, FDCAN_RX_FIFO0, &rxHeader, rxData) != HAL_OK)
    9 t  [; Z! R6 p$ D$ Q" Q
  7.     {$ Z5 u( V2 {$ L; e8 _
  8.       Error_Handler();1 Z# v! p+ u, Q: |. W
  9.     }8 I, A/ ]2 |5 j; G; E5 e

  10. 5 e4 q- ^0 k- |( G# G6 p1 ^
  11.     /* Compare received RX message to expected data. Ignore if not matching. */* g# z7 `: u! z3 j6 [* W7 v
  12.     if ((rxHeader.Identifier == Rx_ID) &&
    / Z0 ~4 y8 v: d4 h9 E- _
  13.         (rxHeader.IdType     == FDCAN_STANDARD_ID) &&0 ?; }" q, ~; S3 w6 I; d6 K
  14.         (rxHeader.DataLength == FDCAN_DLC_BYTES_64))
    $ C! O% [+ k- ~0 g+ F, I
  15.     {: S$ v8 y6 P+ Q; C5 j! S# w6 K
  16. 8 q4 T0 u. b! a% g7 }7 T
  17.                 HAL_GPIO_TogglePin (GPIOA,GPIO_PIN_5);
    & p0 f9 {9 X" G+ ~9 D' \7 k
  18.     }
    + A+ }; w0 X: v( i8 F# Z. C
  19.   }
    1 R0 l* d+ |* A0 Z  S9 A( y
  20. }
复制代码
  1. if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan2, &txHeader, txData) != HAL_OK)& R% p5 c5 a# t9 d4 i* L
  2.     {6 }/ D! t& i/ R: R) N# C
  3.       Error_Handler();
    ( n) ^( j) s- N  d8 |: C
  4.     }6 R; B1 N9 {% n( y5 o
  5. 7 R! T  I! l! D  A0 S9 w5 O1 \
  6.     /* Delay for simple button debounce */
    + y2 E' t# G- g$ Y* P5 f% Z
  7.     HAL_Delay(1000U);
复制代码
2.JPG
3.JPG
收藏 评论0 发布时间:2024-7-1 23:14

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版