IAR工程STM8S208RB基于ST标准库独立看门狗(IWDG)

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IAR工程STM8S208RB基于ST标准库独立看门狗(IWDG)相关的知识,希望对你有一定的参考价值。

【IAR工程】STM8S208RB基于ST标准库独立看门狗(IWDG)


📍相关篇《【IAR工程】STM8S208RB基于ST标准库下GPIO点灯示例

📑独立看门狗(IWDG)

独立看门狗模块可以用于解决处理器因为硬件或软件的故障所发生的错误。它由一个内部的128kHz的LSI阻容振荡器作为时钟源驱动,因此即使是主时钟失效时它仍然照常工作。

  • 🔰硬件看门狗功能
    如果在IWDG_HW选择字节中使能了硬件看门狗的功能,在芯片上电时看门狗的功能被自动开启,如果软件不能及时操作键寄存器,则在计数器达到0x00时产生复位.

  • 🔨OPTION Byte选项字节

🔧超时周期和分频系数

  • 超时周期由计数器数值和时钟预分频器决定,下表列出了它们的数值。

🔖从上表图可知,超时周期长短由分频系数决定,分频系数越大,那么超时周期就越长,最多256分频,对应的时间周期是1.02S

🛠独立看门狗配置函数

/*******************************************************************************
**函数名称:void IWDG_Init()
**功能描述:初始化独立看门狗
**入口参数:无
**输出:无
看门狗时钟源:IWDG LSI = 128KHz/2 =64KHz
f = 64KHZ / 256 = 250Hz;T(周期)= 1/f =0.004S
- 重装载值:0xfa ->0.004S * 250 = 1S(秒)
- 最大重装载值 0xff ->0.004S * 252 = 1.02S(秒)
- 重装载值决定喂狗频率
*******************************************************************************/
 void IWDG_Init( void )

    IWDG->KR = 0xCC;//启动IWDG
    IWDG->KR = 0x55;//解除PR以及RLR的写保护
    IWDG->RLR = 0xff;//看门狗计数器重装载数值:250,max=0xff(255)
    IWDG->PR = 0x06;//分频系数256,最长超时时间:1.024S
    IWDG->KR = 0xaa;//刷新IWDG

    //先写0XCC,后写0X55,再写键值,
//    IWDG_Enable();//启动IWDG
//   IWDG_WriteAccessCmd( IWDG_WriteAccess_Enable );//解除PR以及RLR的写保护
//    IWDG_SetReload( 0xff );    //重载寄存器写入255
//    IWDG_SetPrescaler( IWDG_Prescaler_256 ); //64KHZ / 256 = 0.004S
//    IWDG_ReloadCounter();//刷新IWDG
  

📝主程序代码

  • 🔖在没有配置OPTION Byte选项字节的情况下,默认是软件开启方式。如果需要硬件开启的话需要配置OPTION Byte选项字节,并且在后面的烧写程序当中都要在看门狗复位前进行喂狗,否则超时就会复位,推荐还是软件开启方式。
/**************************************************************************************
实验现象:	开始LED1指示灯亮一秒后熄灭,在循环内不断喂狗,如果未在规定时间喂狗将产生复位,复位后程序
			从头开始执行,即LED1指示灯亮一秒后熄灭。没有被复位下,LED2正常1s频率闪烁。

接线说明:	1,STM8S单片机-->LED1
		   		PC7-->LED1
                                PC6-->LED2

注意事项:1、点击“Download active application”按钮,程序下载完成后,即可运行程序。


***************************************************************************************/

#include "stm8s.h"      /*  添加库函数头文件 */
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "time.h"
#include "iwdg.h"
#include <stdio.h>


/* 主函数 */
int main( void )


    disableInterrupts();    //关闭系统中断
    //内部时钟为1分频 = 16Mhz
    CLK_SYSCLKConfig( CLK_PRESCALER_HSIDIV1 );
    USART1_Init( 9600 ); //初始化USART1 , 并设置波特率为9600
    printf( "Hello World \\r\\n" );
    LED_Init();
    TIM2_Init( TIM2_PRESCALER_1, 16000 );
    LED1_ON();
    TIM2_DelayMs( 1000 );
    LED1_OFF();
    /* Clear IWDGF Flag */
//   RST_ClearFlag( RST_FLAG_IWDGF );
    IWDG_Init();//1.024秒后则会产生复位
    enableInterrupts();     //使能系统中断
    while( 1 )
          
        /* Reload IWDG counter */
        IWDG->KR = 0xAA;//喂狗防止系统复位
//       IWDG_ReloadCounter();  //喂狗防止系统复位
        LED2_TOGGLE;
        delay_ms( 978 ); //延时978ms秒,对独立看门狗进行喂狗,防止系统复位
//       TIM2_DelayMs( 965 );//实际延时时间:980ms
    


//是一个宏定义;在固件库中,它的作用就是检测传递给函数的参数是否是有效的参数
void assert_failed( u8* file, u32 line )

    while ( 1 )
    

    

📚工程源码

  • 🔖IAR对中文路径不友好,不要将工程解压在带有中文字符路径的文件夹内直接打开工程编译,这样会导致IAR内部检索文件路径将消耗大量CPU资源。
链接: https://pan.baidu.com/s/1XcTRAnKCM48k1F0o8G6lBw
提取码: hv4u

STM32F407VET6之IAR之ewarm7.80.4工程建立(基于官方固件库1.6版本) 的工程文件目录

最后整理结构如下所示,
├─cmsis
│ startup_stm32f401xx.s
│ startup_stm32f40xx.s
│ startup_stm32f40_41xxx.s
│ startup_stm32f410xx.s
│ startup_stm32f411xe.s
│ startup_stm32f427x.s
│ startup_stm32f427_437xx.s
│ startup_stm32f429_439xx.s
│ startup_stm32f446xx.s
│ startup_stm32f469_479xx.s
│ stm32f4xx_flash.icf

├─inc
│ arm_common_tables.h
│ arm_const_structs.h
│ arm_math.h
│ core_cm0.h
│ core_cm0plus.h
│ core_cm3.h
│ core_cm4.h
│ core_cm4_simd.h
│ core_cm7.h
│ core_cmFunc.h
│ core_cmInstr.h
│ core_cmSimd.h
│ core_sc000.h
│ core_sc300.h
│ main.h
│ misc.h
│ stm32f4xx.h
│ stm32f4xx_adc.h
│ stm32f4xx_can.h
│ stm32f4xx_cec.h
│ stm32f4xx_conf.h
│ stm32f4xx_crc.h
│ stm32f4xx_cryp.h
│ stm32f4xx_dac.h
│ stm32f4xx_dbgmcu.h
│ stm32f4xx_dcmi.h
│ stm32f4xx_dma.h
│ stm32f4xx_dma2d.h
│ stm32f4xx_dsi.h
│ stm32f4xx_exti.h
│ stm32f4xx_flash.h
│ stm32f4xx_flash_ramfunc.h
│ stm32f4xx_fmc.h
│ stm32f4xx_fmpi2c.h
│ stm32f4xx_fsmc.h
│ stm32f4xx_gpio.h
│ stm32f4xx_hash.h
│ stm32f4xx_i2c.h
│ stm32f4xx_it.h
│ stm32f4xx_iwdg.h
│ stm32f4xx_lptim.h
│ stm32f4xx_ltdc.h
│ stm32f4xx_pwr.h
│ stm32f4xx_qspi.h
│ stm32f4xx_rcc.h
│ stm32f4xx_rng.h
│ stm32f4xx_rtc.h
│ stm32f4xx_sai.h
│ stm32f4xx_sdio.h
│ stm32f4xx_spdifrx.h
│ stm32f4xx_spi.h
│ stm32f4xx_syscfg.h
│ stm32f4xx_tim.h
│ stm32f4xx_usart.h
│ stm32f4xx_wwdg.h
│ system_stm32f4xx.h

├─obj
├─project
│ │ Demo_IAR.eww
│ │ IARDemo.dep
│ │ IARDemo.ewd
│ │ IARDemo.ewp
│ │ IARDemo.ewt
│ │
│ ├─Debug
│ │ ├─Exe
│ │ │ IARDemo.out
│ │ │
│ │ ├─List
│ │ │ IARDemo.map
│ │ │
│ │ └─Obj
│ │ IARDemo.pbd.browse
│ │ IARDemo.pbd.linf
│ │ main.o
│ │ main.pbi.xcl
│ │ misc.o
│ │ misc.pbi
│ │ misc.pbi.xcl
│ │ startup_stm32f401xx.o
│ │ startup_stm32f40xx.o
│ │ startup_stm32f40_41xxx.o
│ │ startup_stm32f410xx.o
│ │ startup_stm32f411xe.o
│ │ startup_stm32f427x.o
│ │ startup_stm32f427_437xx.o
│ │ startup_stm32f429_439xx.o
│ │ startup_stm32f446xx.o
│ │ startup_stm32f469_479xx.o
│ │ stm32f4xx_adc.o
│ │ stm32f4xx_adc.pbi
│ │ stm32f4xx_adc.pbi.xcl
│ │ stm32f4xx_can.o
│ │ stm32f4xx_can.pbi
│ │ stm32f4xx_can.pbi.xcl
│ │ stm32f4xx_cec.o
│ │ stm32f4xx_cec.pbi
│ │ stm32f4xx_cec.pbi.xcl
│ │ stm32f4xx_crc.o
│ │ stm32f4xx_crc.pbi
│ │ stm32f4xx_crc.pbi.xcl
│ │ stm32f4xx_cryp.o
│ │ stm32f4xx_cryp.pbi
│ │ stm32f4xx_cryp.pbi.xcl
│ │ stm32f4xx_cryp_aes.o
│ │ stm32f4xx_cryp_aes.pbi
│ │ stm32f4xx_cryp_aes.pbi.xcl
│ │ stm32f4xx_cryp_des.o
│ │ stm32f4xx_cryp_des.pbi
│ │ stm32f4xx_cryp_des.pbi.xcl
│ │ stm32f4xx_cryp_tdes.o
│ │ stm32f4xx_cryp_tdes.pbi
│ │ stm32f4xx_cryp_tdes.pbi.xcl
│ │ stm32f4xx_dac.o
│ │ stm32f4xx_dac.pbi
│ │ stm32f4xx_dac.pbi.xcl
│ │ stm32f4xx_dbgmcu.o
│ │ stm32f4xx_dbgmcu.pbi
│ │ stm32f4xx_dbgmcu.pbi.xcl
│ │ stm32f4xx_dcmi.o
│ │ stm32f4xx_dcmi.pbi
│ │ stm32f4xx_dcmi.pbi.xcl
│ │ stm32f4xx_dma.o
│ │ stm32f4xx_dma.pbi
│ │ stm32f4xx_dma.pbi.xcl
│ │ stm32f4xx_dma2d.o
│ │ stm32f4xx_dma2d.pbi
│ │ stm32f4xx_dma2d.pbi.xcl
│ │ stm32f4xx_dsi.o
│ │ stm32f4xx_dsi.pbi
│ │ stm32f4xx_dsi.pbi.xcl
│ │ stm32f4xx_exti.o
│ │ stm32f4xx_exti.pbi
│ │ stm32f4xx_exti.pbi.xcl
│ │ stm32f4xx_flash.o
│ │ stm32f4xx_flash.pbi
│ │ stm32f4xx_flash.pbi.xcl
│ │ stm32f4xx_flash_ramfunc.o
│ │ stm32f4xx_flash_ramfunc.pbi
│ │ stm32f4xx_flash_ramfunc.pbi.xcl
│ │ stm32f4xx_fmc.pbi.xcl
│ │ stm32f4xx_fmpi2c.o
│ │ stm32f4xx_fmpi2c.pbi
│ │ stm32f4xx_fmpi2c.pbi.xcl
│ │ stm32f4xx_fsmc.o
│ │ stm32f4xx_fsmc.pbi
│ │ stm32f4xx_fsmc.pbi.xcl
│ │ stm32f4xx_gpio.o
│ │ stm32f4xx_gpio.pbi
│ │ stm32f4xx_gpio.pbi.xcl
│ │ stm32f4xx_hash.o
│ │ stm32f4xx_hash.pbi
│ │ stm32f4xx_hash.pbi.xcl
│ │ stm32f4xx_hash_md5.o
│ │ stm32f4xx_hash_md5.pbi
│ │ stm32f4xx_hash_md5.pbi.xcl
│ │ stm32f4xx_hash_sha1.o
│ │ stm32f4xx_hash_sha1.pbi
│ │ stm32f4xx_hash_sha1.pbi.xcl
│ │ stm32f4xx_i2c.o
│ │ stm32f4xx_i2c.pbi
│ │ stm32f4xx_i2c.pbi.xcl
│ │ stm32f4xx_iwdg.o
│ │ stm32f4xx_iwdg.pbi
│ │ stm32f4xx_iwdg.pbi.xcl
│ │ stm32f4xx_lptim.o
│ │ stm32f4xx_lptim.pbi
│ │ stm32f4xx_lptim.pbi.xcl
│ │ stm32f4xx_ltdc.o
│ │ stm32f4xx_ltdc.pbi
│ │ stm32f4xx_ltdc.pbi.xcl
│ │ stm32f4xx_pwr.o
│ │ stm32f4xx_pwr.pbi
│ │ stm32f4xx_pwr.pbi.xcl
│ │ stm32f4xx_qspi.o
│ │ stm32f4xx_qspi.pbi
│ │ stm32f4xx_qspi.pbi.xcl
│ │ stm32f4xx_rcc.o
│ │ stm32f4xx_rcc.pbi.xcl
│ │ stm32f4xx_rng.o
│ │ stm32f4xx_rng.pbi.xcl
│ │ stm32f4xx_rtc.o
│ │ stm32f4xx_rtc.pbi.xcl
│ │ stm32f4xx_sai.o
│ │ stm32f4xx_sai.pbi.xcl
│ │ stm32f4xx_sdio.o
│ │ stm32f4xx_sdio.pbi.xcl
│ │ stm32f4xx_spdifrx.o
│ │ stm32f4xx_spdifrx.pbi.xcl
│ │ stm32f4xx_spi.o
│ │ stm32f4xx_spi.pbi.xcl
│ │ stm32f4xx_syscfg.o
│ │ stm32f4xx_syscfg.pbi.xcl
│ │ stm32f4xx_tim.o
│ │ stm32f4xx_tim.pbi.xcl
│ │ stm32f4xx_usart.o
│ │ stm32f4xx_usart.pbi.xcl
│ │ stm32f4xx_wwdg.o
│ │ stm32f4xx_wwdg.pbi.xcl
│ │ system_stm32f4xx.o
│ │ system_stm32f4xx.pbi.xcl
│ │
│ └─settings
│ Demo_IAR.wsdt
│ IARDemo.crun
│ IARDemo.Debug.cspy.bat
│ IARDemo.Debug.driver.xcl
│ IARDemo.Debug.general.xcl
│ IARDemo.dni

├─src
│ misc.c
│ stm32f4xx_adc.c
│ stm32f4xx_can.c
│ stm32f4xx_cec.c
│ stm32f4xx_crc.c
│ stm32f4xx_cryp.c
│ stm32f4xx_cryp_aes.c
│ stm32f4xx_cryp_des.c
│ stm32f4xx_cryp_tdes.c
│ stm32f4xx_dac.c
│ stm32f4xx_dbgmcu.c
│ stm32f4xx_dcmi.c
│ stm32f4xx_dma.c
│ stm32f4xx_dma2d.c
│ stm32f4xx_dsi.c
│ stm32f4xx_exti.c
│ stm32f4xx_flash.c
│ stm32f4xx_flash_ramfunc.c
│ stm32f4xx_fmc.c
│ stm32f4xx_fmpi2c.c
│ stm32f4xx_fsmc.c
│ stm32f4xx_gpio.c
│ stm32f4xx_hash.c
│ stm32f4xx_hash_md5.c
│ stm32f4xx_hash_sha1.c
│ stm32f4xx_i2c.c
│ stm32f4xx_iwdg.c
│ stm32f4xx_lptim.c
│ stm32f4xx_ltdc.c
│ stm32f4xx_pwr.c
│ stm32f4xx_qspi.c
│ stm32f4xx_rcc.c
│ stm32f4xx_rng.c
│ stm32f4xx_rtc.c
│ stm32f4xx_sai.c
│ stm32f4xx_sdio.c
│ stm32f4xx_spdifrx.c
│ stm32f4xx_spi.c
│ stm32f4xx_syscfg.c
│ stm32f4xx_tim.c
│ stm32f4xx_usart.c
│ stm32f4xx_wwdg.c
│ system_stm32f4xx.c

└─user
main.c
stm32f4xx_it.c
system_stm32f4xx.c

以上是关于IAR工程STM8S208RB基于ST标准库独立看门狗(IWDG)的主要内容,如果未能解决你的问题,请参考以下文章

IAR工程STM8S208RB基于ST标准库蜂鸣器(BEEP)驱动

STM8S系列基于IAR标准外设printf输出demo

IAR for STM8系列教程_新建软件工程详细过程

stm8s的iar如何和谐

STM8S903K3T6C基于ST Visual Develop开发输入输出按键检测示例

开发工具之IAR新建STM8工程