' f, E: a9 @ W2 B1 d4 C 本次测试FDCAN通讯,STM32U3是带FDCAN外设的,功能还是挺强大的。这个外设也是现在项目中常用的通讯方式。
5 \& A, D' T% s! Y 通信芯片使用的是自制的TJA1462 模块,这样使用杜邦线连接到FDCAN测试仪,连接到电脑上位机上,就可以进行测试了。
% @ S. u: B L0 P) {" p. O7 [ 整体连接图如图1所示:
2 a3 I! H% l! R, h9 v
% o; B7 T% z8 e7 R1 n图1
- f7 U) L- Y, A+ S5 H6 O CubeMx 配置如图2所示:
; E8 c; U' `0 W: K! Y
: t! Q7 v* D+ Z9 V# U3 U0 t7 K
图2! ~$ T. U' d P' B, G) q/ N# t
/ r$ n; Z$ h) a! R
FDCAN 配置为 Nominal 帧设置为1Mbps,而数据帧设置为2Mbps,数据选择64个字节。然后生成项目框架。0 m, Z* m: l- y+ o. S9 T
) e1 ]# W$ r0 c2 W 修改一下程序的发送和接收中断程序,程序配置如下所示:
4 {' R1 p5 T( W+ X4 V9 v0 ?- /* Configure Rx filter */
2 ?! s K. M* n8 n! ~/ p - sFilterConfig.IdType = FDCAN_STANDARD_ID;9 M! ]+ k& J0 [% I, g+ j5 `7 X" I
- sFilterConfig.FilterIndex = 0;
+ x; {3 D; ?) `+ ~0 [ - sFilterConfig.FilterType = FDCAN_FILTER_MASK;
* B4 A. {" _' p" j# H - sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;+ B; C( c/ D% q7 m9 L. q
- sFilterConfig.FilterID1 = 0x123;//receive ID
# k# I' \6 ~. y! A - sFilterConfig.FilterID2 = 0x7FF;
) `8 m; R9 |. r: f5 [+ L/ U9 K! R% ] - if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK) `' S8 v: m; B% E, B0 C4 w
- {
% |3 Z8 t' j4 t - Error_Handler();, i4 h( Y" s2 K
- }0 {6 s, O7 N7 o7 P3 o B' R6 o, ^
- & H5 E* d- ?9 D4 ?5 V Y
- /* Configure global filter:6 k/ ?/ w8 z) C8 D. R
- Filter all remote frames with STD and EXT ID' E4 s6 T. ^0 M3 Z4 f: Z
- Reject non matching frames with STD ID and EXT ID */
0 a. c0 z. Z$ c9 v3 F4 R - if (HAL_FDCAN_ConfigGlobalFilter(&hfdcan1, FDCAN_REJECT, FDCAN_REJECT, FDCAN_FILTER_REMOTE, FDCAN_FILTER_REMOTE) != HAL_OK)
n% g& P! z" x# h! b8 G9 W - {! n6 B ]9 A- ^, b* `
- Error_Handler();% ^# _3 _* {0 p6 S9 I
- }
( l+ P2 m; C1 Y% g6 p- G$ ~
$ A! G, @% Y# [' [: @- N- /* Start the FDCAN module */: c( a) {7 G4 R
- if (HAL_FDCAN_Start(&hfdcan1) != HAL_OK)
' H6 F' I0 P6 L J% P - {
0 D N2 Y5 F. Z% a) Q* \ - Error_Handler();
& X# x, h' T! s0 R. l - }6 }! j- T5 B0 q- ~! M" v5 S% d6 K
- 8 g2 ~1 N& y2 y
- if (HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0) != HAL_OK)& A' F: }, J @* Z' N; k# W( t+ c5 t
- {# u+ R2 n! k. i3 r
- Error_Handler(); a8 l1 t O( y$ j5 y5 V! V
- }5 y2 L5 C' P! D0 J0 d, t
- 9 q* l# f& o& p
- /* Prepare Tx Header */
0 N2 E: e Y* q5 T# @ - TxHeader.Identifier = 0x321;
9 i% Y5 T( a7 S - TxHeader.IdType = FDCAN_STANDARD_ID;
4 z: u. u9 A% J: o, W! D9 ? - TxHeader.TxFrameType = FDCAN_DATA_FRAME;
3 w, Y3 n1 m% F# w, C$ Q - TxHeader.DataLength = FDCAN_DLC_BYTES_64;//FDCAN_DLC_BYTES_8;$ V6 Z0 B1 y) H; }, P. K
- TxHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
, F. @7 V& K1 E6 i& @4 Y$ a% ~& E - TxHeader.BitRateSwitch = FDCAN_BRS_ON;
7 m6 L7 C3 Z9 W& a - TxHeader.FDFormat = FDCAN_FD_CAN;//FDCAN_CLASSIC_CAN;6 g5 V! f2 J0 K9 M7 j
- TxHeader.TxEventFifoControl = FDCAN_NO_TX_EVENTS;
, Q+ f' R3 S. Y/ W! N9 t - TxHeader.MessageMarker = 0;
复制代码 ; x0 e: t0 u9 ?( H% \3 }
6 G; t8 Y0 U9 Y9 v 编译,Debug,通过上位机观看测试数据,接收数据如图3所示:
: L. E: [" h- b: ]
1 P' H* b- m- K* X( j; b7 ~% v7 u图3& R9 X7 u* t: L% G& a. h: b$ n6 `
发送数据如图4所示:
9 Y9 p" L' B2 E" u4 `
% s& t9 v/ r1 d# c图4
- \2 _5 z& }/ p1 b9 u9 \% e 经过测试,发送和接收正常,调试5Mbps的时候,数据不能连接上,应该是杜邦线的问题。
& U5 z I0 V" B c |