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

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

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

* j0 f& N: r: y- i: T$ ]      收到板卡,先点个灯,没什么问题就进入正式测试阶段。仔细阅读H533的Datasheet,是一款资源很丰富的MCU,发现其有两个FDCAN接口,这样就丰富了板卡通讯。这种总线通信方式当前使用的比较多,就先测试下这个外设功能。* p0 N+ B% [! a" P7 W
    首先搭建测试硬件条件,使用板卡上的PB12和PB13作为通讯接口,连接到TJA1044 驱动芯片板卡上,按照datasheet对应上即可。如图1所示:7 [4 @3 R8 q6 G1 J
5.jpg ' S" N' N, a9 x
, `+ q" Y! S! k! @! A, d6 ]
图1
, I' N5 ^$ H# A4 p8 X) O. w1 o4 J' e2 z- Z9 x# H! Y& c  \
1.JPG * |4 e0 \+ z' L( B& F

- L0 c7 S$ s- C  G2 t, J& j. H图2
" R4 P+ @% V' f4 e8 W
2 X: s9 t$ V. e, w& t    然后是使用Cubemx软件对MCU的时钟,外设等进行配置,并生成所需要的项目框架。时钟配置如图3所示:
. P/ f8 F1 G4 u' @2 H  c/ d4 D 6.JPG ( @. |/ N7 p* U2 R* @

* \. F0 s; l. H4 k8 D图3
+ Z8 }) L- H& S/ ]    FDCAN的时钟使用24M,不倍频,波特率为1Mbps,数据波特率为2Mbps,外设的配置如图4所示:
9 L* J( Y* ^9 ^" c  M2 q/ M 7.JPG
, Y7 X' o! q3 t7 S) ]/ L; A3 s/ C1 N0 r. G
图4
/ I/ m6 h+ u0 Q- Q    使用板载的LED作为接收数据的指示灯,可在图上进行配置,如图5所示:* W4 E* n3 B9 B, Q
8.JPG 9 }: |  h9 k& W7 g8 W# ^
9 R4 G2 p& N" R# y) P
图5
, J1 f& t7 m* R* N7 p9 I    这样配置完后,生成所需要的项目框架。编写接收和发送数据的初始化函数,如下所示:
/ o- a* R9 f6 W0 F9 d9 @    . m9 ~5 l" m+ S& B; G" |" f
  1. /* Prepare Tx message Header *// g# r. l3 s3 d7 a/ o
  2.   txHeader.Identifier          = Tx_ID;
    % M; C2 k: C2 D7 `- a  N
  3.   txHeader.IdType              = FDCAN_STANDARD_ID;
    9 Y- ]* H2 v1 a! T4 ^" n' t3 g% D
  4.   txHeader.TxFrameType         = FDCAN_DATA_FRAME;- F2 D2 |9 O1 G; V1 x9 g0 Z
  5.   txHeader.DataLength          = FDCAN_DLC_BYTES_64;
    $ q- m8 D+ D% S$ z! }1 u' f6 }0 O- n
  6.   txHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
    5 \1 `. a4 m1 k, a; ~, }5 \' ]
  7.   txHeader.BitRateSwitch       = FDCAN_BRS_ON;
      B4 B  Z6 u  M7 ^% Y
  8.   txHeader.FDFormat            = FDCAN_FD_CAN;
    ) s1 J8 |% ?" h$ l; Y2 v6 s
  9.   txHeader.TxEventFifoControl  = FDCAN_NO_TX_EVENTS;
    * J( A" i6 V% D, g/ N5 n4 {
  10.   txHeader.MessageMarker       = 0U;
    # V& s, _9 [% x4 k0 {
  11. ; _9 S4 r1 D! Q
  12.   /**
    $ e3 [6 U+ \, O7 C' u$ e
  13.     * Configure and enable Tx Delay Compensation, required for BRS mode.
    . j' k% `# F2 ^& T- X4 ~7 `0 z" X
  14.     * TdcOffset default recommended value: DataTimeSeg1 * DataPrescaler7 B' u) r5 c) t, _1 m! l; B. h
  15.     * TdcFilter default recommended value: 0
    7 p6 |. A3 {+ E. t7 Y5 i
  16.     */2 v0 O9 G$ Q5 O3 V# s0 z) n
  17.   if (HAL_FDCAN_ConfigTxDelayCompensation(&hfdcan2,* y+ Y5 r; H# u  x& y  d, `
  18.                                           (hfdcan2.Init.DataPrescaler * hfdcan2.Init.DataTimeSeg1), 0U) != HAL_OK)" U+ g& y- V* p. O9 m3 B
  19.   {- ]; w# x* T  e1 q* w
  20.     Error_Handler();
    6 Y* X, D3 R3 c
  21.   }# }2 [# }% }( g

  22. ) q2 L5 \. o6 e! ~& U
  23.   if (HAL_FDCAN_EnableTxDelayCompensation(&hfdcan2) != HAL_OK)
    ! ?- }6 d1 Y# D6 N/ v. n
  24.   {
    0 L5 a9 N3 f6 Y$ V/ z) t7 n
  25.     Error_Handler();
    , t1 @9 R5 ~# S4 N
  26.   }
    $ e, s+ w# R& {
  27.   E/ x. h2 d$ E. ^& A
  28.   /* Start FDCAN controller */
    + o5 D6 _' `  m7 g, s+ w
  29.   if (HAL_FDCAN_Start(&hfdcan2) != HAL_OK)7 J/ v3 ]! y+ W) M0 T
  30.   {
    & O7 |; R: _5 q! m; P
  31.     Error_Handler();$ s" m/ p( z% A# e% Y
  32.   }
复制代码
  1. void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs)
    9 f6 O6 e$ X/ s* N! }/ f: l
  2. {7 {$ |- l' b3 a6 H& J
  3.   if ((RxFifo0ITs & FDCAN_IT_RX_FIFO0_NEW_MESSAGE) != 0U)
    ! k  A9 [/ R1 j1 I
  4.   {: z( L$ C/ F% [( ?  w
  5.     /* Retrieve Rx messages from RX FIFO0 */
    . s( `- c4 H! S: v  W/ d6 I
  6.     if (HAL_FDCAN_GetRxMessage(hfdcan, FDCAN_RX_FIFO0, &rxHeader, rxData) != HAL_OK)* I* _. W- J3 k$ {  |; A# f1 g" g
  7.     {
    3 v3 R- p  f6 y3 D! L6 t5 q7 V
  8.       Error_Handler();* Z0 x$ N7 D7 K0 M
  9.     }
    # L: z' c; r# q7 s: z7 |3 D

  10. ( b6 |( N0 K  R, L  V5 ?# r
  11.     /* Compare received RX message to expected data. Ignore if not matching. */
    . ~0 L9 g5 n: N* L# ~$ T; n4 S/ r
  12.     if ((rxHeader.Identifier == Rx_ID) &&
    7 a; h# j6 x8 H! i! J  c5 }$ o4 Q
  13.         (rxHeader.IdType     == FDCAN_STANDARD_ID) &&+ D, l8 l; X. w+ c8 U$ M+ K  K
  14.         (rxHeader.DataLength == FDCAN_DLC_BYTES_64))7 I; Q9 j3 o( S- A
  15.     {, T8 S" q8 Y3 F: A  i+ l( |
  16. / q# [5 b9 q) n# I7 R
  17.                 HAL_GPIO_TogglePin (GPIOA,GPIO_PIN_5);
    . M3 a3 N9 j, y! T5 d
  18.     }2 W, s9 s4 X, {  O& E8 y, N' W: B
  19.   }) B7 _/ U. e9 D: Q2 J0 r
  20. }
复制代码
  1. if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan2, &txHeader, txData) != HAL_OK)% u3 b6 V7 g( V  x) D8 z- Y- h
  2.     {
    3 l3 b1 @4 L1 u( x1 _, t, B
  3.       Error_Handler();4 M, t# P9 }. u) {9 a' s
  4.     }
    : ]- ], C/ A# s+ S: b
  5. : u0 O* B3 l. e
  6.     /* Delay for simple button debounce */
    2 |6 d# E  a7 v$ X0 W% f
  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 手机版