单片机嵌入式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); //
    }
}
相关推荐
Wallystech-Linda1 小时前
DR9574 vs DR9574S — Choosing the Right IPQ9574 WiFi 7 Platform for Your Network
嵌入式硬件
森利威尔电子-1 小时前
森利威尔SL8700 降压型大功率 LED 恒流驱动器:5A/95%效率,支持 PWM/模拟调光
单片机·嵌入式硬件·集成电路·芯片·电源芯片
三佛科技-187366133971 小时前
GP8892SEH贴片SOP7省外围5V2A隔离型原边反馈芯片直接替代MT3723
单片机·嵌入式硬件
Quinn272 小时前
正点原子 STM32MP257 修复异核 FreeRTOS 例程 osDelay() 函数比 HAL_Delay() 延时快的问题
stm32·单片机·嵌入式硬件
周周记笔记2 小时前
【元器件专题】三极管性能
单片机·嵌入式硬件
不会武功的火柴3 小时前
ModelSim入门实战(三): 批处理一键仿真与波形调试
嵌入式硬件·fpga·仿真·modelsim·ic验证·rtl
23124_805 小时前
【无标题】
单片机·嵌入式硬件
ytttr8735 小时前
STM32 读写 SD 卡源码(SPI 模式 + FATFS 文件系统)
stm32·单片机·嵌入式硬件
Quinn275 小时前
正点原子 STM32MP257 修复异核 FreeRTOS+OpenAMP 例程里 SysTick 延时异常的问题
stm32·嵌入式硬件·正点原子·arm linux
Deitymoon5 小时前
STM32——OLED显示图片
stm32·单片机·嵌入式硬件