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

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

[复制链接]
jundao721 发布时间:2024-7-1 23:14
- v) ?1 X9 S; [% ?
      收到板卡,先点个灯,没什么问题就进入正式测试阶段。仔细阅读H533的Datasheet,是一款资源很丰富的MCU,发现其有两个FDCAN接口,这样就丰富了板卡通讯。这种总线通信方式当前使用的比较多,就先测试下这个外设功能。
0 i7 S5 [% Q; Q* Q  Q! X    首先搭建测试硬件条件,使用板卡上的PB12和PB13作为通讯接口,连接到TJA1044 驱动芯片板卡上,按照datasheet对应上即可。如图1所示:
  i0 ?3 z0 y, s" h* ~$ y 5.jpg 1 [' Z; F4 `5 P/ }9 C) f  D. Z
9 H7 [' s7 {8 J
图1
  q  m' ~0 |. S8 U( \6 @& m/ B
$ i$ e1 J3 i- O4 a 1.JPG
3 Q, L7 B9 w. E; r8 U$ |  S
7 w4 O% [+ w# p# L- O" u: M图2: {1 ^2 ~: i* G6 |' Y* p9 S# {' J
3 |  _+ e  b6 w% I( y
    然后是使用Cubemx软件对MCU的时钟,外设等进行配置,并生成所需要的项目框架。时钟配置如图3所示:) _9 o! o# ^6 ~- `! p
6.JPG * h, v0 H  d$ }0 E( x1 I

( M8 g) K1 K* N图3
% X" W% p! O4 q! Z! e; K    FDCAN的时钟使用24M,不倍频,波特率为1Mbps,数据波特率为2Mbps,外设的配置如图4所示:
: W, J9 }4 m" n+ g; K; G2 P 7.JPG
. L+ n  w+ `$ N& E/ j/ F; m' R& y! d# K$ [6 A1 E' A7 B/ G* b
图4
' R! `- G2 ]! R0 V    使用板载的LED作为接收数据的指示灯,可在图上进行配置,如图5所示:
8 T3 |$ f: Q  h$ o 8.JPG ' N$ Q2 i8 |8 _% b8 [0 E+ t5 m+ Y
: L# h! ~, y! E/ ?6 D' O
图5$ s. S5 K4 w7 _+ H7 h
    这样配置完后,生成所需要的项目框架。编写接收和发送数据的初始化函数,如下所示:) n+ Y# \5 ?& X! j7 b0 i6 g
   
% U* q, X: P0 s. [
  1. /* Prepare Tx message Header */, O& I) b- m0 q7 E
  2.   txHeader.Identifier          = Tx_ID;
    9 g0 k, N$ }! R8 {: v
  3.   txHeader.IdType              = FDCAN_STANDARD_ID;
    4 k3 D  [2 c& A7 u
  4.   txHeader.TxFrameType         = FDCAN_DATA_FRAME;' g. X* ^3 a6 Z' w5 F$ c% q$ p
  5.   txHeader.DataLength          = FDCAN_DLC_BYTES_64;& K1 r' \" K  R# D& W7 W9 a
  6.   txHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
    8 u! U- W* A, M' W! O% P9 t
  7.   txHeader.BitRateSwitch       = FDCAN_BRS_ON;, h) u; |/ v4 Q8 W, Z: V* Q
  8.   txHeader.FDFormat            = FDCAN_FD_CAN;
    / y" J% D" _2 O4 ?( S! R4 ~
  9.   txHeader.TxEventFifoControl  = FDCAN_NO_TX_EVENTS;
    0 H+ ~; q3 d2 R6 E) ^
  10.   txHeader.MessageMarker       = 0U;' @( F8 a* F: z
  11. , f3 q7 G3 ]# G' r1 q3 t
  12.   /**2 |. m. O. R/ R) ?1 n
  13.     * Configure and enable Tx Delay Compensation, required for BRS mode.* Q. ]7 C3 X, O9 A6 V) w% j
  14.     * TdcOffset default recommended value: DataTimeSeg1 * DataPrescaler  v7 K. C+ \# p3 b; r
  15.     * TdcFilter default recommended value: 0
    ( O# r& G7 G; a- N9 P3 D
  16.     */7 |8 Z: J, @9 K3 V2 V% A
  17.   if (HAL_FDCAN_ConfigTxDelayCompensation(&hfdcan2,
    % O4 g& ]( {; u% W
  18.                                           (hfdcan2.Init.DataPrescaler * hfdcan2.Init.DataTimeSeg1), 0U) != HAL_OK)
    9 z% H* v: u* A8 r4 e
  19.   {
    , H9 f/ z1 H+ R3 E( V. `0 X
  20.     Error_Handler();
    ( F% `( U0 x) O# J6 Z. f* B6 ?8 W
  21.   }
    9 m" o& w+ i( G7 s6 G

  22. % L7 O& O  U1 W5 I
  23.   if (HAL_FDCAN_EnableTxDelayCompensation(&hfdcan2) != HAL_OK)
    / p( v% E) N/ V. k) M
  24.   {4 N1 `' D- `2 u7 a% b3 v
  25.     Error_Handler();
    " S+ _3 p& e0 o5 X# V1 d, `& B% L
  26.   }3 H, `8 _$ b( j3 Q! b& _/ p

  27. - ?# u( {9 S3 \+ p5 u
  28.   /* Start FDCAN controller */( R7 v9 _" y! |9 o( I
  29.   if (HAL_FDCAN_Start(&hfdcan2) != HAL_OK)
    1 U  ^6 T, a& s5 a4 \+ l
  30.   {* m% D/ M/ q0 Q' s: \
  31.     Error_Handler();
    * q  R3 r- K; V
  32.   }
复制代码
  1. void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs)4 C% N9 B. u  G& ]$ l, p
  2. {3 Z9 ]8 D- }4 Y$ a7 e/ `" @" U
  3.   if ((RxFifo0ITs & FDCAN_IT_RX_FIFO0_NEW_MESSAGE) != 0U)
    ; T# O$ r, }, [5 F/ w/ c
  4.   {
    ) h( ~5 H4 u# A3 W: ^! X
  5.     /* Retrieve Rx messages from RX FIFO0 */8 R" M0 i0 I! @/ P$ p1 V
  6.     if (HAL_FDCAN_GetRxMessage(hfdcan, FDCAN_RX_FIFO0, &rxHeader, rxData) != HAL_OK)
    ( ]$ T; M1 u% C, ]
  7.     {( d+ G) i; Q, y5 j$ e
  8.       Error_Handler();
    6 `( S$ s+ H8 ~7 N2 g) |3 `8 l
  9.     }
    ! s. d9 n$ U& F0 ~1 K1 U+ {4 w

  10. . m2 \+ v; S5 S5 ^8 f# M) g& ?/ T
  11.     /* Compare received RX message to expected data. Ignore if not matching. */
    ; w7 G/ l$ Q+ P% W
  12.     if ((rxHeader.Identifier == Rx_ID) &&
    * v* A/ p, n8 a
  13.         (rxHeader.IdType     == FDCAN_STANDARD_ID) &&; l! E+ T; R' n/ }
  14.         (rxHeader.DataLength == FDCAN_DLC_BYTES_64))2 T  [' Q6 _; P  t
  15.     {
    / E3 H  l* g& {0 B

  16. 0 b+ \. j0 A4 o  N5 r# J  Q8 T
  17.                 HAL_GPIO_TogglePin (GPIOA,GPIO_PIN_5);2 ^4 l8 s7 g! Q& c4 s5 m
  18.     }
    8 a& p- ]3 P- t% n
  19.   }7 m8 |/ y' Z4 F6 L: l- n
  20. }
复制代码
  1. if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan2, &txHeader, txData) != HAL_OK)
    - w7 u) k# x7 r7 J- w' e; m8 H
  2.     {
      R7 k" z$ \, G/ A
  3.       Error_Handler();6 c9 W5 D3 E4 ?; O+ B7 D, O
  4.     }
    8 s) C4 M* a3 t4 k; N) S, B& i
  5. $ |7 G. y" H4 B: O' \4 S0 q
  6.     /* Delay for simple button debounce */0 H9 k* w5 E/ i5 h, I  l  Y* g; X0 J; b
  7.     HAL_Delay(1000U);
复制代码
2.JPG
3.JPG
收藏 评论0 发布时间:2024-7-1 23:14

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版