0 ^+ E5 w" \1 L6 S7 [1 X 本次测试FDCAN通讯,STM32U3是带FDCAN外设的,功能还是挺强大的。这个外设也是现在项目中常用的通讯方式。- m, k6 J. S; A1 y
通信芯片使用的是自制的TJA1462 模块,这样使用杜邦线连接到FDCAN测试仪,连接到电脑上位机上,就可以进行测试了。
) }+ m6 H+ P9 P$ r0 @) K$ H* b- i 整体连接图如图1所示:
# v' @* k9 G# Z1 V6 o- l
. U8 g u/ @- q3 W1 R9 L, ?
图1) H0 _7 u% C# i# I+ W6 ^
CubeMx 配置如图2所示:
7 N7 U4 e5 e+ i8 f( ^7 @& i6 {! [, O
- o& t n$ r- X, c0 ]+ t
图2# v, `5 n' Y5 Z* o
0 X# U2 v1 F8 u! q/ a FDCAN 配置为 Nominal 帧设置为1Mbps,而数据帧设置为2Mbps,数据选择64个字节。然后生成项目框架。0 C8 p8 m: ^" h& J% D
! _4 P! t4 `; ~' E! }9 l/ J
修改一下程序的发送和接收中断程序,程序配置如下所示:
7 e! L! r0 R8 [" V# M& Z, ^, b- /* Configure Rx filter */
' Q0 l% v3 O, e7 p% P& ~) G9 q. r - sFilterConfig.IdType = FDCAN_STANDARD_ID;
. z0 k2 S4 O' Z: G5 ?/ c$ a - sFilterConfig.FilterIndex = 0;
9 H# ^ U: m5 ?$ e- \2 ] - sFilterConfig.FilterType = FDCAN_FILTER_MASK;9 H7 E; o$ b, I
- sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
# I. O: u5 r8 g! i$ X - sFilterConfig.FilterID1 = 0x123;//receive ID4 |$ {, |+ g6 R9 X, G2 T( c, d
- sFilterConfig.FilterID2 = 0x7FF;
, P- K$ x$ P0 V: \ - if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK)
. _, w$ ~/ b3 @" Z' N* }6 g - {! n8 \" d* g$ E- e5 X
- Error_Handler();
) w7 k- r/ U- e3 b - }, r! N8 i" g2 A/ p4 @1 V# `/ W2 j
- 4 z/ q7 q: r' {$ x& r
- /* Configure global filter:
" Y$ B! [* y' A* i* g+ ?! M - Filter all remote frames with STD and EXT ID
- e' R; y$ l6 v0 v - Reject non matching frames with STD ID and EXT ID */
' b2 H- P8 {, A' M, F% X - if (HAL_FDCAN_ConfigGlobalFilter(&hfdcan1, FDCAN_REJECT, FDCAN_REJECT, FDCAN_FILTER_REMOTE, FDCAN_FILTER_REMOTE) != HAL_OK)
; k' V1 c0 g+ z* M( u( ` - {
9 G y: J; m$ `8 v - Error_Handler();! W4 u. X4 }) ]
- }7 d1 D2 l/ k8 i; ]0 Z/ | C: e
- " o9 ^8 z: S o7 m% @+ X
- /* Start the FDCAN module */+ J; x5 p0 P2 w
- if (HAL_FDCAN_Start(&hfdcan1) != HAL_OK)
3 A1 s' B& A( u6 z% Z6 ]# P& p - {+ z/ x( ~& o* V+ U3 b: A
- Error_Handler();" l" c1 ^# p# C& f# [
- }: u. w; z, |" D- y; h
* Y5 W* }. V, G# y- if (HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0) != HAL_OK)
4 U l3 \! S% \ z - {8 c9 M2 S% N$ T+ z
- Error_Handler();
: y" Y) r* s# ]5 k, n - }4 ]) f+ [/ F5 E
- % {# G1 J- O- {5 C
- /* Prepare Tx Header */& R# _# Q* _ c! V( ~6 d! \, Q
- TxHeader.Identifier = 0x321;% W2 B# U! J: H! K$ ]
- TxHeader.IdType = FDCAN_STANDARD_ID;
y6 x) x$ n0 `& z# V: c - TxHeader.TxFrameType = FDCAN_DATA_FRAME;
$ x& n3 V, d% k; o3 j' v% U - TxHeader.DataLength = FDCAN_DLC_BYTES_64;//FDCAN_DLC_BYTES_8;& d7 P7 j6 ~- \& i2 P- l! P( t
- TxHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;8 L# q8 o! F5 w
- TxHeader.BitRateSwitch = FDCAN_BRS_ON;
4 q! p4 q$ Y7 O0 I3 z - TxHeader.FDFormat = FDCAN_FD_CAN;//FDCAN_CLASSIC_CAN;
& U [4 J8 ]- L5 j. r+ u - TxHeader.TxEventFifoControl = FDCAN_NO_TX_EVENTS;
& j: {# u5 c6 i$ I! o. L - TxHeader.MessageMarker = 0;
复制代码 9 d3 T- u' N5 W+ X6 E
5 P$ f [% X& @8 ^
编译,Debug,通过上位机观看测试数据,接收数据如图3所示:' @4 _8 U. }# L- C- b) T/ d; }
' Z+ y0 k; S6 x+ o- I图3% a8 N* G) |$ \" c
发送数据如图4所示:( E9 _& w8 o% H. X0 t# j& t
X5 I* g% ~+ p' O+ ?* g
图46 h' S1 D( R8 a& g% U& `% t: z
经过测试,发送和接收正常,调试5Mbps的时候,数据不能连接上,应该是杜邦线的问题。4 h/ d; {& z |0 n7 c/ B9 |
|