7 z0 a# E, N3 } H3 z/ {/ `
本次测试FDCAN通讯,STM32U3是带FDCAN外设的,功能还是挺强大的。这个外设也是现在项目中常用的通讯方式。: |* Z8 v% }: t4 _) N' I7 o1 t
通信芯片使用的是自制的TJA1462 模块,这样使用杜邦线连接到FDCAN测试仪,连接到电脑上位机上,就可以进行测试了。$ z2 J0 S+ i0 h+ P
整体连接图如图1所示:
+ z& B. U7 C6 o* q; W6 ?
; {$ d3 S. Z* A# {6 Z5 R
图1
! O# W& D: M. `# z1 y& T7 Q CubeMx 配置如图2所示:+ f- r' E/ w" Z, T6 Y
' ^, d J" w' x图2& u% o3 V7 ?2 K2 u6 T
$ P$ x. m7 d+ R: V& c5 |
FDCAN 配置为 Nominal 帧设置为1Mbps,而数据帧设置为2Mbps,数据选择64个字节。然后生成项目框架。
* ]% K, {2 F* `- t8 ~0 [- s1 `+ x3 q" y/ ~) c
修改一下程序的发送和接收中断程序,程序配置如下所示:
# h o# K9 a# A3 N% o+ A- /* Configure Rx filter */
& ^' D1 K& t& E+ H8 _* w - sFilterConfig.IdType = FDCAN_STANDARD_ID;3 B5 Q9 M" B; h/ f, ]
- sFilterConfig.FilterIndex = 0;3 E# g$ Y x" l9 W( i
- sFilterConfig.FilterType = FDCAN_FILTER_MASK;
4 m% R) A T, K2 j9 V! w - sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
' ?" `8 v- a) p( ~ - sFilterConfig.FilterID1 = 0x123;//receive ID" ^& P+ w4 I! Q& X# I: W
- sFilterConfig.FilterID2 = 0x7FF;% {$ W3 }! K9 ]* ~+ D# ]0 J$ _+ ]7 z
- if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK)! f) L1 T4 \7 |
- {
+ E- R, ?& ?2 Z( H! E5 Q, }& V D - Error_Handler();
0 h" |# `2 _4 R - }# a- ^* f; W% W7 S3 Z6 t9 n
- / t" V& R2 i" M" Y U% d5 }
- /* Configure global filter:
& Q1 g& N# i% s2 f5 p, i; i - Filter all remote frames with STD and EXT ID
0 I7 N/ W$ {( Y: @, o3 M8 p - Reject non matching frames with STD ID and EXT ID */# B! j! {+ g- i h1 E
- if (HAL_FDCAN_ConfigGlobalFilter(&hfdcan1, FDCAN_REJECT, FDCAN_REJECT, FDCAN_FILTER_REMOTE, FDCAN_FILTER_REMOTE) != HAL_OK)
- g7 B' B: \2 ] O# S - {/ d0 I) a$ Y' {. R
- Error_Handler();
) z! I/ L1 D O0 O - }' Y) W7 m6 w0 Q( V
- 8 Q0 b* U7 E% K+ I9 t* D3 Y
- /* Start the FDCAN module */
( E; u9 _- V" | - if (HAL_FDCAN_Start(&hfdcan1) != HAL_OK)
6 X; N" N% V$ {" A - {
" M! X, N5 U0 x+ o - Error_Handler(); k8 r" j* s! M( ]: v. O
- }
5 M" B; [$ p) Q9 Q: q2 a. h7 l
' N6 `! b( Q7 _, _- if (HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0) != HAL_OK)# k9 z6 j/ x+ Z2 i' z
- {" P6 y% q8 L! `, `
- Error_Handler();+ x$ b5 ?/ t; |+ F; n4 L
- }
5 i* w f/ g" G. B3 y% I; q2 _$ o5 ?
3 h+ Z. d4 h4 b8 S- /* Prepare Tx Header */5 C) |' ~5 o/ G M$ i
- TxHeader.Identifier = 0x321;9 [% k+ }7 y/ w
- TxHeader.IdType = FDCAN_STANDARD_ID;5 h/ t+ Y) P7 V# b: ` b6 h
- TxHeader.TxFrameType = FDCAN_DATA_FRAME;
/ B* ?; ?7 z" L( j, w0 { - TxHeader.DataLength = FDCAN_DLC_BYTES_64;//FDCAN_DLC_BYTES_8;
9 [! W" T1 q# S) K; c" b - TxHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
. @( o" F8 C) M o - TxHeader.BitRateSwitch = FDCAN_BRS_ON;* p: ~: S( n, k/ c P$ |
- TxHeader.FDFormat = FDCAN_FD_CAN;//FDCAN_CLASSIC_CAN;: m. S8 k+ G8 N) J: U
- TxHeader.TxEventFifoControl = FDCAN_NO_TX_EVENTS;* v" M/ I b, n' N, P8 v0 _& e
- TxHeader.MessageMarker = 0;
复制代码 , i- B+ I/ B7 F5 _! g$ g8 i
$ Y% o- N& ?( J2 n, I2 H. J1 s 编译,Debug,通过上位机观看测试数据,接收数据如图3所示:
+ P( r4 p: g7 ~
$ E9 a- K1 M9 ^( h$ P; w9 q图3" u5 a: S$ D; @) R
发送数据如图4所示: _ S* ^( X+ \& r8 b0 v
. C! F0 W/ ~2 e8 [! F2 t图4+ f& K( L$ f: f C( _! m, c
经过测试,发送和接收正常,调试5Mbps的时候,数据不能连接上,应该是杜邦线的问题。/ C. f6 ^" Z/ q% W. \7 K7 K
|