你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【实战】STM32 基于Nucleo板CAN总线的建立

[复制链接]
zero99 发布时间:2016-6-21 17:47
STM32 基于 Nucleo板 CAN总线的建立
7 p7 n. V; x! |0 t2 @
前言
: L* X8 o' p- ]8 PSTM32 NUCLEO开发平台是ST最新发布的易用性好、可扩展性佳的低成本平台。开发平台具有mbed功能支持Arduino接口,同时还提供ST Morpho扩展排针,可连接微控制器的所有周边外设,可以利用Arduino巨大生态系统优势,便于快速实现STM32学习和评估! 这儿我们评估它的CAN外设功能。
2 f, l6 T. r3 |9 {
5 q9 `, u% ?" G1 r/ K一、环境搭建
4 t: M6 g8 l7 s5 Y8 x! ^/ _5 W1、软件:
% v1 l" k4 s6 F5 Y1 m" g6 N9 `STM32Cube\Repository\STM32Cube_FW_F1_V1.3.0\Projects\STM3210E_EVAL\Examples\CAN\CAN_Networking\EWARM
9 s8 x7 L: H1 K0 }4 W- |2、硬件:" Z3 c7 P& i3 _7 o8 P: H7 ~$ u
NUCLEO-F103RB(STM32F103RBT6)5 P7 K! o6 I& h8 D) d. b, k1 v
3、原理图如下:
# \0 b  ~9 p0 `4 P
11.jpg - F( D( Y9 Q- d* A) ]
上面原理图是针对SN65HVD230的,8 a; ^) v4 A* B
因为PB8是CAN_TX,是MCU端的发送,需要到CAN transfer的输入引脚,即引脚D(Driver input);
" n- F8 x1 G% z因为PB9是CAN_RX,是MCU端的接收,是CAN transfer的输出引脚,即引脚R(Recv output);- g) R. j, e. S  P- I
12.jpg 0 {' I" F5 f" m/ H. M/ S1 s! n9 A5 z
/ l5 C3 t4 s2 C) t. r# a
1 |; z) R4 |! q) E7 ]; W2 |
二、Porting
9 a1 o  t. n, t由于参考的是STM3210E_EVAL的示例程序,在用到STM32F103RBT6的Nucleo板子上的时候,需要做一些porting的工作。5 r$ ?; C3 x; g# F8 H! r* s9 I
1、系统时钟8 _: W6 E1 R  r: y
在10E的EVAL板子上,使用的是HSE,而Nucelo上默认的是没有焊接HSE,所以使用到的是HIS;利用CubeMX生成代码:系统时钟为36MHz;
; C) K* B+ ?0 S4 u. L
13.jpg . M; e: ?3 g3 U6 c$ I
供给CAN外设的时钟:是APB1的时钟18MHz;8 h3 a4 I# @* |7 O
14.jpg
( H0 z9 \+ h  n+ ^$ i( {' O2 K! F2、CAN的接收/发送引脚+ y# r0 D! {8 L, F& M- R- Y$ ~
仍然可以都为PB8 (TX) 和PB9 (RX) ,不需要改变;# Q4 N0 z3 a- b3 {. c$ h$ q
3、CAN的波特率
6 d6 j. E6 M; Z# A" |( O, ~(自己想设置的是500K):
, q# ]( p4 b( j' r5 `  M
15.jpg
3 |% e; [/ k6 f7 e
16.jpg ) k4 f. b) |8 O$ A0 W' M7 ?
17.jpg ( {$ s; m. D# d4 f3 a* v
所以,理论上,根据计算公式," S- h9 H% l! @+ u
NominalBitTime = 1 × tq + tBS1 + tBS2 = (TS1[3:0] + 1 + TS2[2:0] + 1 + 1)* (BRP[9:0] + 1) x tPCLK;
, B& k) d5 E) L4 K. S6 ~/ x所以,NominalBitTime = 9* 4* tPCLK; = Freq(APB1)/36 = 18/36 = 0.5MHz = 500K;0 i9 G+ M9 Z4 m
4、User部分# [% ?* k4 M- q- V# s
程序中设计到:$ o* |" x8 F* z% Z
18.jpg
# y7 P' A( G. l3 t! w- `% u; W在10E-EVAL板子上,用到的是PG.08,而在nucleo上使用到的是PC.13/ I& H0 ?4 c+ V
19.jpg
+ V. o( h$ E: b/ k
20.jpg . I6 |$ p/ l) U0 h( [
至此,移植好了;
4 w' F4 H2 |) {# d( L) {* X% n+ r6 E; M1 z) m
三、全速运行
$ H7 a. l+ W0 ^& U8 V1、按下USER Button,会发出CAN 报文,CAN的PC端软件能够收到。
, h1 k2 K7 k/ ^' f
21.jpg
) U: E9 n# F8 T( b  p* H" \2、CAN的PC端软件发送报文,软件中的中断函数也会进入中断。1 I; @7 @' _% d6 h+ \8 w
22.jpg
: N4 S" g' F" [- k4 p说明,CAN的发送和接收这一基本的操作已经完成了。对于CAN的复杂的运用特点,可以在该基础上进一步衍生。
( O8 o5 f( ~2 [/ f
) B4 m$ ?$ ~5 I- R5 T: ]+ `: a; ~附录:# m4 D3 q& {' ^
1、针对现有的CAN的总线协议:在数据区域只有固定的8Byte;也就是说一个CAN报文发送的数据只有8个,我们的单片机的寄存器也只提供了8个寄存器,符合当前的CAN的协议;如果客户想发送多个>8的数据,需要在其上层协议中,用软件去多次发送。也许在下一代的CAN总线中,会对这一特点进行改变。
+ @* h( p( ?3 [
23.jpg
. Q' y$ I$ m: ^- g' t& c& o
2、CanHandle.Init.NART = ENABLE的说明;
% l, p4 o$ D" |! K在基于"STM32Cube_FW_F4_V1.10.0  K+ U" o) y9 A* j8 T2 S
\Projects\STM324x9I_EVAL\Examples\CAN\CAN_Networking" , 如果只用一块STM32F429-EVAL调用HAL_CAN_Transmit()的发送函数,会发现CAN Controller会不断的发送数据, 这是因为在我们提供的示例中,是需要两块板子互联的,在CAN协议中,如果消息没有被正确的接收,它将会be retransmitted infinitely by the transmitter until it will be! x; m- H! V5 Z, v# X! W- ^
acknowledged by the receiver ,而正我们的环境中,只有一块板子,而没有receiver。
( V0 \4 b# M2 ~1 |. h0 o. N
$ ?! F$ d1 ]0 K" O
  F, m5 p+ s9 {  j" r4 u0 l

/ K: L4 b! m1 @: o; e" p文档下载地址:% E0 ^$ |6 r& q: t! Z# Q
https://www.stmcu.org.cn/document/list/index/category-9995 C0 a$ Q$ P5 p9 A' q
实战经验汇总:
) C* C8 C2 L9 {https://www.stmcu.org.cn/module/forum/thread-576401-1-1.html
0 U1 U2 k$ t) m6 g1 o2 s
收藏 3 评论9 发布时间:2016-6-21 17:47

举报

9个回答
Lumhao 回答时间:2016-6-27 15:38:10
wofei1314 回答时间:2016-10-25 15:22:08
还没用的,提前过来学习
zhulikai 回答时间:2016-10-26 10:58:10
andypanfan 回答时间:2016-10-26 12:33:12
:lol
cuyebiren 回答时间:2016-10-26 14:18:06
楼主用的什么编译器?没见过啊。IAR?
wdshuang09 回答时间:2016-10-27 12:15:08
                        
andypanfan 回答时间:2016-12-17 22:21:14
5265325 回答时间:2016-12-18 10:16:46
格列佛 回答时间:2016-12-18 10:33:10
签到了               

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版