jimmychai 发表于 2022-7-6 02:00

华大HC32F460 Can总线筛选问题

华大单片机手册上说:ID CODE 和 ID MASK通过 ACF寄存器访问且只能在 CFG_STAT.RESET=1 即 CAN 软件复位时设定。
我在debug的过程中:当CAN软件复位时,ACF寄存器是软件设置的AccCode和AccMask的值:
但是当我把can回复到正常工作状态时即STAT寄存器REST位置0后,ACF寄存器的值被清0了,而且can也没有过滤掉无关的帧ID

cdzlll 发表于 2022-7-11 15:47

给你发个能用的代码吧。遇到了跟你同样的问题,我的解决方法是把   CAN_FilterConfig(&stcFilter, Enable); 这个函数 提前执行。希望能帮到你,
顺便吐槽一句,想支持一把国产真特么不容易!!!就这还想抢stm32的市场,且不说产品做得怎么样,虽然我这个用起来了,但是费死了劲。手册写得不明不白的,只能靠蒙。
还有什么波特率设置之类的,特么的就不能跟串行口一样把波特率作为参数传进去?设4个寄存器。谁特么有空看这些设置?


void hal_can_init(void)
{
    PWC_Fcg1PeriphClockCmd(PWC_FCG1_PERIPH_CAN, Enable);

    PORT_SetFunc(PortB, Pin13, Func_Can1_Rx, Disable);
    PORT_SetFunc(PortB, Pin14, Func_Can1_Tx, Disable);

    stc_can_init_config_t stcCanInitCfg;
    stc_can_filter_t      stcFilter;
    stc_can_txframe_t   stcTxFrame;

    //<<Can filter config
    stcFilter.enAcfFormat = CanStdFrames;
    stcFilter.enFilterSel = CanFilterSel1;
    stcFilter.u32CODE   = 0x00000601ul;
    stcFilter.u32MASK   = 0x1FFFF000ul;
CAN_FilterConfig(&stcFilter, Enable);

    MEM_ZERO_STRUCT(stcCanInitCfg);
    MEM_ZERO_STRUCT(stcFilter);
    MEM_ZERO_STRUCT(stcTxFrame);

    stcCanInitCfg.stcCanBt.PRESC = 2u - 1u;
    stcCanInitCfg.stcCanBt.SEG_1 = 5u - 2u;
    stcCanInitCfg.stcCanBt.SEG_2 = 3u - 1u;
    stcCanInitCfg.stcCanBt.SJW   = 3u - 1u;

    stcCanInitCfg.stcWarningLimit.CanErrorWarningLimitVal = 10u;
    stcCanInitCfg.stcWarningLimit.CanWarningLimitVal      = 16u - 1u;

    stcCanInitCfg.enCanRxBufAll= CanRxNormal;
    stcCanInitCfg.enCanRxBufMode = CanRxBufNotStored;
    stcCanInitCfg.enCanSAck      = CanSelfAckEnable;
    stcCanInitCfg.enCanSTBMode   = CanSTBFifoMode;

    CAN_Init(&stcCanInitCfg);

    CAN_IrqCmd(CanRxIrqEn, Enable);
}

guijial511 发表于 2022-7-11 20:47

应该还是配置没对吧?

yangxiaor520 发表于 2022-7-12 08:40

还是不得行?

onlycook 发表于 2022-7-14 15:50

配置方面有没有问题

huquanz711 发表于 2022-7-14 19:03

过滤方式没有配置对

binoo7 发表于 2022-7-17 12:26

你用的是哪个库版本?1.0的库没问题,如果是2.0的库是有问题的,3.0的库测试没问题,你可以用3.0的试一下,

axman002 发表于 2022-7-18 19:27

我是直接移植了华大提供的官方例程里的相关函数,挺顺利的啊

axman002 发表于 2022-7-18 19:28

弱弱的问一下,官方为啥要这样写?不就是1u,3u,2u和2u么?
stcCanInitCfg.stcCanBt.PRESC = 2u - 1u;
    stcCanInitCfg.stcCanBt.SEG_1 = 5u - 2u;
    stcCanInitCfg.stcCanBt.SEG_2 = 3u - 1u;
    stcCanInitCfg.stcCanBt.SJW   = 3u - 1u;

tpgf 发表于 2022-8-1 15:30

这些都是只读的吧

qcliu 发表于 2022-8-1 15:38

过滤方式的配置有问题

drer 发表于 2022-8-1 15:51

我就一直也配置不对呢

coshi 发表于 2022-8-1 16:01

这就是书写习惯

kxsi 发表于 2022-8-1 16:26

移植的时候需要修改哪里呢

wiba 发表于 2022-8-1 16:41

表示的是无符号数吧
页: [1]
查看完整版本: 华大HC32F460 Can总线筛选问题