打印

stm8s can 离线中断标志的问题

[复制链接]
4822|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gzwfj|  楼主 | 2011-4-22 14:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Target:stm8s208RB,
IdeIAR Embedded Workbench
for STMicroelectronics STM8 v1.20
Debugger:st-linkLib:官方STM8S Firmware Library
调试can模块,打开can错误警告中断,
CAN_ITConfig(CAN_IT_FMP | CAN_IT_EWG | CAN_IT_ERR, ENABLE);



俩块板一发一收没有问题,拔掉can通讯线,调试其中一块板,发送时会进入错误中断,这时候参考寄存器CAN_ESR,显示EPVFEWGF被置位,奇怪的是LEC[2:0]的值经常显示是001(填充错)?查看CAN-TECR=0,CAN_RECR=0xff,

怎么会是接收错误计数超限而没发送发送错误?这时候,把发送代码屏蔽掉,等于can上面什么没有动作,重新调试,不会进入错误中断,随机stop观察寄存器,也没有任何错误发生。

换一种错误中断,BOFF,即发送错误达超过255溢出后,can进入离线状态。
CAN_ITConfig(CAN_IT_FMP | CAN_IT_BOF | CAN_IT_ERR, ENABLE);
俩块板相通,甲一直发送,乙处于接收状态,都没有任何问题,拔掉can联线,甲不久就会停止发送帧(用示波器看的),stop进入查看,CAN_ESR,显示EPVFEWGF被置位,BOFF还是0 CAN-TECR=0,CAN_RECR=0xff
所以,最奇怪的是再发送的时候为什么不是发送错误值增加而是接收错误计数增加,如果是板有收到错误信号,那按道理,不发送也会产生接收错误,事实是如果不发送,没有任何错误错误发生。
沙发
gzwfj|  楼主 | 2011-4-22 14:26 | 只看该作者
补充一下,transciver为tTJA1050

使用特权

评论回复
板凳
gzwfj|  楼主 | 2011-4-23 08:43 | 只看该作者
我想可能是这样的,can总线如果只有一个节点,发送时收不到应答的,这时候硬件是在接收错误计算器上增加值,而不是在发送错误计算器上增加值

使用特权

评论回复
地板
有意思| | 2011-6-15 09:36 | 只看该作者
TJA1050的波特率必须是20K以上

/*
********************************************************************************
**º¯ÊýÃû³Æ:CheckBoff
**º¯Êý¹¦ÄÜ:²éѯCAN״̬ ÀëÏßʱ×Ô¶¯»Ö¸´
**Èë¿Ú²ÎÊý:ÎÞ
**³ö¿Ú²ÎÊý:ÎÞ
**º¯Êý˵Ã÷:
**
********************************************************************************
*/
void CheckBoff(void)
{
    /*
    u8 CAN_DLC;
    u8 *CAN_Data;
    u32 CAN_Id;
    CAN_Id_TypeDef CAN_IDE;
    CAN_RTR_TypeDef CAN_RTR;
    CAN_TxStatus_TypeDef CAN_TxStatus = CAN_TxStatus_NoMailBox;
    CAN_Page_TypeDef can_page;// = CAN_GetSelectedPage();
    */
   
    CAN->PSR = CAN_Page_Config;
    if (CAN->Page.Config.TECR > 127) {
        InitCAN();
    }
    CAN->PSR = CAN_PSR_RESET_VALUE;

}

使用特权

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

本版积分规则

1

主题

13

帖子

0

粉丝