单片机嵌入式CAN库

kw_can库说明

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

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

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

实现思路

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

主要接口函数如下:

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

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

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

测试代码

c 复制代码
#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 frame
                kw_CANBufferPush(&_canDev, &ret);
            }
        }
        kw_CANFlush(&_canDev);
        HAL_Delay(1); //
    }
}
相关推荐
芯岭技术9 小时前
Wi-Fi+BLE双模无线芯片 BK7238,低功耗、高性能,集成MCU和Flash
单片机·嵌入式硬件
云空9 小时前
《ARM Cortex‑M 系列完整梳理》
stm32·单片机·嵌入式硬件·mcu
单片机杂货铺9 小时前
基于单片机的智能花盆浇水系统控制器设
stm32·单片机·嵌入式硬件·毕业设计·51单片机·硬件工程
Dr.kangder10 小时前
嵌入式处理器仿真技术——Hypervisor 原理与实践
服务器·嵌入式硬件·架构·嵌入式
Hello_Damon_Nikola12 小时前
TM1637芯片从入门到精通
单片机·嵌入式硬件
智购科技自动售卖机厂家15 小时前
从STM32到RK3588——自动售货机嵌入式主控方案的架构演进~YH
stm32·嵌入式硬件·物联网·架构·lua·零售·symfony
振南的单片机世界16 小时前
2MHz/50MHz玄机:GPIO速度档选错,信号直接“烂尾”
arm开发·stm32·单片机·嵌入式硬件
Run_Teenage17 小时前
嵌入式:理解STM32文档和社区生态,工具链的选择与安装
stm32·单片机·嵌入式硬件
ACP广源盛1392462567317 小时前
DeepSeek‑V4‑Flash 公测@ACP#昇腾 950 国产算力组合落地,国产 PCIe 交换芯片 IX9104 有哪些硬件机会
大数据·数据库·人工智能·分布式·单片机·嵌入式硬件·microsoft
铅笔小新z17 小时前
【stm32】RCC 与时钟树
stm32·单片机·嵌入式硬件