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

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

[复制链接]
jundao721 发布时间:2024-7-1 23:14
0 D+ I' l' M& G, g2 K
      收到板卡,先点个灯,没什么问题就进入正式测试阶段。仔细阅读H533的Datasheet,是一款资源很丰富的MCU,发现其有两个FDCAN接口,这样就丰富了板卡通讯。这种总线通信方式当前使用的比较多,就先测试下这个外设功能。" s: W# e# P, p2 P8 v
    首先搭建测试硬件条件,使用板卡上的PB12和PB13作为通讯接口,连接到TJA1044 驱动芯片板卡上,按照datasheet对应上即可。如图1所示:
( D4 K) g* O3 p 5.jpg
* K' F. @0 W4 c; D% X2 ?5 |& O3 B9 v
图1
7 r$ j3 Q- {8 _) a( G! D4 ^. Y: [7 X2 W0 T$ X* y! `2 l$ i2 n
1.JPG 2 ?9 l$ t- r; s  y5 w' N; p
8 A; n# J* D4 G+ B6 ^8 i
图2
. Z& q; e6 _1 o8 y
; F! y8 \: B/ p* }# `0 b/ c    然后是使用Cubemx软件对MCU的时钟,外设等进行配置,并生成所需要的项目框架。时钟配置如图3所示:& r9 o6 N; @0 `3 v4 a
6.JPG
6 a' h1 Q& z& z$ G* \! S) N( x- b2 S
图35 R4 A- d+ D$ `: p& I; P7 {
    FDCAN的时钟使用24M,不倍频,波特率为1Mbps,数据波特率为2Mbps,外设的配置如图4所示:
$ G, @# O* Z2 @ 7.JPG ' Z& v5 Y/ Z$ [: C. G- L
7 K( Y0 _' Q# ~  X
图4. v3 a% J8 g+ i
    使用板载的LED作为接收数据的指示灯,可在图上进行配置,如图5所示:/ P+ C, [2 d2 F
8.JPG
  K+ N; o$ G/ j; f* c  v
2 t% D  ]* @  ?+ H4 K3 ]6 H图5, ]5 S" c0 R% u1 n; A1 B
    这样配置完后,生成所需要的项目框架。编写接收和发送数据的初始化函数,如下所示:
) r7 i3 o" C; W& C   
5 K; V4 Y# B: R9 V. |
  1. /* Prepare Tx message Header */
    0 k" |1 j- p: d0 u
  2.   txHeader.Identifier          = Tx_ID;9 v# Z& ?' _" c5 y$ _, h
  3.   txHeader.IdType              = FDCAN_STANDARD_ID;
    ! D* Y  U- b5 A, ^- S& `0 r2 K
  4.   txHeader.TxFrameType         = FDCAN_DATA_FRAME;% o* f  o# T5 N# x- Z8 y& R3 n
  5.   txHeader.DataLength          = FDCAN_DLC_BYTES_64;' ^% |5 i( m# U# h
  6.   txHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
    2 M7 V* ?% h+ s2 C  ~
  7.   txHeader.BitRateSwitch       = FDCAN_BRS_ON;8 n+ ^' j$ Z) S1 U+ a* J" r2 O
  8.   txHeader.FDFormat            = FDCAN_FD_CAN;1 }2 F+ h. c( N# j
  9.   txHeader.TxEventFifoControl  = FDCAN_NO_TX_EVENTS;
    7 {2 V6 Q( X! i- ^5 {! J! M
  10.   txHeader.MessageMarker       = 0U;
    1 B9 Z$ W* p6 `% r2 B4 j+ @

  11. , p( P8 H, [; X, e# P
  12.   /**- _2 t. Q. Z! D5 m5 j0 [
  13.     * Configure and enable Tx Delay Compensation, required for BRS mode.
    # C1 F6 h; m1 v6 ^& A2 N& v& Q
  14.     * TdcOffset default recommended value: DataTimeSeg1 * DataPrescaler
    2 R- u8 X0 A1 ~3 J8 u' P2 V) s4 o
  15.     * TdcFilter default recommended value: 0
    3 D6 H3 R; \" `# K
  16.     */4 U# |  i3 d+ V0 _
  17.   if (HAL_FDCAN_ConfigTxDelayCompensation(&hfdcan2,' F+ p9 j3 r& v* Q7 Q
  18.                                           (hfdcan2.Init.DataPrescaler * hfdcan2.Init.DataTimeSeg1), 0U) != HAL_OK)- Z7 c; q5 c! m8 f
  19.   {
    * a6 f0 x; E/ L
  20.     Error_Handler();) ^* e5 u. v1 O- p+ t
  21.   }' Q1 N6 e1 t' ]

  22. " Q2 G; t, X: D" |1 v
  23.   if (HAL_FDCAN_EnableTxDelayCompensation(&hfdcan2) != HAL_OK)
    . t4 r; v" n/ O, E; Z
  24.   {' C, [& x/ J, @# m; g
  25.     Error_Handler();
    ; |. l. p' \, W) @# I+ M
  26.   }1 N$ A1 T: t+ m

  27. - f, F" w' ]5 X; j0 R- g& B
  28.   /* Start FDCAN controller */
      f3 ?% {! T/ R3 J4 H$ j) x) F8 M
  29.   if (HAL_FDCAN_Start(&hfdcan2) != HAL_OK)- N4 `1 m- U# H3 s* ^- p- J. o
  30.   {
    6 l  q! x6 }# ~) q0 M
  31.     Error_Handler();; D$ Q  q2 f; W& l* e
  32.   }
复制代码
  1. void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs)
    2 P) j+ h* l5 {. L2 B; q
  2. {
      m( ~9 a- c+ ]( }7 D, z3 J" }
  3.   if ((RxFifo0ITs & FDCAN_IT_RX_FIFO0_NEW_MESSAGE) != 0U)- v8 Z0 ?$ U$ `( U
  4.   {
    + A0 F( `* |& @, S
  5.     /* Retrieve Rx messages from RX FIFO0 */
    8 J+ F$ z0 w5 ~" z# c
  6.     if (HAL_FDCAN_GetRxMessage(hfdcan, FDCAN_RX_FIFO0, &rxHeader, rxData) != HAL_OK)
    * n8 ?; q) p4 k. O0 |) ^
  7.     {6 {: _. u8 l* `* @3 y
  8.       Error_Handler();
    " |: s% y( J2 V8 L4 b; Y
  9.     }
    . e4 C# _0 d: B5 m7 Q" p- r$ s

  10. ! f) A; Q5 g# X( Y' i
  11.     /* Compare received RX message to expected data. Ignore if not matching. */
    8 @- W  r+ G& c1 q( i: n
  12.     if ((rxHeader.Identifier == Rx_ID) &&
    7 R* a* `) Q) g# F, W, q
  13.         (rxHeader.IdType     == FDCAN_STANDARD_ID) &&. p/ n, v8 @4 H% ?
  14.         (rxHeader.DataLength == FDCAN_DLC_BYTES_64))0 \4 s) V- ?* c9 v
  15.     {$ ~, D6 j1 v  w: e
  16. % I5 p3 |& _4 v7 z8 C! G
  17.                 HAL_GPIO_TogglePin (GPIOA,GPIO_PIN_5);' g9 ]; v& I, ?7 V" P1 d) g
  18.     }0 N# e9 Z+ [) @' z+ v4 ~9 l
  19.   }, ^) ?, G: J4 M) u3 i% u  @
  20. }
复制代码
  1. if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan2, &txHeader, txData) != HAL_OK)
    * t- v" u* Y/ n8 {" [
  2.     {
    6 v: x- R0 c6 J) ~$ A: t6 n
  3.       Error_Handler();+ _! P6 r8 m3 i, \) C8 Q) I
  4.     }# X' }& T! f0 c+ ]
  5. 8 N- ^7 X( B! E+ C9 |6 D
  6.     /* Delay for simple button debounce */
    - ?2 z, |2 ?: e1 k) U# J+ q
  7.     HAL_Delay(1000U);
复制代码
2.JPG
3.JPG
收藏 评论0 发布时间:2024-7-1 23:14

举报

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