当前位置: 首页 > news >正文

单片机嵌入式CAN库

kw_can库说明

本库是针对CAN类型数据的收发设计:

  • 主要应用于大数据量(数据处理速度高于缓存CAN_RTX_FIFO_SIZE大小)接收不丢包
  • 可快速进出接收中断
  • 可跨线程调用发送接口。

本库开源连接地址:gitee连接

实现思路

本库采用C语言进行编程,方便移植,用户只通过调用库接口函数即可使用。

主要接口函数如下:

项目函数功能
1kw_CANInit初始化,初始化设备信息,和CAN发送回调函数
2kw_CANFlush周期发送指定CAN设备信息中的发送缓存中的数据
3kw_CANBufferPop弹出指定Buffer中的CAN帧
4kw_CANBufferPush压入CAN帧到指定Buffer中

主要变量结构体定义如下:

项目变量类型说明
1_canSendCB函数指针变量can发送回调变量
2kw_CanFrame_tCAN帧结构体id:CAN发送ID
datas:CAN帧数组
len:CAN帧数组长度
3kw_CanBuffer_tCAN帧环形队列结构体frame:CAN帧结构体
read:读指针
write:写指针
4kw_CanDev_tCAN设备结构体rx:接收队列
tx:发送队列
io:发送接口

测试代码

#include "kw_baseDrvCFG.h"static kw_CanDev_t _canDev;/// @brief can接收回调,该函数可放在can接收中断中
/// @param rx
static void _CanRx_CB(const kw_CanFrame_t *rx)
{kw_CANBufferPush(&_canDev.rx, rx->id, rx->datas, rx->len);
}/// @brief 调用硬件层CAN发送接口
/// @param tx
/// @return
int _canSendCB(const kw_CanFrame_t *tx)
{return HAL_CanTransmit(&hcan1, tx->id, tx->datas, tx->len, 1000);
}void main()
{kw_CANInit(&_canDev, _canSendCB);kw_CanFrame_t ret = {0};while (1){if (kw_CANBufferPop(&_canDev.rx, &ret) == 0){if (ret.id == 0x1234567 && ret.len == 2 && ret.datas[0] == 0x5A && ret.datas[1] == 0xA5){ // 回传指定的can framekw_CANBufferPush(&_canDev, &ret);}}kw_CANFlush(&_canDev);HAL_Delay(1); //}
}
http://www.dtcms.com/a/170501.html

相关文章:

  • Linux第20节 --- inode和文件系统
  • 【2025软考高级架构师】——未来信息综合技术(11)
  • C++笔记-多态(包含虚函数,纯虚函数和虚函数表等)
  • 基于PyTorch的食物图像分类实战:从数据处理到模型训练
  • 61常用控件_QDateTimeEdit的使用
  • 【LeetCode Hot100】贪心篇
  • Python基本语法(函数partial)
  • 生成式 AI 的优势
  • AI 大模型常见面试题(及内容解析)
  • cpp细碎知识点
  • asp.net客户管理系统批量客户信息上传系统客户跟单系统crm
  • 给QCustomPlot添加一个QScrollBar滚动条、限制缩放范围、自动设置大小和右边栏垂直缩放
  • 基于springboot的金院银行厅预约系统的设计及实现(源码+lw+部署文档+讲解),源码可白嫖!
  • ubuntu使用apt安装软件
  • 【2025软考高级架构师】——数据库系统(10)
  • 用Ensaio下载GIS数据
  • 论微服务架构及其应用
  • C++ STL vector容器详解:从原理到实践
  • # 基于词袋模型(BoW)的猫狗图像分类实践
  • 项目管理进阶:深入学习企业软件研发管理体系架构方案【附全文阅读】
  • 基于 JSP 和 Servlet 的数字信息分析小应用
  • 算法笔记。质数筛算法
  • 琴生不等式 (Jensen‘s Inequality)
  • 【quantity】7 角度单位模块(angle.rs)
  • 论系统安全架构设计及其应用
  • Vibe Coding 新时代:AI 辅助编程完全指南
  • 从融智学视域快速回顾世界历史和主要语言文字最初历史证据(列表对照分析比较)
  • JavaScript中的AES加密与解密:原理、代码与实战
  • 一篇文章看懂web服务
  • C与指针4——指针