首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

CAN接受怎么接4茨才收到【请教strongchen大哥】

CAN接受怎么接4茨才收到【请教strongchen大哥】

用的是dp256的MCU,和上位机通信时候出现一直没在意一个问题:上位机发送一个帧都要发送5次,下位机才能收到。观察了前四次都收的是乱帧,会不会是和CAN的接受里面的前后台结构有关系呢?它有三个后台缓存,只有一个前台缓存是用来发送的,帧到前台的判断条件是不是接受满的标志位RXF清零??我用的CAN底层就是P&E生成的,RXF清零是在接收中断最后清的,
恳请strongchen大哥指点一下,项目要提交前发现这个问题的,急啊!
RXF标志置1表示接收到新的message。此时用户可以去读新的message,并应将RXF清零。否则无法再接收新的message。
海纳百川  有容乃大
RXF标志置1是硬件自动完成的吧??给RXF写入1是对它清零,是这个意思吗?
对。
海纳百川  有容乃大
用单帧调试工具看,发送四次才能正确接收到数据,又是怎么回事呢?
你有没有看过信号波形,是否正确?
海纳百川  有容乃大
前4帧的波形就是不正确 是乱的
发出的波形就是乱的?那当然无法接收。
海纳百川  有容乃大
我想会不会是CAN的3级后台缓存里本身的数据被我接受到了,而且中断接受之前要清除缓存里面的所有内容??
CAN的标志符验收过滤器怎么用啊??

还是要接受4次才能正确收到 怎么回事呢??
问题还没有解决 我的中断接受程序是这样的 还请strongchen大哥帮忙看看
interrupt void CAN1_InterruptRx(void)
{
if (SerFlag & FULL_RX_BUF) { /* Is any char already present in the receive buffer? */
SerFlag |= CAN1RFLG_OVRIF_MASK; /* If yes then set internal flag OVERRUN */
}

SerFlag |= FULL_RX_BUF; /* Set flag "full RX buffer" */
ErrFlag |= SerFlag; /* Add new error flags into the ErrorFlag status variable */

CAN1RFLG = CAN1RFLG_RXF_MASK; /* Reset the reception complete and release the RX buffer */
}
你应该在收、发两部分同时进行调试。发的部分一个message一个message地发,每发一个message,看看接收部分能否进中断。
海纳百川  有容乃大
AN2283里面详细介绍了中断接受的过程 第二步提到硬件标志符接受过滤,当接受的消息帧ID和硬件过滤器(包括接受和屏蔽寄存器)相匹配,且RXF=0时,就会从RxBG变成RxFG^^^^^

这里的硬件过滤是什么意思 我程序中好像没有完成过滤嘛 要不怎么会是乱数据都去读呢 不该变成前台的数据的
我理解的中断接收过程是:
先进入中断接受,通过了所谓的硬件过滤了,从后台复制到前台,然后CPU会去读寄存器(就是执行读函数),并且将数据存放在RAM上,这个都能解释,也很好懂。但是,中断里面有个清楚RXF标志的操作,表明已经读取完毕了,要清空缓存,让新的数据进来。那这样不就是和先进入中断接受函数,再在执行读的操作矛盾了么,中断的最后是清楚标志,而我的理解是中断以后才去读数据,说明书上写得很清楚是RXF清零以后不能再读,防止数据不完整……
还在困惑中…………
返回列表