1
本篇笔记主要介绍,如何在STM32F446XXX系列上实现SAEJ1939协议,基于STM32F446ZENUCLEO开发板,使用IAR作为软件开发环境。
1,熟悉SAE J1939标准,熟悉ST STM32Cube_FW_F4_V1.21.0结构和接口以及例程
2,装有IAR的电脑
3,带有CAN 收发器的板子,因为开发板上的只有CAN接口,不带收发器,我们采用外接引入收发器挂在开发板上,收发器芯片使用的是SN65HVD232D
2
ST官方提供Cube帮助工程师快速开发产品原型,类似于软件SDK,包含所有外设驱动,还有例程,之前多次讲过在NXP平台芯片上做J1939协议栈,如果熟悉J1939的话会很容易移植到ST芯片上。
我们以开发包的下面路径的例程为基础来搭建工程,这是一个基于Timer的例程,我们构建一个1ms时基来做为系统运行的基础。
3
工程实现,
因为要用到CAN驱动,所以我们添加Hdl_CAN.h和Hdl_CAN.h来配置和实现一些函数,关于CAN例程和如何初始化可以参考下面路径的这个回环例程。
在建好的工程里在void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan)函数中初始化CAN时钟,管脚,使能发送,接收中断,等其他错误检测中断。
在我们建立的Hdl_CAN.c中实现CAN的配置和初始化,主要有模式,波特率参数,滤波参数,启动CAN外设等。
实现收发的回调函数
因为STM32F446的CAN外设有两个接收FIFO,每个深度3级,发送有3个mailbox,所以软件还要考虑FIFO的数据处理。完成后可以先编译测试确保驱动没有问题,包含我们之前曾经多次开发过的J1939的协议栈代码,修改接口参数,主要是修改J1939的发送和接收处理函数内容,
其余修改地方不在赘述,编译无误后,下载到开发板,并正确连接硬件电路,并通过CAN转USB接到电脑,通过CANPro软件进行测试,测试中我就放了一帧,你可以根据自己的需要添加更多内容。
至此我们已经成功在STM32F446上实现了J1939通信。总共给大家介绍过多次有关J1939程序的开发,前后在NXP KV46系列,K64系列,KEA系列等MCU上实现J1939协议栈,今天完成在ST平台上的开发,有相关项目需求的客户欢迎联系,
SAE J1939是在商用车,大型机电设备,发电机,船舶,农机等行业广泛应用的标准协议,目前国内开发人员较少,我们可以为您提供整套产品级方案和源码。