STM32F10X?

Tags: 系統, 大學, 時鐘,

IWDG(獨立看門狗)可以在系統主時鐘發生異常時,從APB1時鐘分頻後得到時鐘驅動。當程式發生異常時如過早或過遲的操作,IWDG的存在可快速復位CPU從而重新執行程式,在工業現場,獨立看門狗的存在,可以快速發現異常並加以處理,對現場安全可靠的執行具有無可替代的意義。

工具/原料

Keil uVision4軟體

STM32F10X系列微控制器

J-Link v8偵錯程式

方法/步驟

建立工程

開啟Keil uVision4軟體,建立工程如下:

STM32F10X IWDG的使用方法

編寫程式碼

在主檔案(APP)層中編寫如下程式碼:

#include "stm32f10x.h"

#include "stdio.h"

#include "string.h"

#ifdef __GNUC__

#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)

#else

#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

#endif

void GPIO_Configuration(void);

void IWDG_Configuration(uint8_t pres, uint16_t reload);

void IWDG_FeedWatchdog(void);

void NVIC_Configuration(void);

void Delay(uint32_t nCount);

int main(void)

{

NVIC_Configuration();

GPIO_Configuration();

IWDG_Configuration(4,625);

while(1) {

if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)){

IWDG_FeedWatchdog();

}

else {

if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)){

GPIO_SetBits(GPIOA,GPIO_Pin_1);

}

else{

GPIO_ResetBits(GPIOA,GPIO_Pin_1);

}

}

}

}

void GPIO_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

// GPIOA.0/.1 Push-Pull Output

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 GPIO_Pin_1;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOA,&GPIO_InitStructure);

}

void Delay (uint32_t nCount)

{

for(; nCount != 0; nCount--);

}

void IWDG_Configuration(uint8_t pres, uint16_t reload)

{

IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

IWDG_SetPrescaler(pres);

IWDG_SetReload(reload);

IWDG_ReloadCounter();

IWDG_Enable();

}

void IWDG_FeedWatchdog(void)

{

IWDG_ReloadCounter();

}

void NVIC_Configuration (void)

{

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

}

#ifdef USE_FULL_ASSERT

void assert_failed(uint8_t* file, uint32_t line)

{

while(1) {

}

}

#endif

下載測試

當軟體模擬時,可以通過改變 GPIOA.0 的電平,觀測 GPIOA.1 以及CPU是否被複位來檢測IWDG是否被啟動。

注意事項

一般初學者在學習STM32微控制器時並不需要開啟IWDG,預設情況下是關閉的。

IWDG實質上是定時/計數器,工作時還是需要時鐘配置的!

相關問題答案