, M% V6 f, k `
本次测试FDCAN通讯,STM32U3是带FDCAN外设的,功能还是挺强大的。这个外设也是现在项目中常用的通讯方式。6 M0 M. l0 e# F* A/ U- z$ M
通信芯片使用的是自制的TJA1462 模块,这样使用杜邦线连接到FDCAN测试仪,连接到电脑上位机上,就可以进行测试了。6 X$ x0 B' O; t
整体连接图如图1所示:
5 z' p7 M2 H* Q' H- ~
3 T6 r+ h* O/ ^7 P2 N: @
图1 `( b! c1 m8 f. x2 S* ~) m
CubeMx 配置如图2所示:
7 I8 j' H2 z) D) M: `, M6 V
" O! f& H$ U5 r8 a% g" y* ~$ ?图2
$ \+ U3 G* E2 F$ {7 H) X6 K1 y) ]- I8 k" ~9 Q0 M$ ^6 q
FDCAN 配置为 Nominal 帧设置为1Mbps,而数据帧设置为2Mbps,数据选择64个字节。然后生成项目框架。
- C6 m3 ^% \% G+ p! Y$ S8 K/ r( Q& |; B
修改一下程序的发送和接收中断程序,程序配置如下所示:
0 @. y2 l/ l6 i- /* Configure Rx filter */2 b2 g* t$ ?* _8 D4 K9 B
- sFilterConfig.IdType = FDCAN_STANDARD_ID;
, Q( I- p \; ]6 @5 e6 x - sFilterConfig.FilterIndex = 0;1 t( p( E# b4 u. [ [+ C) Q0 @$ e
- sFilterConfig.FilterType = FDCAN_FILTER_MASK;7 ~$ { M9 } v! V, j8 o& F' h
- sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
/ L6 l3 O: D' u4 C, T - sFilterConfig.FilterID1 = 0x123;//receive ID2 I) E6 Q) `# B) A3 b4 _$ Q: j
- sFilterConfig.FilterID2 = 0x7FF;. s2 ?6 e; k: N* `8 F: _# |
- if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK)
! M6 F) H& H: C" B( \4 t% h - {' [3 @! h6 A2 j' |
- Error_Handler();. {. b. n$ D9 a) A y! F& y5 f
- }8 L. t- W) f, A1 `/ ^
- G. ?. \( o7 ^+ P0 i! z" H
- /* Configure global filter:( x' U- P. |' i: x8 a) O4 e
- Filter all remote frames with STD and EXT ID
) ]/ w5 P) t# {/ W, g; x - Reject non matching frames with STD ID and EXT ID */* g! @; k2 k, V' `
- if (HAL_FDCAN_ConfigGlobalFilter(&hfdcan1, FDCAN_REJECT, FDCAN_REJECT, FDCAN_FILTER_REMOTE, FDCAN_FILTER_REMOTE) != HAL_OK)
7 Q9 L- l0 Y* Y0 C# c' A0 G1 i - {
- F* {) x3 @* y# F8 a8 W - Error_Handler();" {7 X' L9 l% y) }+ c+ Q4 p
- }( S/ F& F! s3 o5 V, I+ Z
" p, B3 n0 G( `# }1 L- S- /* Start the FDCAN module */& I4 C$ R4 l7 _' e8 ]/ n
- if (HAL_FDCAN_Start(&hfdcan1) != HAL_OK)% p0 f+ ~$ g5 a
- {) x+ N4 J4 F A4 E
- Error_Handler();% B) [2 }* I8 j! Z; i6 }
- }
& A: q. }8 C3 g& Q1 v# ~ - ! L: v2 S/ Z; w( S" Z, r; y
- if (HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0) != HAL_OK)
0 D# t. [0 W# p! M u9 Q6 F - {$ |9 s1 K* u4 l- f$ ?3 B
- Error_Handler();
9 @! ?; S% ^% ?( u) n h - }) n3 `( m, K5 R# J% x
- - R6 v i5 }" {' u9 y' S
- /* Prepare Tx Header */0 W/ z; j+ e8 X" Y/ c+ B7 |+ Q. s6 z
- TxHeader.Identifier = 0x321;
: O) U/ Y- ^: l+ K, e - TxHeader.IdType = FDCAN_STANDARD_ID;6 s y% m0 K2 q* r c4 g
- TxHeader.TxFrameType = FDCAN_DATA_FRAME;5 Y/ u5 K+ s6 f, l) X/ R* e0 l
- TxHeader.DataLength = FDCAN_DLC_BYTES_64;//FDCAN_DLC_BYTES_8;7 [$ A- W( x; ?6 R; ]
- TxHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
: I- l( e7 W n+ O8 N - TxHeader.BitRateSwitch = FDCAN_BRS_ON;; K$ |0 @" I A/ ^* ~( C5 q
- TxHeader.FDFormat = FDCAN_FD_CAN;//FDCAN_CLASSIC_CAN;+ C& E$ Q; k; v7 }* y0 c3 H" z w
- TxHeader.TxEventFifoControl = FDCAN_NO_TX_EVENTS;
# Q, r- C& ~2 B! k& E8 X - TxHeader.MessageMarker = 0;
复制代码 ! S0 e; \ U# V: E- O
/ C" X# l( B) G9 g* o
编译,Debug,通过上位机观看测试数据,接收数据如图3所示:
]4 ^* S/ v/ ^) i1 O+ e
# ?& k& a8 S4 E7 ^/ ~图33 G" Y$ `2 b& t5 a
发送数据如图4所示:$ i1 _) ~1 q0 P. O7 D9 W/ A7 h
$ I9 O$ O* g. @' g3 r6 x% q& }
图40 K# t2 W" h2 K3 \/ |9 u
经过测试,发送和接收正常,调试5Mbps的时候,数据不能连接上,应该是杜邦线的问题。
. b5 Q; g( w) p- L! z3 S7 G: Z, w9 w |