打印

华大HC32F460 Can总线筛选问题

[复制链接]
5032|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jimmychai|  楼主 | 2022-7-6 02:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
华大单片机手册上说: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 | 只看该作者
还是不得行?

使用特权

评论回复
5
onlycook| | 2022-7-14 15:50 | 只看该作者
配置方面有没有问题

使用特权

评论回复
6
huquanz711| | 2022-7-14 19:03 | 只看该作者
过滤方式没有配置对

使用特权

评论回复
7
binoo7| | 2022-7-17 12:26 | 只看该作者
你用的是哪个库版本?1.0的库没问题,如果是2.0的库是有问题的,3.0的库测试没问题,你可以用3.0的试一下,

使用特权

评论回复
8
axman002| | 2022-7-18 19:27 | 只看该作者
我是直接移植了华大提供的官方例程里的相关函数,挺顺利的啊

使用特权

评论回复
9
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;

使用特权

评论回复
10
tpgf| | 2022-8-1 15:30 | 只看该作者
这些都是只读的吧

使用特权

评论回复
11
qcliu| | 2022-8-1 15:38 | 只看该作者
过滤方式的配置有问题

使用特权

评论回复
12
drer| | 2022-8-1 15:51 | 只看该作者
我就一直也配置不对呢

使用特权

评论回复
13
coshi| | 2022-8-1 16:01 | 只看该作者
这就是书写习惯

使用特权

评论回复
14
kxsi| | 2022-8-1 16:26 | 只看该作者
移植的时候需要修改哪里呢

使用特权

评论回复
15
wiba| | 2022-8-1 16:41 | 只看该作者
表示的是无符号数吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝