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

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

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

/ B% V1 I8 o; }& O: f1 @      收到板卡,先点个灯,没什么问题就进入正式测试阶段。仔细阅读H533的Datasheet,是一款资源很丰富的MCU,发现其有两个FDCAN接口,这样就丰富了板卡通讯。这种总线通信方式当前使用的比较多,就先测试下这个外设功能。
" H4 f" G6 h7 `    首先搭建测试硬件条件,使用板卡上的PB12和PB13作为通讯接口,连接到TJA1044 驱动芯片板卡上,按照datasheet对应上即可。如图1所示:/ f6 ]- r# E& l. |
5.jpg 8 t' {/ O% j& M5 z/ w/ U3 G
9 R# I$ l* T6 m2 t/ @" v* u1 C
图1
! Q/ a' T- A% r% Q1 @
9 B. H" `% W. }6 i0 v 1.JPG
$ k( f1 G) u+ j) f, a. e
7 R6 t6 H/ X# {% ]% v图23 j, k4 s" f' j7 m! Y, L' O0 b
/ p$ J+ R" z# b" p$ G
    然后是使用Cubemx软件对MCU的时钟,外设等进行配置,并生成所需要的项目框架。时钟配置如图3所示:' h8 x( i: }( ~1 m2 u
6.JPG $ N& y: X0 ~% j6 v* F

5 F* {) W: y) g: u5 Y图3
; r4 x" y3 ^8 @; F- S    FDCAN的时钟使用24M,不倍频,波特率为1Mbps,数据波特率为2Mbps,外设的配置如图4所示:
6 ?9 \4 S  Z' i+ S) c. i1 t 7.JPG
$ q. g5 `# H8 S$ s, Y' ~$ S. a( \" g% S& ^0 w4 \
图49 o6 ?  b( I0 `4 Y0 n: r
    使用板载的LED作为接收数据的指示灯,可在图上进行配置,如图5所示:; @, Q! J) A$ a. l* d
8.JPG
4 \) r4 q: ~6 y7 n
  S0 @1 A: a! h8 U+ W; u% Z图53 J" o8 y# K3 u; a
    这样配置完后,生成所需要的项目框架。编写接收和发送数据的初始化函数,如下所示:
0 f  L$ @9 A/ V- `. _   
% ~- H1 R2 X" [, i* ^4 L: S% K
  1. /* Prepare Tx message Header */
    ( P; h1 o, _# F; b
  2.   txHeader.Identifier          = Tx_ID;/ x, p& n. `  o, n* P4 _2 }9 z
  3.   txHeader.IdType              = FDCAN_STANDARD_ID;
    6 ]2 {5 A0 a! Q' w
  4.   txHeader.TxFrameType         = FDCAN_DATA_FRAME;
    # D' k* j$ I8 }- P! R% l: O
  5.   txHeader.DataLength          = FDCAN_DLC_BYTES_64;6 ~6 U( @/ U* Q
  6.   txHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
    & }+ c+ t& F. [& m& p2 T3 O3 Q
  7.   txHeader.BitRateSwitch       = FDCAN_BRS_ON;( Y3 K) t$ |  m" k
  8.   txHeader.FDFormat            = FDCAN_FD_CAN;
    * {- O- ^* i- X6 p& G3 Z# y* O
  9.   txHeader.TxEventFifoControl  = FDCAN_NO_TX_EVENTS;
    $ e' [9 x4 v" P- L
  10.   txHeader.MessageMarker       = 0U;* @  M" m6 s4 @9 q7 |5 i. t+ S8 {( t. r
  11. 4 y3 s3 F0 _1 ~' {  I! w6 f+ y
  12.   /**
    5 o( ~  W7 J* E3 R$ G: T
  13.     * Configure and enable Tx Delay Compensation, required for BRS mode.0 ?( Y: H& z3 \, E
  14.     * TdcOffset default recommended value: DataTimeSeg1 * DataPrescaler
    # Y% A" }! I7 p; y* J. ]  G( F- |
  15.     * TdcFilter default recommended value: 0
    9 J5 r' S' v, d, _
  16.     */0 F( \* e+ r3 Q  H; `
  17.   if (HAL_FDCAN_ConfigTxDelayCompensation(&hfdcan2,
    0 \. W, C9 ?% R- ~5 u
  18.                                           (hfdcan2.Init.DataPrescaler * hfdcan2.Init.DataTimeSeg1), 0U) != HAL_OK)* J( \$ s" w9 W+ ?" M
  19.   {
    / O% k" J' k9 y7 m, W8 C* x1 n
  20.     Error_Handler();
    0 M0 U+ Q& V# z/ d
  21.   }
    2 ?1 C, }# a2 [. I
  22. $ w: _' w* t+ ]% S9 K7 I! L
  23.   if (HAL_FDCAN_EnableTxDelayCompensation(&hfdcan2) != HAL_OK)1 Q; q% u/ q, n* v
  24.   {
    2 I; N7 b2 t+ ~; k
  25.     Error_Handler();& m6 E2 V5 {  ^4 x9 X- }- E9 Z
  26.   }
    4 E, i& C: o* u* `8 C: ]7 m
  27. - h8 w' ?" \4 }: A( p. j
  28.   /* Start FDCAN controller */9 J+ s# H, B: B7 l  d' ?
  29.   if (HAL_FDCAN_Start(&hfdcan2) != HAL_OK)
    ! ~# n/ a& ~7 d  D8 s
  30.   {# ]* j5 l% u; n4 \4 W3 H8 {4 n
  31.     Error_Handler();3 q# Q8 k2 D- l) j
  32.   }
复制代码
  1. void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs)
    ' K8 _" T# F. I  d# ]
  2. {7 Q$ e$ o; w9 }$ D: ?
  3.   if ((RxFifo0ITs & FDCAN_IT_RX_FIFO0_NEW_MESSAGE) != 0U)6 |2 c3 I; a/ `$ |5 w' d1 h
  4.   {
    * Q' R+ Y; Q; j7 k; T0 O
  5.     /* Retrieve Rx messages from RX FIFO0 */: I' y1 R: a# T3 G% `: Q
  6.     if (HAL_FDCAN_GetRxMessage(hfdcan, FDCAN_RX_FIFO0, &rxHeader, rxData) != HAL_OK). ~$ l7 w1 Q6 U4 `/ {" n
  7.     {) z8 `) h( G3 {; Y
  8.       Error_Handler();
    3 |, m( g" v% H- X
  9.     }
    ' S$ q7 L  o7 R  ~0 @

  10. 7 J# h, F. R$ Y- D6 Z
  11.     /* Compare received RX message to expected data. Ignore if not matching. */
    6 V0 p5 W' J1 _# n4 v! j1 l
  12.     if ((rxHeader.Identifier == Rx_ID) &&
    " q* k& p' B- e
  13.         (rxHeader.IdType     == FDCAN_STANDARD_ID) &&) P- S- u( O+ f5 s" ^4 ?  i' ?
  14.         (rxHeader.DataLength == FDCAN_DLC_BYTES_64))
    + U$ k" _7 \1 E9 ]
  15.     {
    " S5 D( v% `" G% }

  16. : K* s2 A( X, g
  17.                 HAL_GPIO_TogglePin (GPIOA,GPIO_PIN_5);6 I; p6 D1 `8 L( N* X1 I2 B2 N
  18.     }
    . O2 b' }* I6 t0 P  k" m; m
  19.   }/ H0 Z4 n% p* h" v
  20. }
复制代码
  1. if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan2, &txHeader, txData) != HAL_OK)
    . h, u/ _/ r& O! i' I
  2.     {
    ! g/ o4 |) Z! ]3 m# i. B3 P0 M
  3.       Error_Handler();2 n/ x+ [6 U+ e( y. ^) m# f: T( k" D
  4.     }
    + b. D! h" I1 Y* G

  5. 7 v9 u$ i' \9 D. u+ B+ i
  6.     /* Delay for simple button debounce */
      i  G$ X% w0 _. n5 s
  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 手机版