1:系統時鐘初始化,包括系統時鐘和要開放的IO口或者功能的時鐘配置。
2:IO口初始化,包括引腳,速率,輸入輸出模式等。
3:初始化看門狗。
注意:
注意如何操作喂狗!!!
#include"stm32f10x.h"
#include"stm32f10x_iwdg.h"
#define LED0_OFF GPIO_SetBits(GPIOA,GPIO_Pin_8) // LED0關
#define LED0_ON GPIO_ResetBits(GPIOA,GPIO_Pin_8)//LED0開
//初始化IO端口
void IO_Configuart(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//定義 GPIO_InitStructure爲 GPIO_InitTypeDef結構體類型
//配置GPIOA_8 LED0
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//引腳選擇
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHz速率
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推輓輸出
GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化
//配置GPIOA_13 KEY0
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;//引腳選擇
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHz速率
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU ;//上拉輸入 由於按鍵按下爲低電平
GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化
}
//復位和系統時鐘控制
void RCC_Configuare(void)
{
SystemInit();//頻率設定有system_stm32f10x.c文件中的宏定義 開放某個宏 當調用SystemInit()時即可設置好頻率
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_ClockSecuritySystemCmd(ENABLE);//使能或者失能時鐘安全系統
}
void Delay(u16 speed)
{
u16 i=0;
while(speed!=0)
{
speed--;
for(i=0;i<400;i++);
}
}
//初始化看門狗
void IWDG_Configuare(void)
{
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//使能或者失能對寄存器 IWDG_PR 和 IWDG_RLR 的寫操作
IWDG_SetPrescaler(IWDG_Prescaler_64);//設置 IWDG 預分頻值爲4
IWDG_SetReload(625); //設置 IWDG 重裝載值
IWDG_ReloadCounter();// 按照 IWDG 重裝載寄存器的值重裝載 IWDG 計數器
IWDG_Enable();// 使能 IWDG
}
//不操作時LED閃 說明程序復位了 按鍵按下時常亮說明喂狗了
int main(void)
{
RCC_Configuare();
IO_Configuart();
IWDG_Configuare();
LED0_OFF;
Delay(10000);//延時
LED0_ON;
while(1)
{
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_13)==0)
{
IWDG_ReloadCounter();// 按照 IWDG 重裝載寄存器的值重裝載 IWDG 計數器 此處爲喂狗!!!!!!!
}
// LED0_ON;
// Delay(2000);
// LED0_OFF;
// Delay(2000);
}
}