[mw_shl_code=c,true]代码如下,不喂狗,则应该复位,为什么不复位?[/mw_shl_code]
[mw_shl_code=c,true]#include"stm32f10x.h"
void delay_init()
{
SysTick->LOAD=0x01; //自动重载
SysTick->VAL=0xFFFFFE;//自动重载值
SysTick->CTRL=0x05; //选择内部时钟,不产生中断,并使能定时器
}
void delay_ms(int x)
{
u32 temp=0;
delay_init();
while(x*72000!=temp)
{
if((SysTick->CTRL>>16)==1)
temp+=1;
}
SysTick->CTRL=0x00;
}
/*
重新配置系统时钟,选择外部8MHZ时钟,9倍频
AHB=Div1,APB1=Div2,APB2=Div1
*/
void Select_HSEforSysclk()
{
RCC_DeInit(); //将外设RCC寄存器重新设置为缺省值
RCC_HSEConfig(RCC_HSE_ON); //选择外部高速时钟
while(RCC_WaitForHSEStartUp()!=SUCCESS);//等待外部高速时钟稳定
RCC_HCLKConfig(RCC_SYSCLK_Div1); //设置AHB时钟为系统时钟
RCC_PCLK1Config(RCC_SYSCLK_Div2); //设置APB1时钟为=Div2
RCC_PCLK2Config(RCC_SYSCLK_Div1); //设置APB2时钟为=Div1;
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//设置HSE为PLL的输入,选择9倍频
RCC_PLLCmd(ENABLE); //使能PLL
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)!=SET);//等待PLL就绪
FLASH_SetLatency(FLASH_Latency_2); //FLASH延时两个周期
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//设置PLL作为系统时钟
while(RCC_GetSYSCLKSource()!=0x08); //判断PLL是否为系统时钟
}
void iwdg_init()
{
/* 溢出时间:Tout=((4*2^prer)*rlr)/40
其中:prer为看门狗时钟预分频值
rlr为看门狗的重装载值
*/
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//使能对预分频值和重装载值的写操作
IWDG_SetPrescaler(IWDG_Prescaler_4); //设置与分频值
IWDG_SetReload(625);//设置重装载值
IWDG_ReloadCounter();//重装载计数器
IWDG_Enable();//使能独立看门狗
}
int main(void)
{
u32 i=0;
GPIO_InitTypeDef GPIO_InitStructure;//定义结构体类型的变量,必须放在最前面
Select_HSEforSysclk(); //调用时钟初始化函数
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD,ENABLE);//使能复用IO时钟,PA,PD端口时钟
RCC_LSICmd(ENABLE);//使能LSI
//RCC->CSR=0x01;//使能LSI
while((RCC->CSR>>1)&0x01==0); //等待LSI稳定
RCC->CSR|=1<<29; //使能独立看门狗复位
/* 设置PA8为通用推挽输出,速度为50MHZ */
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
/* 设置PD2为通用推挽输出,速度为50MHZ */
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
GPIO_Init(GPIOD,&GPIO_InitStructure);
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
//PA0,默认下拉;
//GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//禁止JTAG,开启SWD,PA15JTDI
/* 设置PA0为下拉输入模式 */
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//delay_ms(100);//延时500ms
iwdg_init();
while(1)
{
if((GPIOA->IDR)!=0x01)//若WK_UP被按下,则喂狗
IWDG->KR=0xAAAA;
delay_ms(100);[/mw_shl_code]
[mw_shl_code=c,true] }
}
[/mw_shl_code]
|