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

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

[复制链接]
jundao721 发布时间:2024-7-1 23:14
% I; a7 T$ U9 |$ P/ ?5 G
      收到板卡,先点个灯,没什么问题就进入正式测试阶段。仔细阅读H533的Datasheet,是一款资源很丰富的MCU,发现其有两个FDCAN接口,这样就丰富了板卡通讯。这种总线通信方式当前使用的比较多,就先测试下这个外设功能。
1 t1 {5 d- l- v! f$ n/ C! ]; F    首先搭建测试硬件条件,使用板卡上的PB12和PB13作为通讯接口,连接到TJA1044 驱动芯片板卡上,按照datasheet对应上即可。如图1所示:' k5 S1 J& e4 s1 s8 G4 ]" [- |
5.jpg   j3 N* i" Z7 G2 m6 I7 `

$ i+ ^- R- b4 J* r3 p图1
' O! ]) K6 j6 s0 z4 G
0 _( v( e& x( u  H: | 1.JPG % n9 a2 N! ^6 `

' r- D7 r- |; A3 Z: w图2
& |/ j: E7 G. ?% d+ f% o% L# O3 ~8 x9 z
    然后是使用Cubemx软件对MCU的时钟,外设等进行配置,并生成所需要的项目框架。时钟配置如图3所示:0 t( a- n& t0 I+ O/ n3 s: T8 E
6.JPG $ y+ V  E( s) \/ _! e

) p  S. i$ z0 l( W0 D( U图3: X1 ^3 T$ V6 P5 V' H2 i
    FDCAN的时钟使用24M,不倍频,波特率为1Mbps,数据波特率为2Mbps,外设的配置如图4所示:
* n1 V* ~4 h( b( R1 M; ^/ ^9 ^ 7.JPG
7 @3 {+ b6 k/ C/ V. h% p/ d: c2 U" U" d' p
图4: a( V1 H" P, K
    使用板载的LED作为接收数据的指示灯,可在图上进行配置,如图5所示:
, G; {/ ]- q1 m, G 8.JPG
& M$ ~. s$ m, j- \" \6 |
, w/ B7 X1 J5 X图5) m+ [6 A& d" m  V# ?- J3 G! c
    这样配置完后,生成所需要的项目框架。编写接收和发送数据的初始化函数,如下所示:3 m. g# m( j9 L! ?  H) d0 o
    ' b2 a; b5 U* k. ~
  1. /* Prepare Tx message Header */: l6 F5 B; j' {% }6 T# H
  2.   txHeader.Identifier          = Tx_ID;" j" |5 g" K/ M0 E9 e* g% |8 X
  3.   txHeader.IdType              = FDCAN_STANDARD_ID;  q4 c' p5 p) {; J' t0 R
  4.   txHeader.TxFrameType         = FDCAN_DATA_FRAME;
    1 r" G* U& K. u' w
  5.   txHeader.DataLength          = FDCAN_DLC_BYTES_64;
    $ M% g  a" y, B- s3 a
  6.   txHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;6 L4 L' x5 U6 `
  7.   txHeader.BitRateSwitch       = FDCAN_BRS_ON;, M1 E& h% N$ W/ t
  8.   txHeader.FDFormat            = FDCAN_FD_CAN;
    4 P$ b1 e4 ]* ?( W1 s4 f: @
  9.   txHeader.TxEventFifoControl  = FDCAN_NO_TX_EVENTS;
    / @4 k2 x% g5 c
  10.   txHeader.MessageMarker       = 0U;
    3 C# D; g! U- B. j# N
  11. & e0 L$ O. p' w+ L! u9 O9 p; B5 w
  12.   /**
    2 a% J" W" I  ~: k5 H( E0 n* P
  13.     * Configure and enable Tx Delay Compensation, required for BRS mode.
    ( P/ B2 [1 w% ]$ l' s
  14.     * TdcOffset default recommended value: DataTimeSeg1 * DataPrescaler7 Z' z5 Q( ]* I$ j% H0 y4 T
  15.     * TdcFilter default recommended value: 0
    2 N6 K3 d/ s4 h) q6 |0 X
  16.     */
      d9 P7 p( A9 \
  17.   if (HAL_FDCAN_ConfigTxDelayCompensation(&hfdcan2,
    4 X4 T9 A* B' {8 W4 F) ^$ J  Y' i) l
  18.                                           (hfdcan2.Init.DataPrescaler * hfdcan2.Init.DataTimeSeg1), 0U) != HAL_OK); L& L; y  `/ Q& _0 M
  19.   {
    # s) j( y: @5 R: ]& i: V, w
  20.     Error_Handler();
    + N% t- P, S$ M6 p5 e2 q; v) C
  21.   }4 W- ?1 j+ V5 O) s! y

  22. 9 c* p* [* B: }$ X5 G3 O
  23.   if (HAL_FDCAN_EnableTxDelayCompensation(&hfdcan2) != HAL_OK)4 X" W  x, h# B9 R  W8 |
  24.   {3 u/ R0 }# e7 q( _
  25.     Error_Handler();
    % c8 z" q; G6 i- x: k
  26.   }
    # e. @# @: h6 Y" f. P( L
  27. 9 p1 y, m$ p! L
  28.   /* Start FDCAN controller */
    1 B- I! l3 b8 A+ t& {- \
  29.   if (HAL_FDCAN_Start(&hfdcan2) != HAL_OK)
    4 ]; q8 b  x: |& Q/ z
  30.   {
    % \. U- R3 d% D% o: ~
  31.     Error_Handler();
    - H* b- h, e. R
  32.   }
复制代码
  1. void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs)
    , ~0 x: ?2 ~6 X$ X
  2. {
    3 m! x5 @, }% y4 }  a
  3.   if ((RxFifo0ITs & FDCAN_IT_RX_FIFO0_NEW_MESSAGE) != 0U)
    # A: Z: _' a4 l$ g5 O8 i
  4.   {3 g; V0 s$ w# t5 e6 |$ h6 Z
  5.     /* Retrieve Rx messages from RX FIFO0 */
    . y3 J$ w5 G& Y/ `2 A
  6.     if (HAL_FDCAN_GetRxMessage(hfdcan, FDCAN_RX_FIFO0, &rxHeader, rxData) != HAL_OK)4 W8 n, J/ j; n2 |& B3 I0 [9 u9 s
  7.     {* X, D) o7 Z4 C/ W# [( b
  8.       Error_Handler();
    0 p: L  i# B& G( a  [
  9.     }2 B, N6 O3 M* l5 @- Y& R
  10. 5 C' h! z# k: @0 U% d0 F& K7 |
  11.     /* Compare received RX message to expected data. Ignore if not matching. */
    9 Y4 w# q0 ^! G2 M, o# A4 c" D
  12.     if ((rxHeader.Identifier == Rx_ID) &&
    ! z" P& r: `3 P5 |# c
  13.         (rxHeader.IdType     == FDCAN_STANDARD_ID) &&
    - t, f: |" l, a# ~! `
  14.         (rxHeader.DataLength == FDCAN_DLC_BYTES_64))
    + e; W; n5 ?9 K4 h+ b" C
  15.     {
    " f- E" {  m9 t/ n! m; s

  16. $ J# R2 C5 F; \$ U0 c
  17.                 HAL_GPIO_TogglePin (GPIOA,GPIO_PIN_5);
    1 q, w! n3 F  W
  18.     }5 H. N/ t* j& N' E, T( ~
  19.   }4 }* j% n, N- G. C
  20. }
复制代码
  1. if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan2, &txHeader, txData) != HAL_OK)
    ) {7 n9 o! r( V# f" _3 d+ t/ c, G
  2.     {$ I& z) Z# c8 L
  3.       Error_Handler();
    : K: d! w* [0 r% U
  4.     }
    : b. _. |2 f# ?

  5. 8 Z) d- t1 S" d" ?% r
  6.     /* Delay for simple button debounce */, X" L" M( K" j$ u: }5 X
  7.     HAL_Delay(1000U);
复制代码
2.JPG
3.JPG
收藏 评论0 发布时间:2024-7-1 23:14

举报

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