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

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

[复制链接]
jundao721 发布时间:2024-7-1 23:14
4 X! s' Y" p& ^/ l5 ]
      收到板卡,先点个灯,没什么问题就进入正式测试阶段。仔细阅读H533的Datasheet,是一款资源很丰富的MCU,发现其有两个FDCAN接口,这样就丰富了板卡通讯。这种总线通信方式当前使用的比较多,就先测试下这个外设功能。% Z7 a' ~9 r" X! p, [7 u5 q2 {" M
    首先搭建测试硬件条件,使用板卡上的PB12和PB13作为通讯接口,连接到TJA1044 驱动芯片板卡上,按照datasheet对应上即可。如图1所示:
+ f! d& \1 |1 @* `6 u  u  g 5.jpg
* U% |) m8 f  x6 ?7 n9 Y% L( V( w7 G( C2 I
图15 o( Z! l8 v* h6 q

7 J8 X* O; [3 @4 M* U1 } 1.JPG 3 S9 M7 z, F, P& m7 ~3 v

3 B# y. Q$ v% t( N; v! H: H图28 _. Q  J7 d) W0 T! }
$ c) O$ f- W$ c' X3 n! @
    然后是使用Cubemx软件对MCU的时钟,外设等进行配置,并生成所需要的项目框架。时钟配置如图3所示:" ?7 `8 f. y& R1 }
6.JPG
2 |% @0 A1 B& B
! e: S$ b% _% Y5 J图3; q4 s! a& `6 H. U  G# m% Z0 [
    FDCAN的时钟使用24M,不倍频,波特率为1Mbps,数据波特率为2Mbps,外设的配置如图4所示:# k$ p2 D/ m, e" W
7.JPG
; e) a% E2 g& z& {" W
4 x- U( G0 k- r0 B0 D3 Q5 E5 A* L图4/ }0 i8 m( _4 E; |) M7 \! M
    使用板载的LED作为接收数据的指示灯,可在图上进行配置,如图5所示:
; ?5 f8 O  f$ O. T 8.JPG * x! M. F$ J' a& v" H) }. P' L# n
4 m! |- J7 j) G, |
图5
: C. u$ H, J; x, ]& J: O, }    这样配置完后,生成所需要的项目框架。编写接收和发送数据的初始化函数,如下所示:
+ W2 m% J2 r4 V; k   
/ G0 e+ ?% {) R7 M( ^2 W2 F* m
  1. /* Prepare Tx message Header */
    + N5 W" v( R0 u" m% P6 U
  2.   txHeader.Identifier          = Tx_ID;
    + p: d" S" K! `/ n
  3.   txHeader.IdType              = FDCAN_STANDARD_ID;& u: U$ I5 S: o) E
  4.   txHeader.TxFrameType         = FDCAN_DATA_FRAME;
    9 N( B; ~; r! Y2 Q1 e" S. G
  5.   txHeader.DataLength          = FDCAN_DLC_BYTES_64;6 Q" o: N; W+ T5 {! Q' z( d; o
  6.   txHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
    / G* J1 }( o9 M" q3 |# S4 @5 E" G
  7.   txHeader.BitRateSwitch       = FDCAN_BRS_ON;
      d+ H5 v6 u* w0 I  o1 e
  8.   txHeader.FDFormat            = FDCAN_FD_CAN;, U4 j2 L; `, c% T+ n0 w" e) Q) R4 z+ ~% u
  9.   txHeader.TxEventFifoControl  = FDCAN_NO_TX_EVENTS;% R. P% z2 u. @2 z. ]+ r2 U
  10.   txHeader.MessageMarker       = 0U;
    ; w. [& V  ~$ }; _
  11. ' |, j+ u- z- ]0 J2 e" L
  12.   /**
    5 }7 T5 M5 t* D# i4 A3 v9 l" o
  13.     * Configure and enable Tx Delay Compensation, required for BRS mode.
    8 o2 V; p$ s1 f4 h8 j
  14.     * TdcOffset default recommended value: DataTimeSeg1 * DataPrescaler! K3 N! J/ ?/ w+ X
  15.     * TdcFilter default recommended value: 0+ A* `/ ?2 g' d- B& i" O1 s+ E
  16.     */  G5 R( Q5 v! a# {0 B+ J! C# w
  17.   if (HAL_FDCAN_ConfigTxDelayCompensation(&hfdcan2,0 F% |2 q6 q& e, s" g1 }0 ~- d" `
  18.                                           (hfdcan2.Init.DataPrescaler * hfdcan2.Init.DataTimeSeg1), 0U) != HAL_OK)' d3 \( y( U& o4 Z* I3 Y* J: Q
  19.   {
    . _; g4 q* M% k% h9 C& U
  20.     Error_Handler();$ r; h( j0 J0 z
  21.   }
    5 X5 A8 h9 u- Z3 H: D% K! N0 s# M/ B

  22. * ?2 h& ]4 |9 S( W
  23.   if (HAL_FDCAN_EnableTxDelayCompensation(&hfdcan2) != HAL_OK)/ m0 c$ B, D0 f6 U, o1 |
  24.   {* R5 K: m% m+ N# h1 @8 t2 Z
  25.     Error_Handler();
    : ?8 L/ Q8 R4 E; u8 t6 y
  26.   }: ~1 \" N# g$ E7 s$ ?' y
  27. 3 V/ r$ k; _  X
  28.   /* Start FDCAN controller */! |* z" R- H3 \% B4 }" t  X
  29.   if (HAL_FDCAN_Start(&hfdcan2) != HAL_OK)/ L3 N5 w4 m* r6 i
  30.   {
    % y/ G1 J+ _* ~2 a
  31.     Error_Handler();
    % R) I* H" g; f6 A9 `" G
  32.   }
复制代码
  1. void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs). R7 }* |# l3 r; T! ]- Y
  2. {- U) v3 N) M; b: v" T% L
  3.   if ((RxFifo0ITs & FDCAN_IT_RX_FIFO0_NEW_MESSAGE) != 0U)
    4 \* a. U. {/ j+ A
  4.   {+ |' p! u8 i6 R- B0 }
  5.     /* Retrieve Rx messages from RX FIFO0 */
    " V9 t  S0 y# Y( L
  6.     if (HAL_FDCAN_GetRxMessage(hfdcan, FDCAN_RX_FIFO0, &rxHeader, rxData) != HAL_OK)- I, ?- P  ]1 Y" S& U; }9 p6 T
  7.     {# d- p, H  s8 i, U! O7 g
  8.       Error_Handler();' y; s" t$ Y) n, |8 f3 P7 f
  9.     }
    $ Q- Y& [2 ]+ i" E: J' _

  10. 8 y/ c' i: T9 a: g2 w4 v( B. x
  11.     /* Compare received RX message to expected data. Ignore if not matching. */4 U, B' {4 ?7 Q+ T
  12.     if ((rxHeader.Identifier == Rx_ID) &&9 J, T1 h' k: w5 L
  13.         (rxHeader.IdType     == FDCAN_STANDARD_ID) &&
    4 `0 M# s8 O4 f1 q- M, ~* H
  14.         (rxHeader.DataLength == FDCAN_DLC_BYTES_64))
    % i  `6 ]( O8 k5 R; Z7 M
  15.     {
    & |, E; |9 W& m7 c
  16. ! o& y+ N1 S% E& n
  17.                 HAL_GPIO_TogglePin (GPIOA,GPIO_PIN_5);! T: _/ s$ c7 k- V, B" H
  18.     }
    3 K5 N) y4 E0 F8 ]; |8 k
  19.   }- o5 x9 Z( |. b3 I
  20. }
复制代码
  1. if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan2, &txHeader, txData) != HAL_OK)
    6 \: n. ]) ^9 n
  2.     {# }. |: [3 J. C* I; b) H1 ~
  3.       Error_Handler();+ y) F9 [, Q( L) ^) \
  4.     }& z/ J2 Y- k9 ?. T/ P* c
  5. # q( H& x# E' `4 K: T6 F
  6.     /* Delay for simple button debounce */
    1 z; f$ O8 k) R0 D/ ?% B) y7 ]
  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 手机版