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

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

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

5 D# T1 {! w! t- ?      收到板卡,先点个灯,没什么问题就进入正式测试阶段。仔细阅读H533的Datasheet,是一款资源很丰富的MCU,发现其有两个FDCAN接口,这样就丰富了板卡通讯。这种总线通信方式当前使用的比较多,就先测试下这个外设功能。
6 z7 T/ E8 X" k; l5 @2 W    首先搭建测试硬件条件,使用板卡上的PB12和PB13作为通讯接口,连接到TJA1044 驱动芯片板卡上,按照datasheet对应上即可。如图1所示:0 o4 z/ k" I, i. g# m
5.jpg 9 W7 d% K; W  P  f  P' y
. E, q- }. j2 \. s  n
图1
7 u/ G+ q, O5 ]$ y8 l; }7 t- b2 z7 O4 _/ L( M
1.JPG - c7 b! j4 @" R+ ~
3 W1 n! `) K1 k) Z# p
图2; B3 Z, [5 P7 \& x

5 Z, N* @' x# U4 x7 N2 |    然后是使用Cubemx软件对MCU的时钟,外设等进行配置,并生成所需要的项目框架。时钟配置如图3所示:
: j2 B% \+ V: q- `  J 6.JPG
- f" k: B0 J- n$ n$ C
! L  n0 W* @* @8 _5 j- O- c图3
' d  N, L1 e- X( s    FDCAN的时钟使用24M,不倍频,波特率为1Mbps,数据波特率为2Mbps,外设的配置如图4所示:7 M$ g9 K5 E; Q1 j: c
7.JPG
" A0 s. `  @8 i" u. k6 k
! D' k2 S7 C3 c) J5 r图4. J& ~% k: C9 c# d0 O4 U, N
    使用板载的LED作为接收数据的指示灯,可在图上进行配置,如图5所示:1 u5 l3 n7 N5 S" X. |) `+ p( Y
8.JPG
1 R$ }3 a, P& B- k! q8 ]/ D4 \  ]) D/ P$ D1 K1 G$ \6 z
图5' ?& d; x7 B: U* y: @* J5 c
    这样配置完后,生成所需要的项目框架。编写接收和发送数据的初始化函数,如下所示:
" h6 L7 k& U! R4 W( w/ o  F    & K4 `5 f: ~( [4 S' e  ?* S
  1. /* Prepare Tx message Header */
    - @. G  d+ A& ^, I. v* y  |
  2.   txHeader.Identifier          = Tx_ID;
    / h$ `5 h8 u* o$ n3 b0 d. ]
  3.   txHeader.IdType              = FDCAN_STANDARD_ID;
    4 S( Q& C, u3 v4 k* E
  4.   txHeader.TxFrameType         = FDCAN_DATA_FRAME;" b  a/ g& n! d* K/ E6 V
  5.   txHeader.DataLength          = FDCAN_DLC_BYTES_64;
    , {( R% d2 `6 J2 ?/ I
  6.   txHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;6 r) {9 a8 L0 R/ c1 X, k
  7.   txHeader.BitRateSwitch       = FDCAN_BRS_ON;# u. ~8 t3 t! J. {/ r" E
  8.   txHeader.FDFormat            = FDCAN_FD_CAN;+ \1 D; O2 W9 {" w! b- m
  9.   txHeader.TxEventFifoControl  = FDCAN_NO_TX_EVENTS;
    , ~2 A2 T; o0 U# W% j3 B" w" C* u
  10.   txHeader.MessageMarker       = 0U;( h: {. `, T1 [! N* R

  11. ' G7 F, c6 j) ?% ]/ ]* c! _
  12.   /**
    2 k8 Q% z7 y- s/ ]+ `
  13.     * Configure and enable Tx Delay Compensation, required for BRS mode.: z- G' {& r0 g7 s9 O% r' i: ^  H
  14.     * TdcOffset default recommended value: DataTimeSeg1 * DataPrescaler' Z/ u3 B, _- k5 e7 }9 s
  15.     * TdcFilter default recommended value: 0
    8 X/ P& B' B  D1 H; c! W
  16.     */
    # D2 S- T7 E; j
  17.   if (HAL_FDCAN_ConfigTxDelayCompensation(&hfdcan2,
      I( @2 E$ ?) ~" ]* J: C6 {- w7 m
  18.                                           (hfdcan2.Init.DataPrescaler * hfdcan2.Init.DataTimeSeg1), 0U) != HAL_OK)( E. S* R! p, X5 \* O
  19.   {) r6 j) L% I8 ^! |
  20.     Error_Handler();
    6 r  `5 [6 {$ u6 w
  21.   }5 ]" W4 }$ f1 v, j! ], O
  22. & _1 \6 U* ^  N* L: I, z+ H
  23.   if (HAL_FDCAN_EnableTxDelayCompensation(&hfdcan2) != HAL_OK)
    - _- ?, A7 B' E2 S5 y1 l
  24.   {
    + g% i, B% H( C
  25.     Error_Handler();
    & W: A; F$ |8 ?% c
  26.   }
    3 k0 h! s1 h" X9 z  _) @" C% [

  27. % P5 m% D+ |  o
  28.   /* Start FDCAN controller */* r, |1 j) K/ {0 z- A# K6 ~" m
  29.   if (HAL_FDCAN_Start(&hfdcan2) != HAL_OK)$ c3 F% Q8 S. _8 b; B
  30.   {
      y  V: o- h! j3 e
  31.     Error_Handler();
    5 B& W. h5 Y$ a/ s( Y% R
  32.   }
复制代码
  1. void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs)4 A& f1 R) `0 P- ?7 X9 o8 D/ x5 G( o
  2. {8 D0 K9 ~; B9 A6 }% m: z+ n
  3.   if ((RxFifo0ITs & FDCAN_IT_RX_FIFO0_NEW_MESSAGE) != 0U)2 }: F9 w) O3 T9 A# r0 _
  4.   {
    5 q3 W: o: l2 M0 j6 W2 u1 z1 M! Z" u
  5.     /* Retrieve Rx messages from RX FIFO0 */
    6 s) Q3 i4 @, @9 t
  6.     if (HAL_FDCAN_GetRxMessage(hfdcan, FDCAN_RX_FIFO0, &rxHeader, rxData) != HAL_OK). ]$ D' E0 E% T5 f
  7.     {
    ) {- r) c, F- Q1 g2 l. Y
  8.       Error_Handler();
    1 \" ^/ V; P. v8 C$ e) [5 y3 R
  9.     }% Z3 Q% G1 ]! f- P+ O

  10. 8 `2 g6 e( M* p/ |
  11.     /* Compare received RX message to expected data. Ignore if not matching. */: V# m4 P/ |% ]# J  E
  12.     if ((rxHeader.Identifier == Rx_ID) &&) F& E# [  S/ b* M! {5 ~9 n) @
  13.         (rxHeader.IdType     == FDCAN_STANDARD_ID) &&3 l) ~3 U9 C5 s0 a8 z1 ]
  14.         (rxHeader.DataLength == FDCAN_DLC_BYTES_64))
    4 J2 }- Z7 C" o' \! a+ ?
  15.     {) u+ o) L) h6 g
  16. ( e+ Q) l" l  P! B# e
  17.                 HAL_GPIO_TogglePin (GPIOA,GPIO_PIN_5);
    2 J2 c; d* G* s& v
  18.     }2 ?9 _. p% D2 X' c9 I
  19.   }+ p- w3 \; ^. i# x5 s3 c6 g+ j2 v
  20. }
复制代码
  1. if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan2, &txHeader, txData) != HAL_OK)1 w9 O# _1 g$ O7 p2 _
  2.     {
    ! y7 @; x2 T: f- m' u
  3.       Error_Handler();5 s  ?5 f- L- x1 T3 N, x# ]  A
  4.     }% v8 Z1 q# s+ ^$ M/ i6 _: A# S
  5. * ]3 y: W8 Z0 {0 K- H
  6.     /* Delay for simple button debounce */  I1 J  d/ n/ \" O+ e4 Y4 i) i
  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 手机版