当前位置: 首页 > 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); //}
}

相关文章:

  • 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)的猫狗图像分类实践
  • 项目管理进阶:深入学习企业软件研发管理体系架构方案【附全文阅读】
  • 港股5月迎开门红,恒生科指涨3%,欧股开盘全线上扬
  • 美法官裁定特朗普援引战时法律驱逐黑帮违法,系首次永久性驳回
  • 魔都眼|买买买,老铺黄金新店开业被挤爆:有人排队5小时
  • 微软上财季净利增长18%:云业务增速环比提高,业绩指引高于预期
  • 证监会副主席王建军被查
  • 马克思主义理论研究教学名师系列访谈|杜玉华:马克思主义是“认识世界”和“改变世界”的思维工具