OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6922|回复: 2

独立看门狗,怎么不复位?

[复制链接]

28

主题

91

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2132
金钱
2132
注册时间
2014-11-18
在线时间
215 小时
发表于 2014-12-9 00:06:22 | 显示全部楼层 |阅读模式
5金钱
[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]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-12-9 00:56:33 | 显示全部楼层
楼主直接下载我们例程测试下吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

80

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2014-11-26
在线时间
0 小时
发表于 2014-12-9 10:24:11 | 显示全部楼层
你的按键检测程序很特别。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-28 05:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表