119 lines
3.1 KiB
C
119 lines
3.1 KiB
C
/********************************** (C) COPYRIGHT *******************************
|
|
* File Name : main.c
|
|
* Author : WCH
|
|
* Version : V1.0.0
|
|
* Date : 2021/06/06
|
|
* Description : Main program body.
|
|
*********************************************************************************
|
|
* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
|
|
* Attention: This software (modified or not) and binary are used for
|
|
* microcontroller manufactured by Nanjing Qinheng Microelectronics.
|
|
*******************************************************************************/
|
|
|
|
/*
|
|
*@Note
|
|
*Independent watchdog routine:
|
|
*This routine demonstrates the pull-down input of the PA0 pin. When the input is high,
|
|
*it will feed the dog. If you don't feed the dog,Then trigger independent watchdog reset after 3.2s.
|
|
*
|
|
*/
|
|
|
|
#include "debug.h"
|
|
|
|
#define KEY0 GPIO_ReadInputDataBit( GPIOA, GPIO_Pin_0) //PA0
|
|
|
|
/*********************************************************************
|
|
* @fn KEY_Init
|
|
*
|
|
* @brief Initializes KEY GPIO.
|
|
*
|
|
* @return none
|
|
*/
|
|
void KEY_Init(void)
|
|
{
|
|
GPIO_InitTypeDef GPIO_InitStructure={0};
|
|
|
|
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE );
|
|
|
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
|
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
|
|
GPIO_Init( GPIOA, &GPIO_InitStructure);
|
|
}
|
|
|
|
/*********************************************************************
|
|
* @fn KEY_PRESS
|
|
*
|
|
* @brief Key processing funcation.
|
|
*
|
|
* @return 0 - Press the key.
|
|
* 1 - Release Key.
|
|
*/
|
|
u8 KEY_PRESS(void)
|
|
{
|
|
if(KEY0 == 1)
|
|
{
|
|
Delay_Ms(10);
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
/*********************************************************************
|
|
* @fn IWDG_Init
|
|
*
|
|
* @brief Initializes IWDG.
|
|
*
|
|
* @param IWDG_Prescaler: specifies the IWDG Prescaler value.
|
|
* IWDG_Prescaler_4: IWDG prescaler set to 4.
|
|
* IWDG_Prescaler_8: IWDG prescaler set to 8.
|
|
* IWDG_Prescaler_16: IWDG prescaler set to 16.
|
|
* IWDG_Prescaler_32: IWDG prescaler set to 32.
|
|
* IWDG_Prescaler_64: IWDG prescaler set to 64.
|
|
* IWDG_Prescaler_128: IWDG prescaler set to 128.
|
|
* IWDG_Prescaler_256: IWDG prescaler set to 256.
|
|
* Reload: specifies the IWDG Reload value.
|
|
* This parameter must be a number between 0 and 0x0FFF.
|
|
*
|
|
* @return none
|
|
*/
|
|
void IWDG_Feed_Init(u16 prer, u16 rlr)
|
|
{
|
|
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
|
|
IWDG_SetPrescaler(prer);
|
|
IWDG_SetReload(rlr);
|
|
IWDG_ReloadCounter();
|
|
IWDG_Enable();
|
|
}
|
|
/*********************************************************************
|
|
* @fn main
|
|
*
|
|
* @brief Main program.
|
|
*
|
|
* @return none
|
|
*/
|
|
int main(void)
|
|
{
|
|
SystemCoreClockUpdate();
|
|
USART_Printf_Init(115200);
|
|
printf("SystemClk:%d\r\n",SystemCoreClock);
|
|
printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );
|
|
|
|
Delay_Init();
|
|
KEY_Init();
|
|
printf("IWDG test...\r\n");
|
|
Delay_Ms(1000);
|
|
|
|
IWDG_Feed_Init( IWDG_Prescaler_32, 4000 ); // 3.2s IWDG reset
|
|
|
|
while(1)
|
|
{
|
|
if( KEY_PRESS() == 1 ) //PA0
|
|
{
|
|
printf("Feed dog\r\n");
|
|
IWDG_ReloadCounter(); //Feed dog
|
|
Delay_Ms(10);
|
|
}
|
|
}
|
|
}
|