单片机嵌入式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); //
    }
}
相关推荐
吠品8 小时前
智谱开源 ZCode 之后,真正的考试才开始
单片机·嵌入式硬件·1024程序员节
Chery11409 小时前
高速ADC与精密DAC怎么选?DP9230D与DP8532D应用解析
嵌入式硬件·物联网·射频工程
小李不想当小白12 小时前
SPI通信外设与W25Q64 (硬件SPI)(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
LCG米13 小时前
STM32驱动W5500以太网模块实测:TCP吞吐瓶颈定位、TX指针回绕陷阱与断线重连保活落地
stm32·单片机·嵌入式硬件·tcp/ip
尼喃14 小时前
662K/65Z5三脚稳压芯片规格书—PW6566B33/B30引脚功能
嵌入式硬件
创界工坊工作室14 小时前
63-基于STC89C52霍尔传感器的智能化电能表设计
stm32·单片机·嵌入式硬件·51单片机·proteus
智购科技自动售货机厂家15 小时前
让AI经营自动售货机:从Project Vend看工具权限与业务规则~YH
大数据·服务器·单片机·嵌入式硬件·深度学习
Zwawa16 小时前
从 printf 到曲线:把数据送上 VOFA+
c语言·单片机·嵌入式
意法半导体STM3217 小时前
【官方原创】LAT6048 如何扩大MP2的A35核和M33核共享内存
stm32·单片机·嵌入式硬件·内存映射·stm32mp2
en.en..17 小时前
STM32(F429)启动模式与两种烧录方式
stm32·单片机·嵌入式硬件