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

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

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

- n% G2 w* u! w; v4 G      收到板卡,先点个灯,没什么问题就进入正式测试阶段。仔细阅读H533的Datasheet,是一款资源很丰富的MCU,发现其有两个FDCAN接口,这样就丰富了板卡通讯。这种总线通信方式当前使用的比较多,就先测试下这个外设功能。1 R4 x$ k7 `! ?& G* W
    首先搭建测试硬件条件,使用板卡上的PB12和PB13作为通讯接口,连接到TJA1044 驱动芯片板卡上,按照datasheet对应上即可。如图1所示:" K$ O' h* Z3 Z" Z4 k4 }# w
5.jpg
$ Y; x* G1 y# t" {) ?+ l' d6 t5 y- g* o
图11 B" [7 b+ x- r

8 E: {7 B0 X6 D! A% C 1.JPG
  `# H' |# b7 C* S  u" ?
3 }$ Q: S; e0 y4 i" e: p8 q& g6 R图2# s, m, j- N9 e: W; @8 d
+ u  E) _3 ?9 @- R+ Z/ D: V; U; h7 P
    然后是使用Cubemx软件对MCU的时钟,外设等进行配置,并生成所需要的项目框架。时钟配置如图3所示:
% e% b  ]' X6 y: V 6.JPG
; ^: ?& V- E$ W4 k% t% J
, k3 l, m% n! D$ G' W' b$ F图3
* u" n' o: p+ @# e$ b    FDCAN的时钟使用24M,不倍频,波特率为1Mbps,数据波特率为2Mbps,外设的配置如图4所示:& X1 R% N# q& y6 {8 ]; T$ F; _2 S
7.JPG 9 D8 d& s6 v! W4 }$ d6 P# Q

5 F* Q( ~! M  A: p) E图4
0 h% C8 u8 f, m9 h& ^9 {& U- \    使用板载的LED作为接收数据的指示灯,可在图上进行配置,如图5所示:8 a3 y. }9 F! Q9 L0 [  K/ Y
8.JPG
( A1 {* e) M7 K- [/ L
; X0 ], S; t# k, g: |图5" T5 z1 {- I" F
    这样配置完后,生成所需要的项目框架。编写接收和发送数据的初始化函数,如下所示:. j( A& \1 ~; F
    / g5 n* m0 r" A' l6 k; j& Y
  1. /* Prepare Tx message Header */
    9 ~) b8 K# f2 r( {, @$ N
  2.   txHeader.Identifier          = Tx_ID;
    * n0 M3 o2 _$ N) t! n% `; E
  3.   txHeader.IdType              = FDCAN_STANDARD_ID;  C6 Q  k! j9 q7 j' ]' P" x
  4.   txHeader.TxFrameType         = FDCAN_DATA_FRAME;; y) `2 @9 a+ a1 A
  5.   txHeader.DataLength          = FDCAN_DLC_BYTES_64;
    ! t. i7 B7 j3 N
  6.   txHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
    - Z, @* J7 y8 ?5 V1 k. M7 o6 ^. F  z
  7.   txHeader.BitRateSwitch       = FDCAN_BRS_ON;
    9 c3 |+ ^+ x+ k" C' r3 Z
  8.   txHeader.FDFormat            = FDCAN_FD_CAN;. p+ u) z: h! o
  9.   txHeader.TxEventFifoControl  = FDCAN_NO_TX_EVENTS;0 o/ P4 ^' [3 X, G6 ?) K
  10.   txHeader.MessageMarker       = 0U;
    4 p3 K9 |8 p6 j1 d; [7 F1 h

  11. ; y# s) N9 Z$ d2 s
  12.   /**6 ~+ E6 K: e- ]$ D
  13.     * Configure and enable Tx Delay Compensation, required for BRS mode.
    ) c" s/ h% S; z! m
  14.     * TdcOffset default recommended value: DataTimeSeg1 * DataPrescaler
    1 O4 a: {/ Z# F  b6 o, N) L
  15.     * TdcFilter default recommended value: 0; y, h( }+ P2 r
  16.     */2 |5 g0 I( y; m) q8 l5 _
  17.   if (HAL_FDCAN_ConfigTxDelayCompensation(&hfdcan2,
    ! u; W3 K# P3 W. Y% s3 W, G
  18.                                           (hfdcan2.Init.DataPrescaler * hfdcan2.Init.DataTimeSeg1), 0U) != HAL_OK); m0 b6 j6 l8 S
  19.   {
    # I7 t: S* }7 I
  20.     Error_Handler();
    9 y. a; C8 R' @6 \& _
  21.   }
    * V+ L- f0 z6 Y) F
  22. ; a+ z0 U3 p8 t
  23.   if (HAL_FDCAN_EnableTxDelayCompensation(&hfdcan2) != HAL_OK)( o0 ~# h- s. s; v+ l! F1 P
  24.   {
    ) ^, f0 ~; `9 n  U7 \5 \
  25.     Error_Handler();  {9 M3 ]# A& Z0 |7 h
  26.   }: w# v& b! Z  c3 {! S

  27. 7 \) Z. y* r) b# o" `* R
  28.   /* Start FDCAN controller */" x" }; `% S+ \: f0 U( Q2 ~
  29.   if (HAL_FDCAN_Start(&hfdcan2) != HAL_OK)4 g$ P9 E3 P3 h6 D; P  _, |
  30.   {
    & ^0 t9 k+ l  W; [5 c  K2 V
  31.     Error_Handler();, t$ S3 X" Z# M. ^' p6 I0 e
  32.   }
复制代码
  1. void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs)5 [. j! ^6 A$ ~
  2. {* z" v* c3 ~  ~& Z7 N) x
  3.   if ((RxFifo0ITs & FDCAN_IT_RX_FIFO0_NEW_MESSAGE) != 0U)
    ! L5 i& _' R+ U
  4.   {
    4 J$ f4 P' i* N( v3 Z
  5.     /* Retrieve Rx messages from RX FIFO0 */# h2 u% l. e0 h- @) ~' `. i0 s
  6.     if (HAL_FDCAN_GetRxMessage(hfdcan, FDCAN_RX_FIFO0, &rxHeader, rxData) != HAL_OK)6 O: i0 A' F* H- }% ^- U
  7.     {: i9 {; k& e9 T6 }
  8.       Error_Handler();
    " M9 I) Q, K8 h
  9.     }7 v" J! F, Z  _$ G. I. D7 m

  10. ) W+ G( _( [* A  R
  11.     /* Compare received RX message to expected data. Ignore if not matching. */
    ' j7 Z  F' i* m" l, f7 m0 x
  12.     if ((rxHeader.Identifier == Rx_ID) &&+ a" F! U( W! }( o
  13.         (rxHeader.IdType     == FDCAN_STANDARD_ID) &&7 l+ z! h, c3 N" |% q* l% l/ U2 w
  14.         (rxHeader.DataLength == FDCAN_DLC_BYTES_64))4 ^; C4 A' _1 ?4 @
  15.     {9 S" B1 M* A2 h* P& \

  16. ' i1 p4 R% H: y5 w, U3 G# N0 M8 C/ Q: E& e
  17.                 HAL_GPIO_TogglePin (GPIOA,GPIO_PIN_5);
    , Q, s8 {+ Q5 p& i  L! v5 E1 [
  18.     }
    ! W, v7 f8 n: c. s
  19.   }6 t8 H( u9 B' Z/ x1 C6 V
  20. }
复制代码
  1. if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan2, &txHeader, txData) != HAL_OK)' Y* f. x1 b6 s
  2.     {
    % N* z0 V5 f+ {
  3.       Error_Handler();
    * o4 A/ U1 j' Z3 d- s4 ]6 A7 ]
  4.     }" ^5 \8 H5 D/ C; G
  5. : G' A$ [: ]9 {1 G4 d
  6.     /* Delay for simple button debounce */8 Q, X& k) [8 L0 ~3 p  A2 J8 s3 {8 [
  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 手机版