当前位置: 首页 > 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.xdnf.cn/news/261811.html

相关文章:

  • 在 Ubuntu 上安装 cPanel
  • 【Qt】初识Qt
  • 【科研绘图系列】R语言绘制世界地图(map plot)
  • 在多线程环境下如何设计共享数据结构保证原子操作与数据一致性
  • 第十章:反击的序曲(续)
  • JavaScript性能优化实战(8):缓存策略与离线优化
  • JavaScript:pc端网页特效--元素偏移量offset系列
  • flask 获取各种请求数据:GET form-data x-www-form-urlencoded JSON headers 上传文件
  • 每天学一个 Linux 命令(35):dos2unix
  • SMT贴片检验标准核心要点与实施规范
  • MySQL进阶(三)
  • 欺骗单页应用(SPA)渲染隐藏路由 -- trouble at the spa b01lersCTF
  • Ubuntu 24.04 完整Docker安装指南:从零配置到实战命令大全
  • NuttX 与 PX4 系统开发全流程详解
  • 《AI大模型应知应会100篇》第46篇:大模型推理优化技术:量化、剪枝与蒸馏
  • 基于 SAFM 超分辨率上采样模块的 YOLOv12 改进方法—模糊场景目标检测精度提升研究
  • 一、大模型原理:第一步分词Tokenization
  • MySQL数据操作全攻略:DML增删改与DQL高级查询实战指南
  • hadoop存储数据文件原理
  • 微服务设计约束
  • 介绍 PHP-FPM 和 Python WSGI
  • 【Bootstrap V4系列】学习入门教程之 组件-按钮(Buttons)
  • 宝塔docker拉取仓库失败
  • Nginx发布Vue(ElementPlus),与.NETCore对接(腾讯云)
  • list的迭代器详讲
  • Linux之基础开发工具(yum,vim,gcc,g++)
  • 基于 Dify + vLLM插件 + Qwen3 构建问答机器人Docker版
  • 【计算机视觉】三维重建: OpenMVS:工业级多视图立体视觉重建框架
  • ActiveMQ 集群搭建与高可用方案设计(二)
  • 生成对抗网络(GAN, Generative Adversarial Network)​