1 n/ o1 b3 {( J Q5 K
本次测试FDCAN通讯,STM32U3是带FDCAN外设的,功能还是挺强大的。这个外设也是现在项目中常用的通讯方式。
8 Q2 ~7 w- P8 J 通信芯片使用的是自制的TJA1462 模块,这样使用杜邦线连接到FDCAN测试仪,连接到电脑上位机上,就可以进行测试了。
) F3 e( F( J; Z2 G$ N5 S, Z- D 整体连接图如图1所示:4 G8 s5 z G' ^# S Z* C
4 M; b! G( D! O; |
图1
; q L6 x. `' u+ \: [ CubeMx 配置如图2所示:$ p$ V6 N# F7 o' W2 [6 _. o
6 A' G) J. k9 O. H
图2
1 A0 m4 B$ G% x' V- a6 `. e/ T) i
$ R8 \0 \; F& h FDCAN 配置为 Nominal 帧设置为1Mbps,而数据帧设置为2Mbps,数据选择64个字节。然后生成项目框架。
: z7 Q! H6 C9 X4 E; b' Z u0 l, O6 B2 w% q8 Z Y: p& q+ y
修改一下程序的发送和接收中断程序,程序配置如下所示:
, D2 Y. O% o3 p) Q% K- /* Configure Rx filter */
- a8 M8 p9 F) v5 o) Q# S7 } - sFilterConfig.IdType = FDCAN_STANDARD_ID;
' y# h4 K F6 K. K - sFilterConfig.FilterIndex = 0;0 n' S2 U8 C1 w4 p
- sFilterConfig.FilterType = FDCAN_FILTER_MASK;" {; v( X8 A* y
- sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;* ~/ p' C* R. h8 X+ S3 X
- sFilterConfig.FilterID1 = 0x123;//receive ID
0 T1 S3 y4 e( A* e - sFilterConfig.FilterID2 = 0x7FF;$ t# e. T, n* t8 t; m' R
- if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK): v& \% O$ s( l" D1 m5 a
- {
5 d# X. k0 W C% ] - Error_Handler();
7 w: w1 I1 n$ E6 Q - }
1 A+ U7 f+ ~6 H. T - / D& x0 _1 G8 v8 J
- /* Configure global filter:
% E6 z0 J3 t% L9 ] - Filter all remote frames with STD and EXT ID: P" c" [4 j8 w$ u0 I! [
- Reject non matching frames with STD ID and EXT ID */
/ n% o# c. L# G; q4 O - if (HAL_FDCAN_ConfigGlobalFilter(&hfdcan1, FDCAN_REJECT, FDCAN_REJECT, FDCAN_FILTER_REMOTE, FDCAN_FILTER_REMOTE) != HAL_OK)( m; Q0 m S: ] Y" O* o m( F
- {
# l$ n# x1 Q# L! T - Error_Handler();
) o* o* e. l6 |6 E k - }
3 p2 d5 q" Q3 \6 L - " [. w1 u* j7 A4 ?/ J0 `& K+ i* [
- /* Start the FDCAN module */# v3 u2 E; |. {+ H
- if (HAL_FDCAN_Start(&hfdcan1) != HAL_OK)
2 ?9 T7 I- ~6 I! p7 E6 n$ g1 h- |1 p - {7 i/ d; D# b- h+ q2 z) N; M+ c
- Error_Handler();& B/ k, O! u' V
- }( } `1 m; T% x9 P' N
- : a6 v3 r, N# c! _; p7 C
- if (HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0) != HAL_OK)
/ S% M- K4 J T - {
3 m8 ?; d" {+ k8 K0 Q - Error_Handler();& H$ s! f, [: d! z& j/ B# ^) M; t
- }
, i( v: I% Q- v' g9 W - . w. m/ `8 V/ ^" d
- /* Prepare Tx Header */
) l- J* c( y) T, b1 P& ^" k7 {) G - TxHeader.Identifier = 0x321;, @* N2 |, c& e W1 a! H$ ~
- TxHeader.IdType = FDCAN_STANDARD_ID;$ L/ d' _& S4 }& D" z1 \9 [
- TxHeader.TxFrameType = FDCAN_DATA_FRAME;* T; f4 p/ x" |8 |8 K0 y& U
- TxHeader.DataLength = FDCAN_DLC_BYTES_64;//FDCAN_DLC_BYTES_8;
9 v# q9 K, s. }, f - TxHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
/ p# M* h3 e( d - TxHeader.BitRateSwitch = FDCAN_BRS_ON;0 Z K$ \- E6 y# k
- TxHeader.FDFormat = FDCAN_FD_CAN;//FDCAN_CLASSIC_CAN;3 `5 h* O/ y7 ^; n5 d% F
- TxHeader.TxEventFifoControl = FDCAN_NO_TX_EVENTS;6 D# u: F! s6 I- W; h
- TxHeader.MessageMarker = 0;
复制代码
5 M' i3 Y- f+ g6 k( @% n/ K: e0 }5 d S6 G+ v4 x% R
编译,Debug,通过上位机观看测试数据,接收数据如图3所示:9 [ i7 a, A2 e6 I% a8 R: i# |
" s1 S, T; z% B* A1 l0 T
图3' |4 j7 L8 i5 F7 w" S( ~
发送数据如图4所示:
3 c$ L/ t2 p: }7 |( F
3 A9 c% T( t U9 `! `) Z
图4" S# E# N0 c( N1 a/ U+ N' [: \: \
经过测试,发送和接收正常,调试5Mbps的时候,数据不能连接上,应该是杜邦线的问题。6 |( g' w/ ^5 r7 y. Z) e. M: @
|