STM32之窗口看门狗例程
#include "stm32f10x.h"
/* RCC时钟配置 */
void RCC_config(void)
{
ErrorStatus HSEStartUpStatus;
/* RCC寄存器设置为默认配置 */
RCC_DeInit();
/* 打开外部高速时钟 */
RCC_HSEConfig(RCC_HSE_ON);
/* 等待外部高速时钟稳定 */
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS)
{
/* 设置HCLK = SYSCLK */
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/* 设置PCLK2 = HCLK */
RCC_PCLK2Config(RCC_HCLK_Div1);
/* 设置PCLK1 = HCLK / 2 */
RCC_PCLK1Config(RCC_HCLK_Div2);
// /* 设置FLASH代码延时 */
// FLASH_SetLatency(FLASH_Latency_2);
// /* 使能预取址缓存 */
// FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/* 设置PLL时钟源为HSE倍频9 72MHz */
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
/* 使能PLL */
RCC_PLLCmd(ENABLE);
/* 等待PLL稳定 */
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
/* 设置PLL为系统时钟源 */
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
/* 等待系统时钟源切换到PLL */
while(RCC_GetSYSCLKSource() != 0x08);
}
}
/* 窗口看门狗配置 */
void WWDG_config(void)
{
/* 打开时钟 */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);
/* 设置WWDG预分频值 */
WWDG_SetPrescaler(WWDG_Prescaler_8);
/* 设置窗口值 */
WWDG_SetWindowValue(0x60);
/* 使能看门狗 */
WWDG_Enable(0x7F);
/* 清除中断标志位 */
WWDG_ClearFlag();
/* 使能中断 */
WWDG_EnableIT();
}
/* 中断向量配置 */
void NVIC_config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* 中断分组2 */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_Init(&NVIC_InitStructure);
}
/* 毫秒延时函数 */
void delay_ms(uint16_t time)
{
uint16_t i = 0;
while(time--)
{
i = 12000;
while(i--);
}
}
/* WWDG中断向量 */
void WWDG_IRQHandler(void)
{
/* 喂狗 */
WWDG_SetCounter(0x7F);
/* 清除中断标志位 */
WWDG_ClearFlag();
}
/* 主函数 */
int main(void)
{
/* RCC时钟配置 */
RCC_config();
/* 中断向量配置 */
NVIC_config();
/* 窗口看门狗配置 */
WWDG_config();
while(1)
{
delay_ms(1000);
}
}
总结
以上是生活随笔为你收集整理的STM32之窗口看门狗例程的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: SecureCRT远程连接Ubuntu,
- 下一篇: RS-485