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

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

[复制链接]
zero99 发布时间:2016-6-21 17:47
STM32 基于 Nucleo板 CAN总线的建立

  o! X8 F! I5 S  I; b5 K前言
  i/ I8 G  Y" V/ R% A* C# pSTM32 NUCLEO开发平台是ST最新发布的易用性好、可扩展性佳的低成本平台。开发平台具有mbed功能支持Arduino接口,同时还提供ST Morpho扩展排针,可连接微控制器的所有周边外设,可以利用Arduino巨大生态系统优势,便于快速实现STM32学习和评估! 这儿我们评估它的CAN外设功能。
0 ]% ?( O. F0 D. n, H$ d- P7 i" l* S8 V1 [# w0 p
一、环境搭建/ y& h$ f/ \0 {; n+ i# P  T& W+ w6 q
1、软件:
! Q& C; H, `- q" n) K9 N: ?1 l; hSTM32Cube\Repository\STM32Cube_FW_F1_V1.3.0\Projects\STM3210E_EVAL\Examples\CAN\CAN_Networking\EWARM, n' j/ T) a' y) _  Z! A% o
2、硬件:  u+ Q1 O  c0 b9 q" |3 }! `. ?
NUCLEO-F103RB(STM32F103RBT6)
7 k+ V, R# ~  X( t7 l% R& y3、原理图如下:3 \9 J' q: e# g5 l* u
11.jpg
# ?: B; n3 f: k$ s' h4 S+ W- l上面原理图是针对SN65HVD230的,! |) ]. Z" X1 s# F: _
因为PB8是CAN_TX,是MCU端的发送,需要到CAN transfer的输入引脚,即引脚D(Driver input);
# K' o: q* R5 t因为PB9是CAN_RX,是MCU端的接收,是CAN transfer的输出引脚,即引脚R(Recv output);
3 a+ I9 F! {% }0 }2 q
12.jpg % ~' a7 ], Q  [
9 y7 N6 q1 ^, N2 T
7 {* l- d7 {6 M6 M5 q' y5 J. v9 A. `
二、Porting# Q, k$ ~2 J& O  e9 d% z; R8 A
由于参考的是STM3210E_EVAL的示例程序,在用到STM32F103RBT6的Nucleo板子上的时候,需要做一些porting的工作。+ P, E1 \+ P1 K
1、系统时钟) ^% D% b) z  ]4 B8 p
在10E的EVAL板子上,使用的是HSE,而Nucelo上默认的是没有焊接HSE,所以使用到的是HIS;利用CubeMX生成代码:系统时钟为36MHz;9 P$ Z- C) Z$ h5 V
13.jpg * @$ |( K1 D5 n7 z1 l8 l
供给CAN外设的时钟:是APB1的时钟18MHz;- i( E  J7 V: G: X) H5 j- K
14.jpg 2 j* F8 q% H  g* |2 n3 j2 u! W
2、CAN的接收/发送引脚
7 U5 ]' d, w0 q7 I5 A! `仍然可以都为PB8 (TX) 和PB9 (RX) ,不需要改变;  o' h0 G$ R9 a0 f( M7 Q
3、CAN的波特率3 \: ]  O& M7 S1 x9 p; ~% d
(自己想设置的是500K):5 F9 g% C7 U: M, J4 I" K
15.jpg - A: _+ g# r' }
16.jpg
9 P' [% s. n4 e) q. U5 |  O
17.jpg
4 \0 {3 d8 h' O% J3 @( R7 `所以,理论上,根据计算公式,2 B; X7 Z4 x0 n
NominalBitTime = 1 × tq + tBS1 + tBS2 = (TS1[3:0] + 1 + TS2[2:0] + 1 + 1)* (BRP[9:0] + 1) x tPCLK;; A# O! z0 ^0 O2 H
所以,NominalBitTime = 9* 4* tPCLK; = Freq(APB1)/36 = 18/36 = 0.5MHz = 500K;; h2 S9 K. q; \
4、User部分7 k4 C5 k- u8 `' I8 Z
程序中设计到:
1 l8 S: s7 X# s! E6 A6 v' h
18.jpg 8 g+ g- {  K1 H0 E/ d. z& ^( x6 U
在10E-EVAL板子上,用到的是PG.08,而在nucleo上使用到的是PC.13
) C( U: b- w  c
19.jpg & m' J" c% E" c% j' S: H  W2 _4 n
20.jpg
+ _0 C3 K* s& }' s5 R至此,移植好了;
8 D: K! n6 N$ p, X8 \& t- J$ _8 ~; n) t3 i2 U; W0 E! F
三、全速运行- c0 o9 H! r3 D' x
1、按下USER Button,会发出CAN 报文,CAN的PC端软件能够收到。
' }2 K+ p3 o) R/ f3 \1 F% j% f
21.jpg
" h- }& ]! z) U' u2、CAN的PC端软件发送报文,软件中的中断函数也会进入中断。
: ^, h6 W1 H% \0 B, g- W
22.jpg
( z" V2 |! F3 q5 y; K+ P6 Q说明,CAN的发送和接收这一基本的操作已经完成了。对于CAN的复杂的运用特点,可以在该基础上进一步衍生。1 W/ I. @0 g4 u9 Y

6 R) z5 V, W! o0 s; R' v附录:
7 q; l+ [. r$ w' T! R5 L6 T+ h1、针对现有的CAN的总线协议:在数据区域只有固定的8Byte;也就是说一个CAN报文发送的数据只有8个,我们的单片机的寄存器也只提供了8个寄存器,符合当前的CAN的协议;如果客户想发送多个>8的数据,需要在其上层协议中,用软件去多次发送。也许在下一代的CAN总线中,会对这一特点进行改变。' h' q2 C  Q! f7 B8 t/ M
23.jpg 7 L6 I/ d) H% J; C" s
2、CanHandle.Init.NART = ENABLE的说明;
: |) V) x# c3 \: ~2 ]在基于"STM32Cube_FW_F4_V1.10.0
3 X  a! p& \& q/ N5 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 be0 q" E5 T5 Z* x  p4 s
acknowledged by the receiver ,而正我们的环境中,只有一块板子,而没有receiver。
! l" ]6 ?7 {& y- B- D# b8 H7 C$ N9 [6 }  p6 j$ [
- }0 w3 N1 w' |- }

4 w+ g- }* W: s. d5 E' Q- T5 V文档下载地址:3 k! ]9 F3 T$ F' u6 D  F
https://www.stmcu.org.cn/document/list/index/category-999
. c* q* S8 v  L: b* W实战经验汇总:' y  d, d, z+ l5 `$ {4 Y6 l
https://www.stmcu.org.cn/module/forum/thread-576401-1-1.html; {0 m. v! [2 Y& S+ Q
赞 收藏 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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版