AT32F421专题--软件复位

文章介绍了在开发过程中从STM32转向AT32F421芯片的原因,以及在AT32F421中实现看门狗复位和软件复位的方法。看门狗复位通过设置定时器来实现,而软件复位则直接调用NVIC_SystemReset函数完成。
摘要由CSDN通过智能技术生成

【专题简介】(啰嗦,可跳过)

    该专题暂不做深入研究,而是为路过的朋友指导开发的方向,或者告诉你该在哪里找到答案。需要咨询也可留言问我。   

    话说很久很久以前,我是用STM32平台,燃鹅自从跟外国友人关系破裂后STM32价格翻倍时不得不降级用51,经过三年多磨难其实也准备过上滋润的日子,结果没曾想,上了LLCC68模块后发现厂家都不提供51例程?可是“我想踢球啊”!于是上了NUVOTON的船,但是仍然无法顺利使用LLCC68,不得不低头参考厂家资料,于是接触到了雅特力的AT32F421芯片。就因为在看到雅特力的资料里面竟然提供了烧录器的程序,有点感动,这才是钻研技术该有的态度,于是决定吃一餐螃蟹。可能有人会觉得参照STM32就行了,其实差异很多,AT32F413可能可以兼容,但是F421比较难,我是按雅特力的BSP包的风格开发的。

【复位简介】    

     复位,最常见的应该是看门狗跑飞之后复位。但是很多时候程序在某些情况下需要软件执行复位,比如无线通信收发时,主机方要求客户机方重启,以便于同步时间戳之类,或者主机方强制要求客户机重启(就是喜欢这种霸道)。

    AT32F421的复位方式据文件介绍有6种(不用再介绍了吧?),这里主要介绍2看门狗复位和软件复位。

1、看门狗复位

    在AT32F421的BSP固件里面有,位置在

AT32F421_Firmware_Library_V2.1.2\project\at_start_f421\examples\wdt\wdt_reset\

以下截取部分源码,原理就是打开看门狗,设置个定时时间,一旦不喂狗就复位: 

int main(void)
{
  system_clock_config();

  at32_board_init();

  if(crm_flag_get(CRM_WDT_RESET_FLAG) != RESET)
  {
    /* reset from wdt */
    crm_flag_clear(CRM_WDT_RESET_FLAG);

    at32_led_on(LED4);
  }
  else
  {
    /* reset from other mode */
    at32_led_off(LED4);
  }

  /* disable register write protection */
  wdt_register_write_enable(TRUE);

  /* set the wdt divider value */
  wdt_divider_set(WDT_CLK_DIV_4);

  /* set reload value

   timeout = reload_value * (divider / lick_freq )    (s)

   lick_freq    = 40000 Hz
   divider      = 4
   reload_value = 3000

   timeout = 3000 * (4 / 40000 ) = 0.3s = 300ms
  */
  wdt_reload_value_set(3000 - 1);

  /* reload wdt counter */
  wdt_counter_reload();
  
  /* enable wdt */
  wdt_enable();

  while(1)
  {
    /* reload wdt counter */
    wdt_counter_reload();

    at32_led_toggle(LED3);

    delay_ms(200);

    if(at32_button_press() == USER_BUTTON)
    {
      while(1);
    }
  }
}

2、软件复位

    软件复位厂家没有例程(或者仅仅因为我没有找到),经过摸索和到处找资料,发现在

AT32F421_Firmware_Library_V2.1.2\libraries\drivers\src\at32f421_misc.c

 里面有个函数可以直接调用,一行代码搞定:

nvic_system_reset();

这个函数本质是调用了“NVIC_SystemReset()”,应该是M4内核标准的一种调用方法。

以上就是常见的2种软件形式的复位,介绍到这里结束,希望帮助了你。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值