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

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

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

# H7 [( d& t" h& r      收到板卡,先点个灯,没什么问题就进入正式测试阶段。仔细阅读H533的Datasheet,是一款资源很丰富的MCU,发现其有两个FDCAN接口,这样就丰富了板卡通讯。这种总线通信方式当前使用的比较多,就先测试下这个外设功能。
: k$ M' Y) ?) @0 C( C) X5 u    首先搭建测试硬件条件,使用板卡上的PB12和PB13作为通讯接口,连接到TJA1044 驱动芯片板卡上,按照datasheet对应上即可。如图1所示:
5 R* k! f, t/ C9 G# ^ 5.jpg 8 F. n  ]. @- n+ D
3 ~7 F3 ~; [6 [
图1
* w7 |4 N$ o5 t& U& N1 d) }
  _) {% D  @! r( l  X 1.JPG
1 h( g' l. |  ]- p* W5 s! F& {* ?3 Z4 G. e/ ^; r
图2
; v0 j7 R; X& |# b' V
/ Y  R0 B/ N3 D% H% C! h0 a" L, k    然后是使用Cubemx软件对MCU的时钟,外设等进行配置,并生成所需要的项目框架。时钟配置如图3所示:, L) D+ U  b  |$ M% Z5 D. h2 h5 \, X
6.JPG , Z8 H5 k8 i7 N2 h! L1 {( L

3 W' G. C! `4 d) B9 E/ X6 z图32 P% `' O& G, G) a+ Z
    FDCAN的时钟使用24M,不倍频,波特率为1Mbps,数据波特率为2Mbps,外设的配置如图4所示:
" z0 z: H7 N# `' i 7.JPG # N' L$ \8 C+ s" X/ b0 o

0 T( K2 `6 M9 o  W0 U图4, G" Y6 ~: p4 W8 d+ \9 b4 k; b
    使用板载的LED作为接收数据的指示灯,可在图上进行配置,如图5所示:- Q* `$ U! \8 J- z1 g5 r
8.JPG
1 G* t6 \- D( P  J6 m; \$ N- p& E- ~2 d: K6 X3 s1 {; g: R0 y
图5) T2 a+ f/ [& y
    这样配置完后,生成所需要的项目框架。编写接收和发送数据的初始化函数,如下所示:
. T5 k. i, i2 L- u    2 L: T, V' V: Y
  1. /* Prepare Tx message Header */
    ) D% N: t" }8 I  Y( P- W6 d( ^
  2.   txHeader.Identifier          = Tx_ID;
    # G& a* f3 ]% g6 g1 o; S# L
  3.   txHeader.IdType              = FDCAN_STANDARD_ID;
    & R/ F2 e  D2 B
  4.   txHeader.TxFrameType         = FDCAN_DATA_FRAME;6 f( I+ j6 Y0 v
  5.   txHeader.DataLength          = FDCAN_DLC_BYTES_64;9 H, X$ q, m$ V8 p0 w4 h& F
  6.   txHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
    ) V- l5 h7 P4 w. y( P
  7.   txHeader.BitRateSwitch       = FDCAN_BRS_ON;
    1 C$ k" i+ c6 ]9 U% N
  8.   txHeader.FDFormat            = FDCAN_FD_CAN;9 c1 K2 I; `' S9 b+ z  g$ G
  9.   txHeader.TxEventFifoControl  = FDCAN_NO_TX_EVENTS;
    $ n# r: b4 ?  v) |# Y5 P
  10.   txHeader.MessageMarker       = 0U;
    4 u; Y9 i$ g- ~+ q9 a4 _6 M0 G

  11. - a5 `2 F8 e4 `
  12.   /**' @" T1 z: {1 t2 {  x! N; C  e% [0 l
  13.     * Configure and enable Tx Delay Compensation, required for BRS mode.
    4 _" p) i2 d# o# n% M2 x0 W: A6 w" b
  14.     * TdcOffset default recommended value: DataTimeSeg1 * DataPrescaler
    8 a# o5 h2 r  L, U* M4 x
  15.     * TdcFilter default recommended value: 0
    1 o+ [  F) y0 N1 {6 p6 f4 @
  16.     */
    8 Q* t- |, S; S3 L
  17.   if (HAL_FDCAN_ConfigTxDelayCompensation(&hfdcan2,! [/ }1 r# z8 M; g5 _7 B5 B
  18.                                           (hfdcan2.Init.DataPrescaler * hfdcan2.Init.DataTimeSeg1), 0U) != HAL_OK)1 u7 W8 T) _* w
  19.   {0 d# r# N/ E8 A: Z2 f+ S' ^
  20.     Error_Handler();1 A5 ?; }$ F5 u0 M3 j
  21.   }! `5 d4 N: y8 T2 W  K# Q+ O! _
  22. , o( p$ M( O! ^- M9 h: [
  23.   if (HAL_FDCAN_EnableTxDelayCompensation(&hfdcan2) != HAL_OK)
    3 y; J- F2 T6 Q+ _9 [
  24.   {* ?8 c6 f, l) A8 K) c9 m
  25.     Error_Handler();
    0 q* q# q* f* Q( c# f6 [& A
  26.   }' U/ K9 a5 \$ y0 b8 _; e/ S

  27. . f/ z- s1 Z; t" l  n  z4 \
  28.   /* Start FDCAN controller */
    4 q# b# j  u6 I2 d  @9 j9 P
  29.   if (HAL_FDCAN_Start(&hfdcan2) != HAL_OK)4 h. S6 {9 T. v1 r0 c& J5 A% f" l! Y
  30.   {2 m! K0 F! Y% Y3 C  c) |4 o+ S; v" K
  31.     Error_Handler();9 F9 R. v/ _/ J$ i7 e: U6 l) q* R
  32.   }
复制代码
  1. void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs)' H0 W3 V# J* D4 A8 Z, C- u! N1 N9 _
  2. {9 s7 |# N( A* n/ ~
  3.   if ((RxFifo0ITs & FDCAN_IT_RX_FIFO0_NEW_MESSAGE) != 0U)' m5 L! u! Z% e$ t9 E
  4.   {0 p1 B" \( t) i) u9 e2 L+ K0 P
  5.     /* Retrieve Rx messages from RX FIFO0 *// j1 j# [0 r: {- S8 c
  6.     if (HAL_FDCAN_GetRxMessage(hfdcan, FDCAN_RX_FIFO0, &rxHeader, rxData) != HAL_OK), i, R# i( g) u' O8 l% l: B
  7.     {! z: T) x- ~3 F( r# o1 q0 ^: E* k! `
  8.       Error_Handler();4 P8 C3 `  ?7 t" `/ X
  9.     }
    " [; S) i" o: f3 d  O
  10. 8 [' P3 Q. C" |% ^2 r( X
  11.     /* Compare received RX message to expected data. Ignore if not matching. */
    9 [" k0 B+ i  X% A2 ~
  12.     if ((rxHeader.Identifier == Rx_ID) &&
    4 w0 a( L* C) @5 B: L
  13.         (rxHeader.IdType     == FDCAN_STANDARD_ID) &&
    4 ]$ R6 L' H0 k. S
  14.         (rxHeader.DataLength == FDCAN_DLC_BYTES_64))% Z9 u% g% T6 k
  15.     {# w- E% D3 k7 U! {3 U9 k3 y8 l

  16. - u/ m5 K: J1 @, |
  17.                 HAL_GPIO_TogglePin (GPIOA,GPIO_PIN_5);
    , H" o7 ~, E3 @
  18.     }6 m6 L; C2 h3 ^, F  T  W
  19.   }5 {. D0 b: V! e( C2 Z9 K
  20. }
复制代码
  1. if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan2, &txHeader, txData) != HAL_OK)8 \' a: Q' b+ k3 y5 p
  2.     {
    ) O1 {- d* |9 b$ j/ Z
  3.       Error_Handler();
    , g  `8 E) l0 a# N. c
  4.     }
    ! t/ A- j6 S/ _- E

  5. $ n: s9 x+ ^: O4 Q3 m- v
  6.     /* Delay for simple button debounce */
    ! Z  I# i8 H0 N( c5 G* U; F- D
  7.     HAL_Delay(1000U);
复制代码
2.JPG
3.JPG
赞 收藏 评论0 发布时间:2024-7-1 23:14

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版