国产GD芯片CAN过滤器

GD芯片替换ST芯片时,ST的CAN过滤器程序不可用

下面是CANopen中常用CANID的过滤器

运行环境:

#include “gd32f10x.h”
#include <stdio.h>
#include “gd32f10x_can.h”
#include “gd32f10x_gpio.h”

/*-------------------------------------------
//函数名:CAN_Set_Filter
//描述:
CAN0过滤器,默认配置符合CANopen基本指令
过滤规则1 CAN ID的低七位必须与Addr一致,其他位不关心
过滤规则2 CAN ID的第7位必须为1,即只有0x80可以通过
过滤规则3 CAN ID的低八位必须为0x00
//参数:uint8_t Addr   CANopen的本机nodeID
//返回值:无
//函数调用列表:
---------------------------------------------*/
void CAN_Set_Filter(uint8_t Addr)
{
	CAN_FCTL(CAN0)|=1<<0;		//过滤器组工作在初始化模式
/*过滤规则1 CAN ID的低七位必须与Addr一致,其他位不关心	*/
	CAN_FW(CAN0)&=~(1<<0);	//过滤器0不激活
	CAN_FSCFG(CAN0)|=1<<0; 		//过滤器位宽为32位.
	CAN_FMCFG(CAN0)&=~(1<<0);		//过滤器0工作在标识符屏蔽位模式
	CAN_FAFIFO(CAN0)&=~(1<<0);		//过滤器0关联到FIFO0
	CAN_F0DATA0(CAN0)=Addr<<21;//32位ID
	CAN_F0DATA1(CAN0)=(0x7F<<21);//32位MASK
	CAN_FW(CAN0)|=1<<0;		//激活过滤器0
/*过滤规则2 CAN ID的第7位必须为1,即只有0x80可以通过*/	
	CAN_FW(CAN0)&=~(1<<1);	//过滤器1不激活
	CAN_FSCFG(CAN0)|=1<<1; 		//过滤器1位宽为32位.
	CAN_FMCFG(CAN0)|=(1<<1);	//过滤器1工作在标识符列表模式
	CAN_FAFIFO(CAN0)&=~(1<<1);		//过滤器1关联到FIFO0
	CAN_F1DATA0(CAN0)=0x80<<21;//32位ID
	CAN_F1DATA1(CAN0)=(0x80<<21);//32位MASK
	CAN_FW(CAN0)|=1<<1;		//激活过滤器1
/*过滤规则3 CAN ID的低八位必须为0x00*/
	CAN_FW(CAN0)&=~(1<<2);	//过滤器2不激活
	CAN_FSCFG(CAN0)|=1<<2; 		//过滤器2位宽为32位.
	CAN_FMCFG(CAN0)&=~(1<<2);		//过滤器2工作在标识符屏蔽位模式
	//CAN1->FM1R|=1<<2;		//过滤器2工作在标识符列表模式
	CAN_FAFIFO(CAN0)&=~(1<<2);		//过滤器2关联到FIFO0
	CAN_F2DATA0(CAN0)=0x00<<21;//32位ID
	CAN_F2DATA1(CAN0)=(0xFF<<21);//32位MASK
	CAN_FW(CAN0)|=1<<2;		//激活过滤器2
	CAN_FCTL(CAN0)&=~(1<<0);		//过滤器组进入正常模式
}
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值