最近工作有点忙,板卡的学习和测试稍有延迟。这次主要来测试该板卡的FDCAN功能。从datasheet上可以看到H503是有一个FDCAN接口的。这个总线通信接口当前用的比较多,所以需要好好学习和测试。现在FDCAN支持8Mbps,以前采购的芯片最高支持到5Mbps。 又把原来测试IC的部分翻出来,按照Power和Rx,Tx将MCU板卡和通讯部分进行连接,如图1所示:# L% n% ?+ m$ m/ [; l
. C5 o/ p: h$ h( k: ~图1
. g+ p* u2 _# m k 主要用到PB12--CANRx,和PB13--CANTx两个FDCAN1接口,从板图上可以看到接口位置,如图2所示:! C- s& g% D; |
; \3 F, y( o( A$ M+ \$ V" Y- Y4 C图2
8 I- k7 O- b7 D4 H; ]4 i- w0 |0 s: l8 p1 n
好了,言归正传。下载的官方资料里并没有这部分的例程,所以测试思路基本还是先用Cubemx生成基本配置,其他接收滤波配置和发送配置再自己添加。H503是支持250MHz主频的。所以FDCAN的时钟也配置位250MHz,如图3所示: K# c; C* L ?2 O' C! K
R1 l: z) S; X+ b3 ^5 {7 X$ M& u图3 |) P( P2 `/ a3 j1 G& y
% b! @0 G8 Y* r3 Z2 n7 ]+ l- ~ FDCAN部分采用正常波特率位1Mbps,数据波特率位2Mbps。其基本配置如图4所示:+ |! j* A& G c
% X* S/ w0 q$ \6 O# I, |
图4
, B C% ^6 q% R! g* i 正常生成代码后,添加接收部分设置和发送部分设置,参考代码如下所示:+ ~: m3 v1 g: C
- FDCAN_FilterTypeDef sFilterConfig;
1 H7 a; i; _- N. r! U) X - ! n) h8 {, d- ~; `: u5 b8 c
- /* Configure Rx filter */6 x% g( }- c ?5 [
- sFilterConfig.IdType = FDCAN_STANDARD_ID;
4 U3 j, u9 @+ p, v% G" d# ?0 f - sFilterConfig.FilterIndex = 0;
5 }( S7 @) d6 U5 v: d - sFilterConfig.FilterType = FDCAN_FILTER_MASK;
: @0 }/ \) e7 R! Z - sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;* d) ~/ Z- T6 p; d; ~ ~( k4 z9 V
- sFilterConfig.FilterID1 = 0x123;//receive ID0 l7 d8 L) j+ o. @1 l7 s' @. G. I
- sFilterConfig.FilterID2 = 0x7FF;
8 b9 r. ]' ~& | K+ c/ X/ m8 ]: J - if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK)
, N6 H1 J I f; q' j7 Z - {; x; Y1 c( }% h1 G' v0 c1 x; g
- Error_Handler();' i0 b9 ?( Q9 v! O6 O0 Y4 t1 y6 l
- }+ f, d+ Q- s7 {
- ! h7 q0 b, h2 q2 e9 ?, p- |
- /* Configure global filter:
* O. Z+ I1 y8 w* B2 C) \ - Filter all remote frames with STD and EXT ID
1 Z ?( S; ~5 \ Q* A2 p( d4 b! x0 i - Reject non matching frames with STD ID and EXT ID */
* Z2 ?% J+ B* ~0 @8 @- y6 D - if (HAL_FDCAN_ConfigGlobalFilter(&hfdcan1, FDCAN_REJECT, FDCAN_REJECT, FDCAN_FILTER_REMOTE, FDCAN_FILTER_REMOTE) != HAL_OK)
# R; g5 p/ t* a r, c1 k, G# Y - {$ L6 y ]$ ]4 s3 S/ I0 q
- Error_Handler();
+ a3 A5 _ J) c7 e. o+ I5 y( g& N* ~ - }
+ O u9 E( F. F ]. Q - 5 h& K- d2 r" ]+ w* H
- /* Start the FDCAN module */
( e" z p5 a2 O, e5 |; j5 K - if (HAL_FDCAN_Start(&hfdcan1) != HAL_OK)
0 Z3 z0 O3 z# D: V: ]% v4 v - {
) ^( v/ x, A! w* m6 ~- } - Error_Handler();! C- c2 R7 I" L7 \( Z) K% P
- }0 `, n& f. `$ J2 O
! B. c* A2 H! L5 a6 r) \- if (HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0) != HAL_OK)) N! Y$ n7 ~, b" }" ^
- {
, f' h, S' C& a - Error_Handler();# F: [/ e% e/ i' L; R2 N4 ]$ }. S! l
- }
复制代码- if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &TxHeader, TxData) != HAL_OK)
5 M5 x% I( T4 g - {
7 k4 w1 Y. \8 v& S# }$ A - /* Transmission request Error */: m) _$ g* T$ b- L2 R% W
- Error_Handler();2 e1 j0 k. p# @0 s0 B V
- }3 S9 @; f% @& w3 v J
- HAL_Delay(1000);
复制代码 * Z& |5 b5 l' ~0 L! U
5 ]& {0 R4 f/ ?/ d, X/ z+ V- i1 y2 }% q2 S8 u
上位机测试软件正常接收,如图5所示:9 f! i$ F6 n- P& E- A' h
) w, f# h ]$ @. |, Z+ A% I$ o! t0 f图5- j# i7 A7 F7 M+ C# z! x
但是接收中断没有执行,故接收callback函数也没有执行到。暂时还没找到事故原因,配置应该都是正常的。找到原因后,再补充这部分。( J' {* g0 p3 M
|
学习一下