1.引言
STM32有很多系列,本文章介绍使用的为高性能的M7,基于Cortex-M7内核,工作频率高达216MHz。STM32软件编程使用MDK5,MDK源自德国KEIL公司,目前最新版本为MDK5.34,该版本使用µVision 5 IDE集成开发环境。安装完MDK后,还要安装STM32F7的包安装器(Software Packs):Keil.STM32F7XX_DFP.2.7.0.pack。STM32提供了完整的HAL库(STM32硬件抽象层API),只需要了解这些API函数的用法即可,就可以进行高效率开发。
CAN通信网络是一种遵循ISO11898标准的高速、短距离“闭环网络”,它的总线最大长度为40m,通信速度最高为1Mbps。CAN通信节点由一个CAN控制器及CAN收发器组成。
2.硬件实现
2.1 CAN收发器TJA1050
TJA1050是控制器区域网络(CAN)协议控制器和物理总线之间的接口。该器件为总线提供差分发射能力并为CAN控制器提供差分接收能力。完全兼容ISO11898标准,电磁辐射(EME)极低,未通电的节点不会干扰总线线路,输入电平兼容3.3V和5V器件,差分接收器具有宽共模范围,实现了高电磁抗扰性(EMI),至少可连接110个节点。
2.2 CAN通信电路设计
STM32F7作为CAN控制器,TJA1050作为CAN收发器,加上供电电路,STM32时钟/复位电路、程序下载电路等最小系统,构成整个CAN总线通信电路。
TJA1050是控制器区域网络(CAN)协议控制器和物理总线之间的接口。该器件为总线提供差分发射能力并为CAN控制器提供差分接收能力。完全兼容ISO11898标准,输入电平兼容3.3V和5V器件,差分接收器具有宽共模范围,实现了高电磁抗扰性(EMI),至少可连接110个节点。图1 CAN总线电路图
3.软件实现
3.1协议层
CAN协议具有5种类型的帧:数据帧、遥控帧、错误帧、过载帧、间隔帧;数据帧和遥控帧有标准格式和扩展格式。标准格式有11个位的标识符(ID),扩展格式有29个位的标识符(ID)。数据帧一般由7个段构成:帧起始、仲裁段、控制段、数据段、CRC段、ACK段、帧结束。
3.2软件设计
打开MDK,建立基于HAL库的工程(方法略)。HAL库中CAN相关的函数在文件stm32f7xx_hal_can.c和对应的头文件stm32f7xx_hal_can.h中。
1.设置PA11(CAN1_RX)和PA12(CAN1_TX)为复用功能(AF9),并使能PA口时钟:
_HAL_RCC_CAN1_CLK_ENABLE();//使能CAN1
_HAL_RCC_GPIOA_CLK_ENABLE();//开启GPIOA时钟
2.设置波特率:
CAN1_Mode_Init(CAN_SJW_1TQ,CAN_BS2_6TQ,CAN_BS1_11TQ,6,CAN_MODE_LOOPBACK);//CAN初始化环回模式,波特率500Kbps
3.设置模式
CAN1_Handler.pTxMsg->StdId=0X12;//标准标识符ID
CAN1_Handler.pTxMsg->IDE=CAN_ID_STD;//使用标准帧
CAN1_Handler.pTxMsg->RTR=CAN_RTR_DATA;//数据帧
4.发送数据
data=CAN1_Send_Msg(canbuf,8);//发送8个字节
5.接收数据
rec=CAN1_Receive_Msg(canbuf);//接收数据
4. 结束语
在本项目开发中,核心部件为意法半导体的STM32F7和恩智浦的TJA1050, ST为用户提供了丰富的HAL库函数,用户只需了解相应的库函数功能,就可以进行相应开发,该设计实现方法适合于汽车电子、航空航天、导航定位、学习开发、工业控制等各领域,在实际开发过程中,可以根据实际情况进行借鉴。
参考文献
【1】 刘火良 杨森.STM32库开发实战指南.北京:机械工业出版社,2017.2
【2】 杨余柳 张叶茂 伦砚波.基于ARM Cortex-M3的STM32微控制器实战教程(第二版).北京:电子工业出版社,2017.9