最近工作有点忙,板卡的学习和测试稍有延迟。这次主要来测试该板卡的FDCAN功能。从datasheet上可以看到H503是有一个FDCAN接口的。这个总线通信接口当前用的比较多,所以需要好好学习和测试。现在FDCAN支持8Mbps,以前采购的芯片最高支持到5Mbps。 又把原来测试IC的部分翻出来,按照Power和Rx,Tx将MCU板卡和通讯部分进行连接,如图1所示:' {- |8 g0 Z' J4 }$ T) f
; {. S' ~/ S- M图1
0 Z, K' X; B4 m 主要用到PB12--CANRx,和PB13--CANTx两个FDCAN1接口,从板图上可以看到接口位置,如图2所示:
, z {) R$ r7 v( G5 F8 M
: S P- m0 x4 m% P
图2# y/ @& j# X, i6 X
- l0 P5 B" V8 K7 N 好了,言归正传。下载的官方资料里并没有这部分的例程,所以测试思路基本还是先用Cubemx生成基本配置,其他接收滤波配置和发送配置再自己添加。H503是支持250MHz主频的。所以FDCAN的时钟也配置位250MHz,如图3所示:/ Z3 @6 F" Z6 @( l
" |/ X: w% Y# e, C) L
图3
8 J% t/ x% j9 p& f5 Z+ l7 B. [0 a, z# D
FDCAN部分采用正常波特率位1Mbps,数据波特率位2Mbps。其基本配置如图4所示:
0 m; p% f! ^, y8 H9 k6 }1 ~
7 [( Y$ x- d4 [+ k图4
3 r0 A* K7 N" T$ B# T, ~1 t: _+ O9 Q 正常生成代码后,添加接收部分设置和发送部分设置,参考代码如下所示:+ e, V2 h$ {, V# B
- FDCAN_FilterTypeDef sFilterConfig;# C+ v* H/ g7 J1 I: f; A
- : Z0 e2 P3 S. p' k
- /* Configure Rx filter */
3 b. V8 S: @% I0 Y. e- p+ w - sFilterConfig.IdType = FDCAN_STANDARD_ID;5 S! L" |! I) Z }, {) O
- sFilterConfig.FilterIndex = 0;
: `+ x. m5 P4 a, T - sFilterConfig.FilterType = FDCAN_FILTER_MASK;' \0 a( l/ M- V
- sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
: K4 r% t1 Y6 t5 y, y - sFilterConfig.FilterID1 = 0x123;//receive ID
, ]- L" w1 P" ]* z- y - sFilterConfig.FilterID2 = 0x7FF;+ W) T- e9 e, U r
- if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK)0 G9 L; E1 C3 k8 }) O3 C
- {
4 U. B2 |9 R) T5 l% G5 { - Error_Handler();
5 A) c4 v0 T2 p+ T+ B f - }8 G8 W# s" e* [) r7 \# c
1 i& ]4 A7 d. _- l; N- /* Configure global filter:
, J8 h/ O" D/ J" a1 N - Filter all remote frames with STD and EXT ID# }' [7 E7 Q2 t/ C
- Reject non matching frames with STD ID and EXT ID */* ]( ?/ U* f# F9 h; V' F
- if (HAL_FDCAN_ConfigGlobalFilter(&hfdcan1, FDCAN_REJECT, FDCAN_REJECT, FDCAN_FILTER_REMOTE, FDCAN_FILTER_REMOTE) != HAL_OK)
! T& J, l8 x% n: \/ h& \( ?9 G. ~ - {
/ P( E; O' K. E G6 K - Error_Handler();/ e' u8 ^$ S1 P! d
- }, @* B+ L) ?) ^1 `% S* y+ ?: B
- % V4 p5 \' p ^
- /* Start the FDCAN module */, j3 s# ]& j" L
- if (HAL_FDCAN_Start(&hfdcan1) != HAL_OK)- B# h0 B2 M. l
- {
2 c. y9 [3 k" i7 T- S1 P - Error_Handler();
1 d# d& p+ A0 G" H9 I# c: t - }* {7 r) r. ]* O5 n% k
& @5 `/ x3 l* ]# R. B4 ^2 N0 F' |% d- Q- if (HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0) != HAL_OK)$ i' u I! E2 C. d9 F
- {
* d( C, o( C7 W/ W' J - Error_Handler();
( p: l0 W, `$ n! `9 m$ P5 Z - }
复制代码- if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &TxHeader, TxData) != HAL_OK), q; E1 n7 u [$ [- K% M8 S
- {$ A1 }, U; Z& ]9 B
- /* Transmission request Error */
5 z: A- \. k; v* m9 {! ]3 c - Error_Handler();
8 O8 f2 ` T( n" [8 G) ]) k7 q - }- s1 f; y. H( U9 u8 g3 v: A2 e) o/ t
- HAL_Delay(1000);
复制代码
5 x8 u* w8 [/ e4 D( I( P; {0 o# R- u) R1 ?
# P# o$ R% q: `* @4 n+ |" o/ ? 上位机测试软件正常接收,如图5所示:
9 o1 r0 j: O+ i8 w/ y3 h
7 e+ c) f# u% h' l! B% v
图53 y/ h2 S5 U- D$ {9 T
但是接收中断没有执行,故接收callback函数也没有执行到。暂时还没找到事故原因,配置应该都是正常的。找到原因后,再补充这部分。" |4 W+ h3 A* r. e/ O8 k# [
|
学习一下