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

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

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

# B' _9 f  q- b5 e+ j" a      收到板卡,先点个灯,没什么问题就进入正式测试阶段。仔细阅读H533的Datasheet,是一款资源很丰富的MCU,发现其有两个FDCAN接口,这样就丰富了板卡通讯。这种总线通信方式当前使用的比较多,就先测试下这个外设功能。
% i3 l1 i, M" k! Q" r, {# t  i    首先搭建测试硬件条件,使用板卡上的PB12和PB13作为通讯接口,连接到TJA1044 驱动芯片板卡上,按照datasheet对应上即可。如图1所示:
- X. L3 Z1 H9 y4 s) @- @% D 5.jpg
7 W: u) J7 c# Z- H+ B' k9 e  Q2 S: X/ h, k
图1: H$ W: a- w. y8 a# B

. v( h$ b0 d& Q$ \ 1.JPG & p0 ?% U4 ~# H1 y9 K  g

+ M4 D- @& p0 j' o7 N图2
6 g# g. G* {. C) M  Q" s7 J( {0 K- a" o) h6 ~- c5 |- b  ?
    然后是使用Cubemx软件对MCU的时钟,外设等进行配置,并生成所需要的项目框架。时钟配置如图3所示:9 P. h, G$ I& [9 O$ }" T
6.JPG 8 I; B1 c5 Q: i0 E; X

$ \; l# E3 ~1 W: @; L4 i  A7 T% _图3. q- @; M; b5 c7 r8 k/ V1 \
    FDCAN的时钟使用24M,不倍频,波特率为1Mbps,数据波特率为2Mbps,外设的配置如图4所示:  ?6 [4 D6 Y' a6 p7 T6 W
7.JPG
% w" H3 w1 c3 ^. Y4 x: \3 i- a/ @; ~" A6 J0 H/ |) \7 _, q  b3 g: Q3 e  Y
图4% p# o. o# ]% V0 h
    使用板载的LED作为接收数据的指示灯,可在图上进行配置,如图5所示:
. D  N. B* T# z8 c4 k2 v" f# D 8.JPG / _- Q8 t! M; ]- e

# N0 A( ]3 |& t# C图5: }+ G# d( l* b" c
    这样配置完后,生成所需要的项目框架。编写接收和发送数据的初始化函数,如下所示:
1 a8 Q4 M+ r$ z% J    & X, x& b; k& l1 Q& K" P
  1. /* Prepare Tx message Header */
    7 h/ v+ E# |# ?( J$ j* T
  2.   txHeader.Identifier          = Tx_ID;
    " [7 {8 K+ ~) N& }$ {
  3.   txHeader.IdType              = FDCAN_STANDARD_ID;: f9 A  Z. [4 q7 c' n3 u
  4.   txHeader.TxFrameType         = FDCAN_DATA_FRAME;: _( n  ]) f0 e, a* h$ y
  5.   txHeader.DataLength          = FDCAN_DLC_BYTES_64;) x+ @8 u2 `$ i: ~- E: r& M
  6.   txHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;% y1 x% |6 P  j+ h7 H# w: j
  7.   txHeader.BitRateSwitch       = FDCAN_BRS_ON;
    8 \8 H* F9 \) S
  8.   txHeader.FDFormat            = FDCAN_FD_CAN;
    ; w. }' \( [8 Z2 ~2 S
  9.   txHeader.TxEventFifoControl  = FDCAN_NO_TX_EVENTS;% [9 R6 g4 w9 T% F# b" l
  10.   txHeader.MessageMarker       = 0U;
    " k: ^( r7 D5 s- @2 R
  11. 5 J9 z5 {- q, `: ^2 T7 Q4 I* d! R
  12.   /**, C" A$ p: G. r
  13.     * Configure and enable Tx Delay Compensation, required for BRS mode.6 w3 A. k8 I: M  b" b) e8 X
  14.     * TdcOffset default recommended value: DataTimeSeg1 * DataPrescaler6 H1 r. j' V3 u0 ^) _. C* @
  15.     * TdcFilter default recommended value: 09 T( P; Q1 s% b
  16.     */
    0 m0 F/ H3 G! r6 s% ^0 ~( n
  17.   if (HAL_FDCAN_ConfigTxDelayCompensation(&hfdcan2,
    3 B5 I, g+ C9 [* |: s
  18.                                           (hfdcan2.Init.DataPrescaler * hfdcan2.Init.DataTimeSeg1), 0U) != HAL_OK)
    1 ]6 j+ @( X+ u
  19.   {$ G4 U, T2 m/ u+ Y. l
  20.     Error_Handler();: |! C1 }& j" Y) {3 T' T* d
  21.   }
    ( B% P+ D3 v: M+ q+ W

  22. ( }8 Y: I7 O1 l  a( B* |: b0 A
  23.   if (HAL_FDCAN_EnableTxDelayCompensation(&hfdcan2) != HAL_OK)
    % ~, \7 D% t. `# q  |" N0 y
  24.   {
    6 C1 t1 B- l" T. `/ w; D
  25.     Error_Handler();
    ) ~+ V: Q6 C, D1 i4 ]. E3 f$ P
  26.   }4 q' D' ~2 I- R0 U
  27. - b. Z; ?: c2 f+ E' n! X& p8 `
  28.   /* Start FDCAN controller */
    , |% e: H# G3 u" I' L( S& g
  29.   if (HAL_FDCAN_Start(&hfdcan2) != HAL_OK)
    3 c0 H0 F. V. E% [# L
  30.   {& P& Z- V8 E3 y0 `. J$ h* l- C4 r
  31.     Error_Handler();- B, h9 [/ X! ?* D/ ^% [- |
  32.   }
复制代码
  1. void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs)
    $ E8 R' m4 g; _, u7 I; ~' B
  2. {. i4 u9 d; X# J: ^
  3.   if ((RxFifo0ITs & FDCAN_IT_RX_FIFO0_NEW_MESSAGE) != 0U)
    " \4 V5 N# a, K! z
  4.   {
    + F" j" x. S: I: t
  5.     /* Retrieve Rx messages from RX FIFO0 */
    ( `$ I" I0 g$ W% @  F6 Y* h
  6.     if (HAL_FDCAN_GetRxMessage(hfdcan, FDCAN_RX_FIFO0, &rxHeader, rxData) != HAL_OK). F- k, `/ g8 b, d" s
  7.     {
    / s0 i' w, T( B: Z' g
  8.       Error_Handler();4 x% {6 P6 s$ m
  9.     }) Q/ H+ v2 M/ P

  10. 0 a' h+ M( e) K9 @; v6 g! r$ A3 P) H
  11.     /* Compare received RX message to expected data. Ignore if not matching. */% T& T+ `3 D. \' }6 n" E
  12.     if ((rxHeader.Identifier == Rx_ID) &&
    ) i5 f7 L3 Y( ~2 J) Y; @. O$ d
  13.         (rxHeader.IdType     == FDCAN_STANDARD_ID) &&
    1 P2 o) e% R2 _/ C* T  |( \
  14.         (rxHeader.DataLength == FDCAN_DLC_BYTES_64))9 K0 {/ F4 J$ O- T0 p
  15.     {" H* N+ X# g4 }. o+ N) J
  16. 8 x% l5 C3 i4 ~9 b3 K& x: x
  17.                 HAL_GPIO_TogglePin (GPIOA,GPIO_PIN_5);* z) l5 C+ \  Z9 q* g
  18.     }4 [- Z1 G% m9 {: o; v, T
  19.   }
    8 q: s8 j1 z  |7 M8 z: o  p
  20. }
复制代码
  1. if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan2, &txHeader, txData) != HAL_OK)
    6 X8 M8 R' \+ F2 a, }
  2.     {
    3 R& B, f% O$ P2 T! w
  3.       Error_Handler();) U) b( S# c- V  |7 H
  4.     }' C: E* M; [" O0 ^
  5. ; |" g* Z, P7 A
  6.     /* Delay for simple button debounce */0 m3 w' j& H8 q* d; u& `
  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 手机版