以前一直用
STM32做can
通信 用STM32板子上的can通信 一直很好用,最近接触at91sam9x35 它的can通信方式和STM32 不一样,一直can接受出现问题?请教几个问题。
1、at91sam9x35 和一个stm32进行can通信 一直没有问题,at91sam9x35 和12个stm32通信 问题就出来了 at91sam9x35的接受can信息有两种模式一种简单模式(接受到第一个can信息 就忽略后来的can信息)一种是覆盖模式(接受到新的信息直接将老信息覆盖掉),看到介绍 傻眼了! 怎么接收信息才能不丢失信息呢?
2、at91sam9x35 上面PDF 介绍说 运用多个邮箱进行轮换方式,置位邮箱控制寄存器(CAN-MCR)中的MTCR 来控制邮箱状态寄存器(CAN_MSR)的MRDY,来继续接受数据,我进行了设置3个邮箱,可不知道怎么设置 CAN-MCR中的MTCR,忙活了一周 也没有能控制好轮询接受。
3、一个can里面有8个邮箱,当中断来临时 判断can状态寄存器 MBx(x=0-7);是否有事件发生 有事件发生就进行can信息读取,用for循环将8个邮箱查找一遍,有信息就读取(1、先查看邮箱模式判断是接受还是发送邮箱,2、读取数据,我的问题主要出现在读取问题上),8个读取后应该置位CAN-MCR中的MTCR,可是不管我怎么置位 都不能连续读取数值了,命名12个从机 我开3个邮箱 或者8个邮箱,只能接受3个或者8个数据,剩下的从机信息就丢失了! 4、at91sam系列的can通信 怎么连续读取数据呢 请高人指点!
第一种方式,SAM9X35的datasheet上面有描述“The first message received is stored in mailbox data registers. Data remain available until the next transfer request.”, 如果你的8个mailbox已经装载了接受到的信息,如果你不读取出来并请求下一个信息,它不会自动获取下一个信息,这时候后面的信息过来了,会直接丢弃掉。
第二种方式,如果前面的信息还没有读取,后面的信息已经过来了,就会override前面的信息。
附件是例程:
socket_can_和stm32_can_通信例程.rar 下载积分: 积分 -1 分
3.66 MB, 下载次数: 15, 下载积分: 积分 -1 分
一周热门 更多>