2 w) p( }& o- ?3 G9 Z/ i/ O" h
本次测试FDCAN通讯,STM32U3是带FDCAN外设的,功能还是挺强大的。这个外设也是现在项目中常用的通讯方式。& y1 Z% G" x, n1 K, _0 l
通信芯片使用的是自制的TJA1462 模块,这样使用杜邦线连接到FDCAN测试仪,连接到电脑上位机上,就可以进行测试了。7 R# |8 Y8 U0 z* t) Q% W0 R
整体连接图如图1所示:
; y; Q& i, i, `1 L. B. l% b
5 u4 a, K$ `2 e; _7 B: P. s
图1
; r5 P2 ~; m5 P& N Y1 w" F" d CubeMx 配置如图2所示:9 L0 J& |8 ]7 F, L% g
& r8 P9 j7 U( G3 P6 d
图2
# I' N# p# M/ E8 ]$ [
2 O/ X7 P$ `/ S, B; r FDCAN 配置为 Nominal 帧设置为1Mbps,而数据帧设置为2Mbps,数据选择64个字节。然后生成项目框架。
) R5 R1 }: @ w& {" V* n& C# I0 v! ]2 _* M0 _: B0 n9 F, y
修改一下程序的发送和接收中断程序,程序配置如下所示:5 k% k8 [* K1 f
- /* Configure Rx filter */5 a9 y# @$ ?! \+ w( U7 t, N$ T
- sFilterConfig.IdType = FDCAN_STANDARD_ID;
5 O& D+ ]- D* B, ~ - sFilterConfig.FilterIndex = 0;' K3 u$ v9 {. J1 m9 \
- sFilterConfig.FilterType = FDCAN_FILTER_MASK;. R1 J4 v6 y* `- \
- sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;$ y" }0 ~1 v& M& Q
- sFilterConfig.FilterID1 = 0x123;//receive ID
( g7 n& N) V7 p: |3 H$ h - sFilterConfig.FilterID2 = 0x7FF;
* S4 P- {- d5 S+ d d6 u+ ^1 H/ {& H - if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK)0 T' W# T! B# Z# p9 W+ u. i! y& e% t
- {4 ^$ A6 \* t) C$ W
- Error_Handler();
- g: R: y" N( |9 v) Y. O/ f# k; U3 | - }
# X0 j, @! C- z( u4 j - " m/ y2 P$ @% W+ ?3 G$ T
- /* Configure global filter:: v" M2 v. Z3 T0 s
- Filter all remote frames with STD and EXT ID
. X F- F8 H( A( Q( S - Reject non matching frames with STD ID and EXT ID */
/ m9 {5 v/ h& g% m+ @5 h8 P; z0 U+ G - if (HAL_FDCAN_ConfigGlobalFilter(&hfdcan1, FDCAN_REJECT, FDCAN_REJECT, FDCAN_FILTER_REMOTE, FDCAN_FILTER_REMOTE) != HAL_OK): m# m2 ?4 S4 k2 O1 |7 k- ^; h( X; ?& q" `
- {
+ `* {4 d7 z6 w/ [3 I - Error_Handler();6 A' u! V* h8 V6 { h+ T
- }$ t3 L) s- e# R
- - u9 z' f6 p) l1 e& ^
- /* Start the FDCAN module */3 x# B8 e. {2 I1 N5 _6 _
- if (HAL_FDCAN_Start(&hfdcan1) != HAL_OK)
2 b1 ]2 b* w2 z# l" r - {" u# B, t" j% y4 `
- Error_Handler();
- M) Q" u. t" b- B9 N: @* w2 y - }
' X$ o9 r) d4 a) O1 v- K( I - , L2 r# M0 e2 O9 z" f. ^
- if (HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0) != HAL_OK)6 y( Q' m$ }# }; ~
- {. \$ L7 X( g% v; X0 I" T8 l
- Error_Handler();4 q) b& Q+ Z; [8 `
- }
2 C# r$ Q8 z) S3 c# X
. U$ l" D' g5 f( Q3 Q: `- /* Prepare Tx Header */5 h; P; m5 g" w3 U( P* H' _
- TxHeader.Identifier = 0x321;
+ |& u; h/ X) z. {7 l - TxHeader.IdType = FDCAN_STANDARD_ID;5 j6 \* f7 x% E' _6 z+ f% h
- TxHeader.TxFrameType = FDCAN_DATA_FRAME;
8 K! G1 L* |) H+ Z - TxHeader.DataLength = FDCAN_DLC_BYTES_64;//FDCAN_DLC_BYTES_8;
: ^" X6 x2 D% w( U - TxHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
0 _7 Q; i8 ~( l @2 t - TxHeader.BitRateSwitch = FDCAN_BRS_ON;
) O1 t. u/ ]5 L: u" k# } - TxHeader.FDFormat = FDCAN_FD_CAN;//FDCAN_CLASSIC_CAN;7 F; E: q" x" {0 h- {4 Z
- TxHeader.TxEventFifoControl = FDCAN_NO_TX_EVENTS;5 M- Z q" A/ p0 @* e$ M) c
- TxHeader.MessageMarker = 0;
复制代码 , a" p" Z' C* g" A
4 ^; k2 W/ Z; O5 S2 t8 d& r
编译,Debug,通过上位机观看测试数据,接收数据如图3所示:# B, E& u9 ?; U& s9 N6 y
! }4 ~1 N* V8 S图32 w0 E C$ J4 {7 b1 p% U
发送数据如图4所示:$ T- O; ^& ^ x: _5 _0 \
- d* J l9 Q" |9 ^
图4
. y h2 A. a1 z! d; W- `- S 经过测试,发送和接收正常,调试5Mbps的时候,数据不能连接上,应该是杜邦线的问题。; F$ @4 H9 q( s5 [
|