- j+ C! e# w$ e% r% {/ s' { 本次测试FDCAN通讯,STM32U3是带FDCAN外设的,功能还是挺强大的。这个外设也是现在项目中常用的通讯方式。
1 E4 {* D+ p9 h0 p' u7 S 通信芯片使用的是自制的TJA1462 模块,这样使用杜邦线连接到FDCAN测试仪,连接到电脑上位机上,就可以进行测试了。
; D. W9 T8 e& r) m! S 整体连接图如图1所示:
4 [% c% X1 K- T) V
$ ~+ e& Y) }6 x5 C: m* M
图1+ p. R% E+ N% {" P9 G7 d# e
CubeMx 配置如图2所示:
# M; [1 }2 J3 T2 Z
5 `' J8 ~# q8 n3 T, e$ T/ J
图2
" }0 J+ s4 N! n& C. ]6 B% C; a! ?0 }" r: y3 r
FDCAN 配置为 Nominal 帧设置为1Mbps,而数据帧设置为2Mbps,数据选择64个字节。然后生成项目框架。2 o8 Y |. e$ U: f3 P! H
/ }1 o3 p* G9 b s( C* ~ 修改一下程序的发送和接收中断程序,程序配置如下所示:4 I" ~- n/ _* U# a6 t; b1 P3 J
- /* Configure Rx filter */5 w2 \, [* T8 k" g) v
- sFilterConfig.IdType = FDCAN_STANDARD_ID;' S" _# a3 d# _
- sFilterConfig.FilterIndex = 0;6 F+ O" k( o/ H0 H e
- sFilterConfig.FilterType = FDCAN_FILTER_MASK;
' t, J6 A4 f O e" Q1 v4 g - sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
. m: U6 O3 R9 _( x8 l0 P2 \ - sFilterConfig.FilterID1 = 0x123;//receive ID
* h; ~! x$ h1 h) O& }3 ` - sFilterConfig.FilterID2 = 0x7FF;$ t d8 I( g' J6 |! O
- if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK)5 @" u! z( q5 R
- {/ m6 J; [* l. z2 k
- Error_Handler();( b( ^, Y8 \4 x, B6 E
- }
1 y; {6 q) K: [; Y* P. q
5 t3 @% j' n/ J7 t# U; X+ w& }- /* Configure global filter:7 P1 h* M( \2 C, d# `) s. z
- Filter all remote frames with STD and EXT ID. e. L' f4 l: G5 ^/ ^) v/ j- h% |, A
- Reject non matching frames with STD ID and EXT ID */) t( N1 H9 |& y2 P
- if (HAL_FDCAN_ConfigGlobalFilter(&hfdcan1, FDCAN_REJECT, FDCAN_REJECT, FDCAN_FILTER_REMOTE, FDCAN_FILTER_REMOTE) != HAL_OK)
$ i2 y( q! j% ?- t1 V" p. ]: Z - {: P' o! s$ P# _7 r" Y( N- n
- Error_Handler();
; W1 r$ L+ ^. f& @6 ^" t; H' ]' Q& e - }
* C, n9 i( H4 }- G( ~' c - 0 }; H( V% `& m# }7 Q9 i9 F
- /* Start the FDCAN module */
5 v5 R& o+ X& ?* M j" j9 V - if (HAL_FDCAN_Start(&hfdcan1) != HAL_OK)
) I- P# [9 q9 ^9 F0 Q - {! k# M( A% M& o% `7 Y! j6 q3 _
- Error_Handler();* O8 ^* g4 _. A% w7 }8 T% A
- }
7 r: q# o" m8 ? - 8 g/ |! z3 j, b9 y! U# F; \4 j, d; c
- if (HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0) != HAL_OK)4 r2 }: D% u$ M7 h7 s* ~1 O. r4 m! o
- { Y t5 a2 U- a+ n0 `( k# ^6 z
- Error_Handler();# w; I5 g0 R$ }2 A, U/ f
- }
/ `8 Z- t# }' k5 U
" g3 w0 f! |" `9 T3 I M; S/ s! q- /* Prepare Tx Header */
$ c8 D1 T- w9 q4 i - TxHeader.Identifier = 0x321;
7 p! C+ i% t* v% ? - TxHeader.IdType = FDCAN_STANDARD_ID;: D3 }( d! o" e3 a0 ?; h- A# B
- TxHeader.TxFrameType = FDCAN_DATA_FRAME; t, d* A4 \% n8 l
- TxHeader.DataLength = FDCAN_DLC_BYTES_64;//FDCAN_DLC_BYTES_8;5 I( _! G( b& B$ T" f
- TxHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
' L2 z5 F& h( H k - TxHeader.BitRateSwitch = FDCAN_BRS_ON;( W0 N2 Z S( g( h, B& H
- TxHeader.FDFormat = FDCAN_FD_CAN;//FDCAN_CLASSIC_CAN;
( O' k) g9 ~/ {% `5 `$ ]% j( [ - TxHeader.TxEventFifoControl = FDCAN_NO_TX_EVENTS;& I: \) A, Z9 K( E
- TxHeader.MessageMarker = 0;
复制代码 ! ^% b: C5 a- [7 u5 I
; y6 d* p; k. }2 A) C6 w" q
编译,Debug,通过上位机观看测试数据,接收数据如图3所示:; h& I# O; f& c6 x
; R: R7 }4 r7 O5 ]6 L* ?8 f9 x图3$ p- Q7 Y1 _3 G! T: a, d
发送数据如图4所示:
( [( r6 L6 u1 a) O& d0 _& d
( P) g7 s8 y+ g7 G. }+ @
图4
9 r/ w# X3 Y" u) t: j 经过测试,发送和接收正常,调试5Mbps的时候,数据不能连接上,应该是杜邦线的问题。* X5 ^4 @9 i# b1 b4 ^! x( f( ]
|