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

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

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

0 y8 D" e; s0 E( R  E% c: c      收到板卡,先点个灯,没什么问题就进入正式测试阶段。仔细阅读H533的Datasheet,是一款资源很丰富的MCU,发现其有两个FDCAN接口,这样就丰富了板卡通讯。这种总线通信方式当前使用的比较多,就先测试下这个外设功能。
1 X8 L# C3 ?4 \- \    首先搭建测试硬件条件,使用板卡上的PB12和PB13作为通讯接口,连接到TJA1044 驱动芯片板卡上,按照datasheet对应上即可。如图1所示:
+ |" Q$ ^7 K7 k8 C6 q+ B* ?3 ^  c, J. W 5.jpg
1 n3 Z5 L: c+ y- M7 M* m& D, T) e1 u, b; a$ e0 h
图17 W) ]8 F" U! @; ?7 G# G6 w# i5 P4 S
$ Q' w1 x2 A: G; b% L) L, W
1.JPG
8 X2 Q. u8 i9 V% F+ ^, s, G) k; s: U/ v# ~
图2
# V+ E2 [; h5 o( V& [* O
& |4 ^# Z& p% u1 @  N5 z$ U/ S    然后是使用Cubemx软件对MCU的时钟,外设等进行配置,并生成所需要的项目框架。时钟配置如图3所示:
: {  ?8 j" Y5 ]- m3 v: T 6.JPG
; O; A6 i+ N+ b. p1 Y' j8 K9 C/ d$ N1 l& T, r5 k) w: B
图34 I+ m0 ^3 d7 F0 I3 ]
    FDCAN的时钟使用24M,不倍频,波特率为1Mbps,数据波特率为2Mbps,外设的配置如图4所示:8 \! B6 n$ _( V
7.JPG 6 V" J9 r& j) d9 A/ f

% q/ i1 S3 H' u7 a图4* J  _- i. X' ~) N9 a! a. l
    使用板载的LED作为接收数据的指示灯,可在图上进行配置,如图5所示:
5 Q5 i6 H, c' @$ R3 M# b0 d* T 8.JPG
% e  ~8 b% B1 P3 X, `# a7 A! ^; y1 t( u5 u$ p/ G
图5
; R  G5 N  T% m: B" F1 i; J5 P# d0 N& q    这样配置完后,生成所需要的项目框架。编写接收和发送数据的初始化函数,如下所示:, S" k0 r& I: [0 N3 H
    % V, E* h( N% K9 [4 X# F  B
  1. /* Prepare Tx message Header */& P" |# q0 Y0 b7 g, s2 T
  2.   txHeader.Identifier          = Tx_ID;
    ! B2 ~6 o+ S( |* W
  3.   txHeader.IdType              = FDCAN_STANDARD_ID;1 y, L! e* z* [$ ~# R1 x
  4.   txHeader.TxFrameType         = FDCAN_DATA_FRAME;
      J' b! S$ i% D7 H- W
  5.   txHeader.DataLength          = FDCAN_DLC_BYTES_64;
    . r! W. Y5 Z! ]7 M  q" Y
  6.   txHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;0 n+ O. H- ?9 B. O: C- y
  7.   txHeader.BitRateSwitch       = FDCAN_BRS_ON;
    1 K# i4 S1 K, N( [: T
  8.   txHeader.FDFormat            = FDCAN_FD_CAN;
    4 W" O, n# |9 E& w- e. g
  9.   txHeader.TxEventFifoControl  = FDCAN_NO_TX_EVENTS;
    ! y1 v* Z4 M' v9 l; y/ K; }
  10.   txHeader.MessageMarker       = 0U;' W2 U% [. Y* x( Y' N8 \

  11. 1 E# h9 d8 {& X) v- @& ?
  12.   /**
    6 c3 r5 {! `" O: E3 M& k2 C
  13.     * Configure and enable Tx Delay Compensation, required for BRS mode.% a( X6 ]( i1 \4 O  ^5 z1 }, r
  14.     * TdcOffset default recommended value: DataTimeSeg1 * DataPrescaler  }/ l- V7 f& \" q% v4 n- d" y
  15.     * TdcFilter default recommended value: 0: t' d$ w& A% P( |. A7 [
  16.     */) }0 D. ]/ N; [5 a7 j+ Y, q
  17.   if (HAL_FDCAN_ConfigTxDelayCompensation(&hfdcan2,1 ?, r! ~2 B6 k( c5 V0 [3 J6 T
  18.                                           (hfdcan2.Init.DataPrescaler * hfdcan2.Init.DataTimeSeg1), 0U) != HAL_OK)
    4 B+ H! p/ j' n' l' J
  19.   {* d9 s. K, P8 `- E* }3 c
  20.     Error_Handler();% C% q& Z: F) k! @: k
  21.   }
    # f* g+ ?1 K6 K& g: ~
  22. 6 F+ T) [+ T! x* C9 p
  23.   if (HAL_FDCAN_EnableTxDelayCompensation(&hfdcan2) != HAL_OK)
    ! u2 }! [$ S; t
  24.   {% W+ [8 o# s9 \
  25.     Error_Handler();3 {' D- h- q; s" ]; m! H1 Q
  26.   }
    4 l  D! I; ^# N8 n" @

  27. 4 \5 l/ w  k. O9 ~( ]8 F% _
  28.   /* Start FDCAN controller */
    ) S0 _1 p& j& K( j8 v, l, `( F3 l3 R' t
  29.   if (HAL_FDCAN_Start(&hfdcan2) != HAL_OK)2 Z9 c( x6 R+ ~7 h7 Y1 u  L! ~0 j
  30.   {
    5 o# m" v8 v( }6 @
  31.     Error_Handler();, j. D. T5 Z  h# ?
  32.   }
复制代码
  1. void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs)
    , h1 i; @! L% z
  2. {( V* X- O. {8 k5 C+ ]
  3.   if ((RxFifo0ITs & FDCAN_IT_RX_FIFO0_NEW_MESSAGE) != 0U)! e7 u# A: I; b( D, d
  4.   {
    7 I( m. i+ E7 U) V8 W! j
  5.     /* Retrieve Rx messages from RX FIFO0 */; x* D7 `8 |+ Z) _5 e
  6.     if (HAL_FDCAN_GetRxMessage(hfdcan, FDCAN_RX_FIFO0, &rxHeader, rxData) != HAL_OK)
    6 T5 T1 I2 T4 i' o
  7.     {
    - M2 Y- I: q0 j$ O) K+ M  c
  8.       Error_Handler();3 ~0 f' c5 U' c) B; s
  9.     }+ P. L7 c1 y, x/ U; k

  10. & b  _" G* `& k1 U0 K- m
  11.     /* Compare received RX message to expected data. Ignore if not matching. */- B9 k. p9 F1 B1 c4 n9 {, T1 h
  12.     if ((rxHeader.Identifier == Rx_ID) &&; k# n# h2 g4 F6 y
  13.         (rxHeader.IdType     == FDCAN_STANDARD_ID) &&" I$ [( c4 D. `
  14.         (rxHeader.DataLength == FDCAN_DLC_BYTES_64))% e" i5 i; I3 E
  15.     {! @! g) R4 M2 G

  16. 7 B. i, n+ C5 U. j/ U" M/ Z0 [
  17.                 HAL_GPIO_TogglePin (GPIOA,GPIO_PIN_5);- V/ @. o' P2 u1 |. d
  18.     }9 u% b- N4 ~  Z! G* Z, G
  19.   }$ N% ?; P5 H. d4 x$ |! ^" L# R- h
  20. }
复制代码
  1. if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan2, &txHeader, txData) != HAL_OK)  ]5 a6 u' t4 o, _
  2.     {
    + p( C# m$ T2 Y4 c. d+ U
  3.       Error_Handler();, a& X* u0 Z  ^& s. G9 c
  4.     }& D+ w) c' I6 Y
  5. 3 l+ ~% Z0 I8 y/ d  V' N
  6.     /* Delay for simple button debounce */5 v4 W/ C9 T2 }9 L4 X4 M0 ^
  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 手机版