STM32 基于 Nucleo板 CAN总线的建立 7 p7 n. V; x! |0 t2 @前言 STM32 NUCLEO开发平台是ST最新发布的易用性好、可扩展性佳的低成本平台。开发平台具有mbed功能支持Arduino接口,同时还提供ST Morpho扩展排针,可连接微控制器的所有周边外设,可以利用Arduino巨大生态系统优势,便于快速实现STM32学习和评估! 这儿我们评估它的CAN外设功能。 一、环境搭建 1、软件: STM32Cube\Repository\STM32Cube_FW_F1_V1.3.0\Projects\STM3210E_EVAL\Examples\CAN\CAN_Networking\EWARM 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、原理图如下: 上面原理图是针对SN65HVD230的,8 a; ^) v4 A* B 因为PB8是CAN_TX,是MCU端的发送,需要到CAN transfer的输入引脚,即引脚D(Driver input); 因为PB9是CAN_RX,是MCU端的接收,是CAN transfer的输出引脚,即引脚R(Recv output);- g) R. j, e. S P- I / l5 C3 t4 s2 C) t. r# a 1 |; z) R4 |! q) E7 ]; W2 | 二、Porting 由于参考的是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; 供给CAN外设的时钟:是APB1的时钟18MHz;8 h3 a4 I# @* |7 O 2、CAN的接收/发送引脚+ y# r0 D! {8 L, F& M- R- Y$ ~ 仍然可以都为PB8 (TX) 和PB9 (RX) ,不需要改变;# Q4 N0 z3 a- b3 {. c$ h$ q 3、CAN的波特率 (自己想设置的是500K): 所以,理论上,根据计算公式," 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; 所以,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 在10E-EVAL板子上,用到的是PG.08,而在nucleo上使用到的是PC.13/ I& H0 ?4 c+ V 至此,移植好了; ) {* X% n+ r6 E; M1 z) m 三、全速运行 1、按下USER Button,会发出CAN 报文,CAN的PC端软件能够收到。 2、CAN的PC端软件发送报文,软件中的中断函数也会进入中断。1 I; @7 @' _% d6 h+ \8 w 说明,CAN的发送和接收这一基本的操作已经完成了。对于CAN的复杂的运用特点,可以在该基础上进一步衍生。 附录:# m4 D3 q& {' ^ 1、针对现有的CAN的总线协议:在数据区域只有固定的8Byte;也就是说一个CAN报文发送的数据只有8个,我们的单片机的寄存器也只提供了8个寄存器,符合当前的CAN的协议;如果客户想发送多个>8的数据,需要在其上层协议中,用软件去多次发送。也许在下一代的CAN总线中,会对这一特点进行改变。 2、CanHandle.Init.NART = ENABLE的说明; 在基于"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。 F, m5 p+ s9 { j" r4 u0 l 文档下载地址:% E0 ^$ |6 r& q: t! Z# Q https://www.stmcu.org.cn/document/list/index/category-9995 C0 a$ Q$ P5 p9 A' q 实战经验汇总: https://www.stmcu.org.cn/module/forum/thread-576401-1-1.html |
还没用的,提前过来学习 |
:lol |
楼主用的什么编译器?没见过啊。IAR? |
顶 |
签到了 |