STM8做BUS OFF快慢恢复策略

发布者:ohp991养生的香菇最新更新时间:2020-01-09 来源: eefocus关键字:STM8  BUS  OFF  快慢恢复 手机看文章 扫描二维码
随时随地手机看文章

前言:


CAN总线上出现错误会导致CAN控制器进入BUS OFF状态,具体的可以参考CAN的规范。


CAN控制器提供自动恢复和手动恢复功能。


1.自动恢复


自动恢复比较简单,初始化的时候打开自动恢复功能。要求不高的话建议打开,否则CAN BUS OFF一直无法恢复通信。


CAN->MCR |= CAN_MasterCtrl_AutoBusOffManagement;/*atuo bus off recovery */

2.手动恢复


一般车厂要求ECU不能自动恢复,而是先快恢复后慢恢复。


常用的就是:先100ms恢复5次,然后是1000ms恢复一次。


具体的就是:


(1)发生BUS OFF后,立即关闭TX,然后重置CAN控制器


(2)快恢复次数+1


(3)快恢复次数<5则设置恢复时间为100ms,否则,恢复时间设置1000ms


(4)恢复时间到了,就打开TX


(5)成功发送报文则清零快恢复次数


初始化时打开相关中断


  CAN_ITConfig(CAN_IT_FMP,ENABLE); 

  CAN_ITConfig(CAN_IT_BOF,ENABLE); 

  CAN_ITConfig(CAN_IT_ERR,ENABLE); 

中断里这样写


INTERRUPT_HANDLER(CAN_TX_IRQHandler, 9)

{

  /* In order to detect unexpected events during development,

     it is recommended to set a breakpoint on the following instruction.

  */

  

  if(CAN_GetITStatus(CAN_IT_BOF) == SET)

  {

    //这里加你的CAN初始函数,将CAN重新初始化CAN_Init(……);

    BusOff_Confirm();

    CAN_ClearITPendingBit(CAN_IT_BOF);

  }

  else if(CAN_GetITStatus(CAN_IT_TME) == SET)

  {

    BusOff_ResetFastCounter();

    CAN_ClearITPendingBit(CAN_IT_TME);

  }

  

}

注意这样CAN_CancelTransmit这里一定要用的,否则会有问题


void BusOff_ResetFastCounter(void)

{

  fastRecoveryCounter = 0;

}

 

void BusOff_Confirm(void)

{

#ifdef CFG_ENABLE_FAST_RECOVERY

  if(fastRecoveryCounter < CFG_FAST_RECOVERY_CNT)

  {

    recoveryTime = CFG_FAST_RECOVERY_TIME;

    fastRecoveryCounter++;

  }

  else

#endif

    recoveryTime = CFG_SLOW_RECOVERY;

  CAN_CancelTransmit(CAN_TransmitMailBox_0);

  CAN_CancelTransmit(CAN_TransmitMailBox_1);

  CAN_CancelTransmit(CAN_TransmitMailBox_2);

  CAN_DrvInit();

  BusOff_Flag = 1;

}


总结:


1.相关中断一定要打开


2.BUS OFF自动手动恢复要配置对


3.发生BUS OFF要取消当前发送数据

关键字:STM8  BUS  OFF  快慢恢复 引用地址:STM8做BUS OFF快慢恢复策略

上一篇:Bootloader升级方式一———擦、写flash在RAM中运行
下一篇:STM8的IAP在线升级

推荐阅读最新更新时间:2024-11-10 23:30

STM8与汇编语言(13)--修改CPU的时钟
在有些单片机的应用系统中,并不需要CPU运行在多高的频率。在低频率下运行,芯片的功耗会大大下降。因此希望单片机能提供这个功能,STM8单片机确实有这个功能,并且修改也非常方便。 下面的实验程序首先将CPU的运行时钟设置在8MHZ,然后快速闪烁LED指示灯。接着,通过修改主时钟的分频系数和CPU时钟的分频系数,将CPU时钟频率设置在500KHZ,然后再慢速闪烁LED指示灯。通过观察LED指示灯的闪烁频率,可以看到,同样的循环代码,由于CPU时钟频率的改变,闪烁频率和时间长短都发生了变化。 同样还是利用ST的开发工具,生成一个汇编程序的框架,然后修改其中的main.asm,修改后的代码如下。 stm8/ #inc
[单片机]
STM8|STM32 看门狗使用
STM8和STM32都配备了独立看门狗,其作用之大不言而喻。以下为STM8及STM32的独立看门狗使用例: 对于STM32单片机: #define SYS_IWDG_OPEN IWDG- KR=0xCCCC; #define SYS_IWDG_FEED IWDG- KR=0xAAAA; void SystemIWDG_Config(uint32 OverTime) { RCC- CSR|=RCC_CSR_LSION; while((RCC- CSR&RCC_CSR_LSIRDY)==0); IWDG- KR=0x5555; //使能模块访问 while(IWDG- SR&IWDG_S
[单片机]
STM8避坑—PB4和PB5
  在使用STM8S003时由于引脚不够,于是将PB4和PB5作为普通IO口使用,结果无论程序如何调整,始终无法输出高电平,在网上查了很多资料,实践之后终于搞明白了问题所在。   首先PB4和PB5是可以作为I2C复用端口的,手册上做了如下介绍:   可以发现PB4和PB5后面对于端口性质的定义为T,表示真开漏模式,内部既没有P-Buffer,也没有连接到VDD的保护二极管,也就是说在程序中无论怎么设置,PB4和PB5都只能是开漏模式,弄清楚这一点之后,如果需要将PB4和PB5作为普通IO口使用,建议加上拉电阻,这样就可以正常输出高低电平了。
[单片机]
<font color='red'>STM8</font>避坑—PB4和PB5
STM8单片机ADC带缓存的连续采样模式
在上一篇文章中说了STM8的ADC连续采样模式,为了提高采样的精度和速率,STM8单片机还提供了带缓存的连续采样模式,也就是说ADC会连续采集8个数据,放在缓存中,读取数据时可以一次从缓存中读取8个数据,这样就可以通过8个数据数据计算平均值,使得采样的结果更加准确。 下面看一下官方文档中的对缓存模式的介绍。 通过文档中可以看出,要开启缓存模式,只需要将ADC_CR3寄存器中的COUNT为DBUF设置为1,就可以开启缓存模式了。 当开启缓存模式后,采样的结果将不会存放在ADC_DR寄存器中,而是会将结果依次存放在ADC_DB0R寄存器到ADCDB7R寄存器,连续读取8次数据,存储在这8个寄存器中。读取数据的时候,依次从这
[单片机]
<font color='red'>STM8</font>单片机ADC带缓存的连续采样模式
IAR for STM8的简介、下载、安装及注册教程
一、简介 1.关于IAR for STM8 IAR for STM8 是一个嵌入式工作平台,主要应用于STM8 系列芯片的开发,现在(2018年3.10版本)能够支持市面上所有的STM8芯片。 个人认为,IAR for STM8和Keil差别并不是很大,只要熟悉Keil的使用,那上手IAR for STM8并不是什么难事,网络上也有许多相关资料可以查询。 2.关于该篇博客 这一篇博客主要来讲解一下IAR的下载、安装、注册的步骤, 虽然说的是IAR for STM8的教程, 但其实ARM跟其他的下载、安装步骤类似的。 大家可以从我的百度云下载IAR for STM8(3.10版本)和注册机!!! 链接: http
[单片机]
IAR for <font color='red'>STM8</font>的简介、下载、安装及注册教程
STM 8 AD 转换问题
其它的设置都很简单,仅需注意一个地方:开启AD转换时要延迟一下,延迟后需再开启一次方可。main中如下: ADC_CR1|=0x01; //启动转换 DelayMS(1); ADC_CR1|=0x01; //启动转换 important while(!(ADC_CSR&0x80)); // 等待ADC结束 ADC_CSR &= 0X7F; //清除中断标志
[单片机]
新一代座舱系统Coffee OS 3首发,长城加速智能化
魏建军又上直播了。 6月12日,长城汽车召开“长城汽车Coffee OS 3智慧空间首个百人车内技术分享会”,在北京、上海、广州、保定四大城市同步开展。 长城汽车智能化副总裁吴会肖,以技术讲解和车内演示的形式,为观众展现Coffee OS 3的技术和功能,号称在视觉、听觉、交互方面拥有多项“全球首个”技术,实现座舱体验的全面进阶。 图源:长城汽车 长城汽车董事长魏建军,也来到直播间站台,并首次回应长城咖啡智能命名原因,他指出长城咖啡是带有国际属性,面向全球用户,咖啡代表着人们日常的交互,长城智能座舱的理念就是交互和更开放的生态,并表示智能座舱比智能驾驶的想象空间更大。 图源:长城汽车 Coffe
[汽车电子]
新一代座舱系统C<font color='red'>off</font>ee OS 3首发,长城加速智能化
关于IAREWSTM8 HEX文件
研究了一下BIN与HEX的关系,发现由BIN转到HEX比较简单,但是由BIN转到HEX就觉得多了一行东西。 上图看一下: 用别人写的代码也是一样多出来。 上网找了一下发现也有人跟我遇到相同的问题: http://bbs.21ic.com/icview-187817-1-1.html 并且给出了答案 以 :0400000508004ABDE8 为例子。 其中的地址是0x08004ABD,当下载代码到芯片里后(不勾选 run to main),程序恰好停在 0x08004ABD,对应于标号: __iar_program_start 维基百科是这么说: http://en.wikipedia.org/wik
[单片机]
关于IAREWSTM8 HEX文件
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved