打印
[学习笔记]

AutoChip的CAN例程谁测试了没有?为什么接受数据LED2不闪烁?

[复制链接]
1239|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hzocce|  楼主 | 2019-11-6 15:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
链接:http://www.autochips.com/uploadfiles/2019/09/ac781xmodulessample20190902.rar
路径是: .ac781xmodulessample\ac781xmodulessample\CAN_Sample
范例说明说是:
        上电后LED2,LED3处于熄灭状态,CAN配置正常模式,可接收可发送数据.
        上电后,CAN以100ms的周期发送数据,连续发送2s时间后停止发送数据2s时间,依次循环.
        当CAN接收到数据时,LED2以50ms的频率闪烁,300ms内没有接收到任何数据,LED2立即熄灭.
        当CAN发送数据时,LED3以50ms的频率闪烁,当停止发送数据时,LED3立即熄灭.

看到的现象是EVB在主动发信息的时候,LED3是的确在闪烁了,可是发数据到EVB确没有见LED2闪烁,是不是例程还有些小问题?
有测试过这板子的朋友么?

使用特权

评论回复

相关帖子

沙发
JasonLee27| | 2019-11-6 15:31 | 只看该作者
        CAN_SetFilterParam( 0, 1, CAN_FILTER_CODE_MODE, FILTER_IDE_STD_ONLY, CAN1_RECV_DATA_ID1);//ʹÓÃCODEģʽֻ½ÓÊÕSTDÖ¡
        CAN_SetFilterParam( 1, 1, CAN_FILTER_CODE_MODE, FILTER_IDE_STD_ONLY, CAN1_RECV_DATA_ID2);//ʹÓÃCODEģʽֻ½ÓÊÕSTDÖ¡
       


可以看下代码里面设置了接收过滤,看下你的报文是否被过滤掉了

使用特权

评论回复
板凳
hzocce|  楼主 | 2019-11-6 15:39 | 只看该作者
JasonLee27 发表于 2019-11-6 15:31
可以看下代码里面设置了接收过滤,看下你的报文是否被过滤掉了

#define ONLY_RECV_STD_FRM                        (0)//只接收标准帧数据
#define ONLY_RECV_EXT_FRM                        (1)//只接收扩展帧数据
#define RECV_STD_EXT_BOTH_FRM                (2)//标准与扩展帧都接收
#define RECV_FRM_KIND_SEL                        (ONLY_RECV_STD_FRM)


看这个原版的默认配置,应该是只接受标准数据帧。
用USBCAN也是按标准帧下发,就是没有看到LED2闪烁,不知道哪里出了问题。

USB_CAN.png (54.68 KB )

USB_CAN.png

使用特权

评论回复
地板
JasonLee27| | 2019-11-6 15:57 | 只看该作者
hzocce 发表于 2019-11-6 15:39
#define ONLY_RECV_STD_FRM                        (0)//只接收标准帧数据
#define ONLY_RECV_EXT_FRM                        (1)//只接收扩展帧数 ...
        canConfig.interruptEnable = TRUE;//ʹÄÜÖжÏ
        canConfig.TSSS = TRUE;//ʹÓôη¢ËÍ»º³åÇø·¢ËÍ
        canConfig.canMode = CAN_MODE_NORMAL;
        canConfig.autoReset = TRUE;//CAN BUSOFFºó,×Ô¶¯»Ö¸´
//        canConfig.filterList = g_canFilterTab;//¸³Öµ¹ýÂËÆ÷ÉèÖÃlist
       


或者你把代码里面canConfig.filterList = g_canFilterTab;这句注释掉就好,不使用demo里面设置过滤器,这样就可以接收所有帧了

使用特权

评论回复
5
hzocce|  楼主 | 2019-11-6 16:12 | 只看该作者
本帖最后由 hzocce 于 2019-11-6 16:38 编辑
JasonLee27 发表于 2019-11-6 15:57
或者你把代码里面canConfig.filterList = g_canFilterTab;这句注释掉就好,不使用demo里面设置过滤器, ...

感谢,是可以了,就是被过滤掉了!
这个list是啥意思?
0, 0, 0x00000000, 0x00000000
这4个元素是啥意思呢?
过滤的是数据? 还是0-15 这个是什么?

CAN_FilterControl                 g_canFilterTab[CAN_MAX_FILTER_NUM] =
{
        { 0, 0, 0x00000000, 0x00000000},   
    { 1, 0, 0x00000000, 0x00000000},   
    { 2, 0, 0x00000000, 0x00000000},
    { 3, 0, 0x00000000, 0x00000000},
    { 4, 0, 0x00000000, 0x00000000},
    { 5, 0, 0x00000000, 0x00000000},
    { 6, 0, 0x00000000, 0x00000000},
    { 7, 0, 0x00000000, 0x00000000},
    { 8, 0, 0x00000000, 0x00000000},   
    { 9, 0, 0x00000000, 0x00000000},   
    {10, 0, 0x00000000, 0x00000000},   
    {11, 0, 0x00000000, 0x00000000},
    {12, 0, 0x00000000, 0x00000000},
    {13, 0, 0x00000000, 0x00000000},
    {14, 0, 0x00000000, 0x00000000},
    {15, 0, 0x00000000, 0x00000000},
};

使用特权

评论回复
6
hzocce|  楼主 | 2019-11-6 16:14 | 只看该作者
还有一个新发现,STLINK 居然可以给AutoChip下载,唯一就是JLINK 不用手动按下EVB上面的复位按钮,STLINK 需要手动去复位。

使用特权

评论回复
7
hzocce|  楼主 | 2019-11-8 09:25 | 只看该作者
        canConfig.filterList = g_canFilterTab;//赋值过滤器设置list

#define CAN_MAX_FILTER_NUM           16         ///< CAN max filter number

CAN_FilterControl                 g_canFilterTab[CAN_MAX_FILTER_NUM] =
{
        { 0, 0, 0x00000000, 0x00000000},   
    { 1, 0, 0x00000000, 0x00000000},   
    { 2, 0, 0x00000000, 0x00000000},
    { 3, 0, 0x00000000, 0x00000000},
    { 4, 0, 0x00000000, 0x00000000},
    { 5, 0, 0x00000000, 0x00000000},
    { 6, 0, 0x00000000, 0x00000000},
    { 7, 0, 0x00000000, 0x00000000},
    { 8, 0, 0x00000000, 0x00000000},   
    { 9, 0, 0x00000000, 0x00000000},   
    {10, 0, 0x00000000, 0x00000000},   
    {11, 0, 0x00000000, 0x00000000},
    {12, 0, 0x00000000, 0x00000000},
    {13, 0, 0x00000000, 0x00000000},
    {14, 0, 0x00000000, 0x00000000},
    {15, 0, 0x00000000, 0x00000000},
};




//   {15, 0, 0x00000000, 0x00000000},   //  15, 0, 0x00000000, 0x00000000  这4个元素对应了什么?  这样一个过滤列表?不懂哎,有清楚的朋友么?

使用特权

评论回复
8
JasonLee27| | 2019-11-8 15:24 | 只看该作者
hzocce 发表于 2019-11-6 16:12
感谢,是可以了,就是被过滤掉了!
这个list是啥意思?
0, 0, 0x00000000, 0x00000000

结构体里面有解释,代表过滤的硬件通道号,是否使能,掩码以及ID号

使用特权

评论回复
9
hzocce|  楼主 | 2019-11-9 08:22 | 只看该作者
本帖最后由 hzocce 于 2019-11-9 08:25 编辑
JasonLee27 发表于 2019-11-8 15:24
结构体里面有解释,代表过滤的硬件通道号,是否使能,掩码以及ID号

十分感谢JasonLee27 大神的指导~~~
typedef struct
{
    uint8_t index;                 ///< Filter index
    uint8_t enable;                ///< Enable or disable
    uint32_t code;                 ///< Code data
    uint32_t mask;                 ///< Mask data
} CAN_FilterControl;


硬件通道号,是否使能,掩码以及ID号

1.   也就是只通过ID为“0x00000000“,数据为 0x00000000”的报文?
2.   只识别,接收ID为“0x00000000“,数据为 0x00000000”的报文?
3.   那 ” 硬件通道号 “ 怎么理解哎?

感谢~

使用特权

评论回复
10
JasonLee27| | 2019-11-9 09:25 | 只看该作者
hzocce 发表于 2019-11-9 08:22
十分感谢JasonLee27 大神的指导~~~
typedef struct
{

首先,CAN有16个硬件过滤器,每个硬件通道号代表一个硬件过滤通道,也就是你可以有16种过滤规则,然后讲掩码和ID号,CAN过滤是基于ID过滤的,所以掩码和ID号都是对应CAN ID的规则,掩码表示你要检查的bit位,举个例子,你设置的掩码号bit0为0.表示该位需要检查,那么你接收的ID必须要和你设置的ID号的bit0匹配,否则就不会被接收。如果你掩码号bit0为1,表示ID的bit0不会检查,可以直接通过。我接触的芯片CAN模块的过滤器设计大体都是这个思路,你可以参照一下其他芯片。

使用特权

评论回复
11
hzocce|  楼主 | 2019-11-9 10:04 | 只看该作者
JasonLee27 发表于 2019-11-9 09:25
首先,CAN有16个硬件过滤器,每个硬件通道号代表一个硬件过滤通道,也就是你可以有16种过滤规则,然后讲 ...

好,真的非常感谢~~

使用特权

评论回复
12
internally| | 2019-11-11 19:56 | 只看该作者
是被过滤器虑掉了么?

使用特权

评论回复
13
JasonLee27| | 2019-11-13 10:05 | 只看该作者
internally 发表于 2019-11-11 19:56
是被过滤器虑掉了么?

对,硬件有16个过滤通道,如果你接收的ID这16个过滤通道都不能通过,那就不会接收

使用特权

评论回复
14
operating| | 2019-11-17 17:49 | 只看该作者
过滤有没有配置好?

使用特权

评论回复
15
hzocce|  楼主 | 2019-11-18 17:01 | 只看该作者
没有~~

使用特权

评论回复
16
amceylg| | 2019-11-20 18:14 | 只看该作者
记得这里要点上



使用特权

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

本版积分规则

127

主题

561

帖子

4

粉丝