0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在STM32H743芯片上实现CAN通信的步骤

广成工控 来源:CSDN博客 作者:CSDN博客 2020-09-14 14:33 次阅读

1. 摘要

本篇笔记主要介绍,在STM32H743芯片上实现CAN通信,封装为BSP驱动,为之后实现CAN的高层通信打下基础。

2. 准备工作

1, IAR 8.32.1

2, STM32Cube_FW_H7_V1.6.0

3. 简介

STM32H743的控制器局域网络 (CAN) 子系统由两个 CAN 模块、一个共享消息 RAM 存储器和一个时钟校准单元组成。关于这四个组成部分的基址,请参见存储器映射。两个 CAN 模块(FDCAN1 和 FDCAN2)均符合 ISO 11898-1: 2015(CAN 协议规范第 2.0 版A、 B 部分)和 CAN FD 协议规范第 1.0 版。此外,第一个 CAN 模块 FDCAN1 支持 ISO 11898-4 中规定的时间触发 CAN (TTCAN),包括事件同步时间触发通信、全局系统时间和时钟漂移补偿。FDCAN1 还额外包含专供时间触发功能使用的寄存器。CAN FD 选项可与事件触发和时间触发 CAN 通信一起使用。10 KB 的消息 RAM 存储器可实现过滤器、接收 FIFO、接收缓冲区、发送事件 FIFO、发送缓冲器( TTCAN 触发)功能。该消息 RAM 在 FDCAN1 和 FDCAN2 模块之间共用。通用时钟校准单元是可选的。通过评估 FDCAN1 接收到的 CAN 消息,该单元可基于 HSI 内部 RC 振荡器和 PLL 为 FDCAN1 和 FDCAN2 生成经过校准的时钟。

CAN 框图

CAN的底层大部分ST已经在HAL库里面封装好,如果你细看HAL源码,搞懂这张图,H743的CAN 你基本上就没有问题了,在结合HAL库的学习。

4. 驱动实现

良好的驱动封装,可以方便应用开发,并且可以容易移植到其他项目,代码重用率高,所以数据和接口是你不得不考虑的问题,怎么样方便的实现,还要通用易用。

4.1 数据封装

首先根据stm32h7xx_hal_fdcan.h文件我们来封装两个个结构体,方便后面软件实现开发,可以新建bsp_can.c和bsp_can.h, 在头文件中封装结构体定义。

在.c文件中定义封装一些变量,这些变量数组也是通用,在多款产品中都采用,大家也可以参照。

可以实现多个CAN口驱动。如果只有一个CAN口,将CAN_PORTS宏定义为1,几个就定义为几。

这个封装大家可以记着,我在多款器件上都是这么封装的,之前在NXP的KE06, KEA, KV46, K64等系列,在ST的F103, F446, H743等等CAN通信都采用这种封装BSP驱动。

4.2 初始化

参考官方的例程,根据自己的硬件去实现,做相应修改。例程中只使能了接收中断,我们一般发送也要采用中断,所以也要开发送中断,根据实际可能还需要添加滤波,配置缓冲等。

配置时钟管脚,中断。

4.3 中断回调函数

最主要的就是接收和发送的回调函数的实现,首先来看接收中断回调函数。

发送完成回调函数

4.4 测试代码

freeRTOS下建立一个CAN通信的简单测试任务,实现收到什么在发送出去。

在10ms的任务里去调用这个测试函数,实现收发测试。

测试的可以这样写,正式的我们需要解析收到的内容,并且重新组织发送的帧,这些解析和重组我们将会在高层的协议驱动文件中实现,有了这个驱动就可以实现CANopen, J1939, DeviceNet等CAN的高层协议了。

5. 测试

测试,扩展帧,500k 位速率,发送数据 aa,01,02,03,04,05,06,bb。板卡收到电脑发送的数据后,回送给电脑。发送100000次, 10ms一次。使用USB-CAN连接到电脑端测试。

至此我们的CAN通信BSP驱动封装就验证完成,可以轻松移植到其他板卡上。关注我,为您带来更多精彩内容

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CAN通信
    +关注

    关注

    3

    文章

    86

    浏览量

    17624

原文标题:CAN通信之BSP封装

文章出处:【微信号:gccanzx,微信公众号:广成工控】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32H743以太网与高速USB同时工作遇到的疑问求解

    STM32H743以太网与高速USB同时工作不可靠 各位大侠,我一个项目中使用STM32H743的100M以太网和高速USB,高速USB是外置的PHY USB3300。使用的CubeMX生成
    发表于 04-09 07:53

    STM32H743外部中断

    STM32CubeMX学习——STM32H743外部中断STM32CubeMX配置Pinout配置Clock Configuration配置ConfigurationGPIONVIC代码部分
    发表于 08-13 06:02

    STM32H743芯片实现CAN通信

    1. 摘要本篇笔记主要介绍,STM32H743芯片实现CAN
    发表于 08-20 07:41

    STM32H743 Flash用来存什么

    STM32H743 Flash用来存什么?STM32H743 Flash的硬件特性和基本操作是什么?
    发表于 09-24 09:41

    NUCLEO STM32H743怎么使用?

    NUCLEO STM32H743怎么使用?
    发表于 11-08 06:25

    如何对STM32H743的两路can进行配置呢

    如何对STM32H743的两路can进行配置呢?有哪些需要注意的事项呢?
    发表于 11-18 07:30

    stm32h743板子有哪些功能呢

    stm32目前使用非常广泛,但是目前很多人都还停留在stmf1/f4仅仅只有72/128m主频阶段,stm32h743采用arm m7架构,高达400m主频的处理器,为我们的控制提供强有力的支持
    发表于 02-11 07:16

    请问如何用STM32cube实现STM32H743的USB驱动?

    请问如何用STM32cube实现STM32H743的USB驱动?
    发表于 02-22 06:35

    如何调试STM32H743的两串口?

    如何调试STM32H743的两串口?
    发表于 02-28 08:51

    详解RT-Thread Studio STM32H743增加sdmmc的步骤

    1、RT-Thread Studio STM32H743增加sdmmc的步骤RT-Thread Studio里的drv没有做H7的适配H7的SDMMC内部集成一个IDMA,当是它不能访
    发表于 05-16 17:07

    请问STM32H753是STM32H743的直接替代品吗?

    我知道 STM32H753 与 STM32H743 引脚兼容,而且据我所知,对于大多数意图和目的也是代码兼容的。唯一的区别似乎是加密硬件加速。所以我假设我可以 H753
    发表于 12-27 07:24

    为什么STM32H743的DMA中断不起作用?

    2017 年夏天,我开始了一个 Nucleo 板使用STM32F767的项目,因为 H743 仍在发布但尚未上市。几个星期以来,我得到了STM3
    发表于 02-08 06:44

    stm32h743外部RAM非字节对齐访问,引起的hard fault

    stm32h743外部RAM非字节对齐访问,引起的hard fault
    发表于 12-09 09:21 5次下载
    <b class='flag-5'>stm32h743</b>外部RAM非字节对齐访问,引起的hard fault

    STM32cube实现STM32H743的USB驱动

    STM32cube实现STM32H743的USB驱动基于STM32cube实现STM32H743
    发表于 12-28 19:53 33次下载
    用<b class='flag-5'>STM32</b>cube<b class='flag-5'>实现</b><b class='flag-5'>STM32H743</b>的USB驱动

    stm32h743软件模拟i2c驱动

    stm32h743 实现gpio模拟i2c资料分享
    发表于 12-01 11:12 6次下载