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

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

[复制链接]
jundao721 发布时间:2024-7-1 23:14
1 `0 z6 c2 E3 n& x' d
      收到板卡,先点个灯,没什么问题就进入正式测试阶段。仔细阅读H533的Datasheet,是一款资源很丰富的MCU,发现其有两个FDCAN接口,这样就丰富了板卡通讯。这种总线通信方式当前使用的比较多,就先测试下这个外设功能。
% b. V' [) V+ j) [6 o6 L    首先搭建测试硬件条件,使用板卡上的PB12和PB13作为通讯接口,连接到TJA1044 驱动芯片板卡上,按照datasheet对应上即可。如图1所示:
! b5 \6 `' ~% Z. [# [4 w 5.jpg
3 ]" o9 G8 W% x  I+ t# z' ~4 X* W. Y& G$ ~. _
图1: J! \- c+ U0 m
. y/ q1 y* [7 m! q' P. }' z0 k
1.JPG
9 I6 }2 ?4 B4 o5 z  p/ D) [+ D
& P1 _7 q# I0 _* `3 b% O2 p图2
/ s- f" s8 V6 ]! @3 C( M) t; A
( \4 i4 r5 R0 ~9 k$ I/ w    然后是使用Cubemx软件对MCU的时钟,外设等进行配置,并生成所需要的项目框架。时钟配置如图3所示:
" H! p  b+ J0 i 6.JPG
( V: g/ I& B" Y) I- N9 Q: e( U$ Z0 G
图3/ O6 E8 I! I  x8 {, [; X0 G$ D
    FDCAN的时钟使用24M,不倍频,波特率为1Mbps,数据波特率为2Mbps,外设的配置如图4所示:
' m- K8 D9 u; @( p* X 7.JPG 7 r- F: l. M/ J. h2 L9 B% P

1 K" ?0 _. l. o5 v/ [; `图49 @1 F$ l0 L4 B# s5 D, V4 P
    使用板载的LED作为接收数据的指示灯,可在图上进行配置,如图5所示:8 e1 [- u- R! ]4 L; |* I" g) P
8.JPG
3 E. t9 e0 G  e+ a
6 w% o" ~! s* A" [$ C图54 _0 R! h/ C8 l& `3 ?
    这样配置完后,生成所需要的项目框架。编写接收和发送数据的初始化函数,如下所示:
5 r9 {3 R- L; e& w( r    ( A8 v% f+ l, _# o
  1. /* Prepare Tx message Header */
    % y3 P  j' H  x1 k7 }* U
  2.   txHeader.Identifier          = Tx_ID;
    6 a- G$ P, ~( \+ p8 V
  3.   txHeader.IdType              = FDCAN_STANDARD_ID;
    ; b0 n' a0 @' J3 J) P
  4.   txHeader.TxFrameType         = FDCAN_DATA_FRAME;
    + R. O' |1 X. A; J# j( w; _1 g. s; n
  5.   txHeader.DataLength          = FDCAN_DLC_BYTES_64;
    6 e' [; H+ P" E( z" X7 {/ U
  6.   txHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;; }# `# _& G6 V) S5 I! Q
  7.   txHeader.BitRateSwitch       = FDCAN_BRS_ON;
    , ?3 T- q: a, d
  8.   txHeader.FDFormat            = FDCAN_FD_CAN;/ v5 j% {) N+ M# |5 s* c
  9.   txHeader.TxEventFifoControl  = FDCAN_NO_TX_EVENTS;
    5 p) Z$ e8 f& z, k) O
  10.   txHeader.MessageMarker       = 0U;
    ' s9 @8 q: L' R1 F# e* B3 d
  11.   c2 m6 M0 J2 c1 h5 q6 Q' C
  12.   /**
    * a, X. X  s5 R8 G% u3 x( v  M
  13.     * Configure and enable Tx Delay Compensation, required for BRS mode.
    9 R# y% X, C7 |. C
  14.     * TdcOffset default recommended value: DataTimeSeg1 * DataPrescaler
    5 Q+ k& U* l5 {: k% }2 Z: u
  15.     * TdcFilter default recommended value: 0
    & g# Y2 f# ^# u0 U6 v* R
  16.     */: A2 Y; p. n# X
  17.   if (HAL_FDCAN_ConfigTxDelayCompensation(&hfdcan2,
    4 B; v6 O% \+ ]3 P. J
  18.                                           (hfdcan2.Init.DataPrescaler * hfdcan2.Init.DataTimeSeg1), 0U) != HAL_OK)
    # f5 F" z5 g8 U+ R& j% G: m
  19.   {
    ! Q$ w% @. L1 i
  20.     Error_Handler();
    8 T/ @/ _7 y" W( O7 L1 J# p
  21.   }
    ! ^1 w) K% B. k8 r4 l7 u! I

  22. 3 u9 k4 p4 ^" H- a& V% k
  23.   if (HAL_FDCAN_EnableTxDelayCompensation(&hfdcan2) != HAL_OK)
    % K5 K1 H" \) L! B3 R, j
  24.   {
    ) g% f/ ^1 H6 a) \& \1 ]! m
  25.     Error_Handler();" f0 l* |, i2 y# ]
  26.   }3 V" L. V" p$ _  R

  27. 5 q$ h( O& K8 X5 m8 _
  28.   /* Start FDCAN controller */
    6 v( t: X5 Q  e, ?. Q
  29.   if (HAL_FDCAN_Start(&hfdcan2) != HAL_OK)
    - U. B! D: b5 H2 V/ ~
  30.   {
    # Y/ n+ A7 a) h1 D6 R
  31.     Error_Handler();
    : I; z0 J4 Y# N
  32.   }
复制代码
  1. void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs)0 ?0 k5 g0 s: C6 Z  o, C
  2. {% e$ t. `' q7 K
  3.   if ((RxFifo0ITs & FDCAN_IT_RX_FIFO0_NEW_MESSAGE) != 0U)) J8 w6 ^  D+ t4 O$ @' z/ U
  4.   {) u. d5 Z+ R3 u' A! ?# D% a
  5.     /* Retrieve Rx messages from RX FIFO0 */
    / l( n5 P) ?; q; U+ }1 ~+ N
  6.     if (HAL_FDCAN_GetRxMessage(hfdcan, FDCAN_RX_FIFO0, &rxHeader, rxData) != HAL_OK), v& s  {2 e, y" G$ Y- t- a8 N
  7.     {. U- U4 n8 }6 ]: H
  8.       Error_Handler();
    $ w/ j1 z% \' V) R$ ]* n* P- d+ U
  9.     }! L1 t* Y, j) z7 _
  10. 8 Y5 ^% n3 O" ^, H* [* u$ h
  11.     /* Compare received RX message to expected data. Ignore if not matching. */) g+ D8 A8 X" d$ v9 b
  12.     if ((rxHeader.Identifier == Rx_ID) &&) N: `3 n4 U) @) e; B4 j
  13.         (rxHeader.IdType     == FDCAN_STANDARD_ID) &&
    9 S5 f- P% R5 \6 v- H5 Z4 K: A+ j
  14.         (rxHeader.DataLength == FDCAN_DLC_BYTES_64))
    1 h5 [( \+ B& A3 F
  15.     {- t5 Z1 r2 q1 B5 Z4 z6 z& ]- T

  16. ; s1 {* @' @2 r: C( k+ Z
  17.                 HAL_GPIO_TogglePin (GPIOA,GPIO_PIN_5);
    ; X+ h7 q4 k( M6 l3 s1 j& P
  18.     }2 T+ ~  [& u6 ^( t( x2 c
  19.   }! O: o; {( @& S: M3 n9 `
  20. }
复制代码
  1. if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan2, &txHeader, txData) != HAL_OK)
    " k7 [7 ^2 w0 M
  2.     {9 t! \/ g9 w7 c/ j
  3.       Error_Handler();
    ; N% t- X0 f! `- `9 I* q2 R4 c
  4.     }, ]7 F* J+ P- F  q$ |
  5. $ t/ H# C) [4 Z$ X; Q3 t/ L" o
  6.     /* Delay for simple button debounce */
    ) _) n" p" K$ _" a/ b" ?- y5 G
  7.     HAL_Delay(1000U);
复制代码
2.JPG
3.JPG
赞 收藏 评论0 发布时间:2024-7-1 23:14

举报

0个回答

所属标签

相似技术帖

官网相关资源

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