首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于STM32F103xxx的J1939程序开发

基于STM32F103xxx的J1939程序开发

作者头像
用户1605515
发布2019-12-25 14:41:57
1.6K1
发布2019-12-25 14:41:57
举报
文章被收录于专栏:嵌入式程序猿嵌入式程序猿

1. 摘要

本篇笔记主要介绍,如何在STM32F103XXX系列上实现SAE J1939协议,基于STM32F103RCT6芯片 使用IAR8.32作为软件开发环境。

2. 准备工作

1), 熟悉SAE J1939标准,熟悉ST STM32CubeMX, 和STM32Cube_FW_F1_V1.8.0结构

2), 装有IAR的电脑

3), 带有CAN 收发器的板子,因为开发板上的只有CAN接口,不带收发器,我们采用外接引入收发器挂在开发板上,收发器芯片使用的是SN65HVD232D

3. 熟悉ST的Cube架构

ST官方提供Cube帮助工程师快速开发产品原型,类似于软件SDK,包含所有外设驱动,还有例程,之前多次讲过在NXP平台芯片上做J1939协议栈,如果熟悉J1939的话会很容易移植到ST芯片上 。

这次我们使用CubeMX来生成工程,且初始化CAN,配置CAN管脚和中断

根据自己的需要选择配置相应的管脚,和外设

使用内部时钟,禁止掉HSE。

配置时钟,可以使用外部时钟晶振,也可以配置使用内部时钟,我们以内部时钟为例

CAN中断的配置

CAN时钟,以及位时间等的配置

选择路径和命名,,开发环境,生成工程,MX会基于这些配置生成对应环境的工程

点击GENERATE CODE生成工程,生成的工程目录结构如下

Ioc文件时MX生成的文件,每次修改工程,添加外设等的更改,建议都通过这个文件去更改重新生成。打开生成的工程看一下

我们使用SysTick 1ms来作为系统的时基,生成的工程里只有CAN的初始化代码,需要我们添加中断函数,并且启动CAN。可以重新建立两个文件来完成CAN的相关代码。可以来看一下生成的初始化函数,红色框为我注释的内容

启动CAN,使能中断

实现接收中断和发送中断,给出接收中断代码,CAN的中断源比较多,根据自己需要使能或者不使能。

添加完CAN驱动后,确认编译没有问题,且驱动收发正常,这时候开始动手移植我们之前多次成功在其他平台上移植的J1939协议栈。

4. 协议栈移植

添加j1939相关文件到工程,其实移植主要修改几个函数,需要熟悉J1939的PDU结构,不熟悉J1939的可以自己查找相关文档,或者去听听我在发烧友学院的课程

其实就是修改调用底层CAN接口的两个函数,其他与底层无关的不用修改,修改编译无误后,下载测试

5. 测试

其余修改地方不在赘述,编译无误后,下载到开发板,并正确连接硬件电路,并通过CAN转USB接到电脑,通过CANPro软件进行测试,测试中我就放了一帧,你可以根据自己的需要添加更多内容。

至此在STM32F103上移植J1939协议栈成功。

在移植过程中,遇到编译器优化的问题,后面会在跟大家分享。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式程序猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档