#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_iwdg.h"
///////////////////////////////////
void RCC_Configuration(void);
void GPIO_Configuration(void);
void delay(u32 time);
///////////////////////////////////
//KR:键值寄存器
//PR: 预分频寄存器
//RLR: 重装载寄存器
int main( )
{
RCC_Configuration();
GPIO_Configuration();
delay(600000);
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //在KR中写入0x5555,取消写保护
IWDG_SetPrescaler(IWDG_Prescaler_4); //设置预分频值
IWDG_SetReload(625); //设置重装载值
IWDG_ReloadCounter(); //往计数器重装值
IWDG_Enable(); //启动独立开门狗 溢出时间1000ms
GPIO_ResetBits(GPIOA, GPIO_Pin_8); //点亮LED0
while(1)
{
if(!(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_13))) //检测 KEY1是否按下
IWDG_ReloadCounter(); //喂狗
delay(100);
}
}
////////////////////////////////////
void RCC_Configuration(void)
{
ErrorStatus HSEStartUpStatus;
RCC_DeInit(); //时钟控制寄存器全部恢复默认值
RCC_HSEConfig(RCC_HSE_ON); //外部高速时钟源开启(8M晶振)
HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待外部时钟就绪
if(HSEStartUpStatus == SUCCESS) //如果时钟启动成功
{
RCC_HCLKConfig(RCC_SYSCLK_Div1); //定义AHB设备时钟为系统时钟1分频
RCC_PCLK2Config(RCC_HCLK_Div1); //定义AHB2设备时钟为HCLK时钟1分频
RCC_PCLK1Config(RCC_HCLK_Div2); //定义AHB1设备时钟为HCLK时钟2分频
FLASH_SetLatency(FLASH_Latency_2); //设定内部FLASH的的延时周期为2周期
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//使能FLASH预存取缓冲区
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //配置PLL时钟为外部高速时钟的9倍频,8MHz * 9 = 72 MHz
RCC_PLLCmd(ENABLE); //使能PLL时钟
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) //等待PLL时钟设置完成准备就绪
{
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //使用PLL时钟作为系统时钟源
while(RCC_GetSYSCLKSource() != 0x08) //返回系统所用时钟源确认为外部高速晶振,8M晶振。
{
}
}
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
}
//////////////////////////
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*---KEY配置---*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
GPIO_Init(GPIOA, &GPIO_InitStructure); //PA13->KEY0
/*---LED配置---*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure); //PA8->LED0
GPIO_SetBits(GPIOA, GPIO_Pin_8); //熄灭LED0
}
///////////////////////////////////
void delay(u32 time)
{
while(time--);
} |