zhyinch
2021-04-06 a33e16c68f4bd99fe74e5ae47aa5fdcb762071c2
Ô´Âë/ºËÐİå/Src/main.c
@@ -12,7 +12,51 @@
#include "ADC.h"
//#define DEBUG_MODE
/*
 * è®¾ç½® IWDG çš„è¶…æ—¶æ—¶é—´
 * Tout = prv/40 * rlv (s)
 *      prv可以是[4,8,16,32,64,128,256]
 * prv:预分频器值,取值如下:
 *     @arg IWDG_Prescaler_4: IWDG prescaler set to 4
 *     @arg IWDG_Prescaler_8: IWDG prescaler set to 8
 *     @arg IWDG_Prescaler_16: IWDG prescaler set to 16
 *     @arg IWDG_Prescaler_32: IWDG prescaler set to 32
 *     @arg IWDG_Prescaler_64: IWDG prescaler set to 64
 *     @arg IWDG_Prescaler_128: IWDG prescaler set to 128
 *     @arg IWDG_Prescaler_256: IWDG prescaler set to 256
 *
 *        ç‹¬ç«‹çœ‹é—¨ç‹—使用LSI作为时钟。
 *        LSI çš„频率一般在 30~60KHZ ä¹‹é—´ï¼Œæ ¹æ®æ¸©åº¦å’Œå·¥ä½œåœºåˆä¼šæœ‰ä¸€å®šçš„æ¼‚移,我
 *        ä»¬ä¸€èˆ¬å– 40KHZ,所以独立看门狗的定时时间并一定非常精确,只适用于对时间精度
 *        è¦æ±‚比较低的场合。
 *
 * rlv:重装载寄存器的值,取值范围为:0-0XFFF
 * å‡½æ•°è°ƒç”¨ä¸¾ä¾‹ï¼š
 * IWDG_Config(IWDG_Prescaler_64 ,625);  // IWDG 1s è¶…时溢出
 *                        ï¼ˆ64/40)*625 = 1s
 */
void IWDG_Config(uint8_t prv ,uint16_t rlv)
{
    // ä½¿èƒ½ é¢„分频寄存器PR和重装载寄存器RLR可写
    IWDG_WriteAccessCmd( IWDG_WriteAccess_Enable );
    // è®¾ç½®é¢„分频器值
    IWDG_SetPrescaler( prv );
    // è®¾ç½®é‡è£…载寄存器值
    IWDG_SetReload( rlv );
    // æŠŠé‡è£…载寄存器的值放到计数器中
    IWDG_ReloadCounter();
    // ä½¿èƒ½ IWDG
    IWDG_Enable();
}
void IWDG_Feed(void)
{
    IWDG_ReloadCounter();
}
void Device_Init(void)
{
   RCC_Configuration();
@@ -27,7 +71,8 @@
   Uart1_Init();
   Spi_Init();
   ADC_Configuration();
   IWDG_Config(IWDG_Prescaler_128 ,4095);   //10s
    IWDG_Feed();
   GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
}
u8 anchor_type;
@@ -214,11 +259,9 @@
      //   Delay_ms(100);
         SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader   
   }
         if(g_com_map[CNT_REBOOT]==1)
      if(g_com_map[CNT_REBOOT]==1)
      {
         g_com_map[CNT_REBOOT]=0;
         g_com_map[MAP_SIGN_INDEX]=0;
         save_com_map_to_flash();
         FactorySettings();
         delay_ms(100);
         SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader   
      }
@@ -229,12 +272,13 @@
         delay_ms(100);
            SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader   
      }
            if(g_com_map[MAP_SIGN_INDEX]!=0x55AA||g_com_map[COM_INTERVAL]==0)
        if(g_com_map[MAP_SIGN_INDEX]!=0x55AA||g_com_map[COM_INTERVAL]==0)
      {
            SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader   
      }
   }
int main(void)
{