目录
1.实验目标
2.实验准备
3.硬件分析
4.关键代码
5.主流程图
6. 实验过程
1.实验目标
本次实验设置软件启动WDT,并设置约1秒触发一次WDT计数溢出中断,通过KEY2循环切换工作模式(正常模式、睡眠模式),正常模式LED1闪烁,睡眠模式LED2闪烁。
2.实验准备
硬件搭建:ZW-HC32F460-BZ标准版开发板1套
软件搭建:MDK5.22
3.硬件分析
板载4个LED功能指示灯,LED1、LED2、LED3、LED4分别对应PA5、PA6、PA7、PA8引脚。原理图如下所示。
从图中可以看出引脚输出低电平,对应LED灯被点亮;反之熄灭。
板载4个按键,KEY1、KEY2、KEY3、KEY4分别对应PB11、PE8、PE7、PH2引脚。
4.关键代码
WDT中断初始化函数
函数原型: void Wdt_Nvic_Init(void)
功能说明: WDT中断初始化
输入参数: 无
输出参数: 无
特殊备注: 无
void Wdt_Nvic_Init(void){stc_wdt_init_t stcWdtInit;stc_irq_regi_conf_t stcIrqRegiConf;/* configure structure initialization */MEM_ZERO_STRUCT(stcWdtInit);MEM_ZERO_STRUCT(stcIrqRegiConf);/* WDT structure parameters configure */stcWdtInit.enClkDiv = WdtPclk3Div1024;stcWdtInit.enCountCycle = WdtCountCycle65536;stcWdtInit.enRefreshRange = WdtRefresh0To100Pct; //刷新计数区域0~100%stcWdtInit.enSleepModeCountEn = Enable; //stcWdtInit.enRequestType = WdtTriggerInterruptRequest;//中断请求WDT_Init(&stcWdtInit);/* Select Int source WDT */stcIrqRegiConf.enIntSrc = INT_WDT_REFUDF;/* Register WDT Int to Vect.No.006 */stcIrqRegiConf.enIRQn = Int006_IRQn;/* Callback function */stcIrqRegiConf.pfnCallback = &Wdt_IrqCallback;/* Registration IRQ */enIrqRegistration(&stcIrqRegiConf);/* Clear pending */NVIC_ClearPendingIRQ(stcIrqRegiConf.enIRQn);/* Set priority */NVIC_SetPriority(stcIrqRegiConf.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);/* Enable NVIC */NVIC_EnableIRQ(stcIrqRegiConf.enIRQn);}WDT中断函数函数原型: void Wdt_IrqCallback(void)功能说明: WDT中断函数输入参数: 无输出参数: 无特殊备注: 无static void Wdt_IrqCallback(void){en_flag_status_t enFlagSta;Ddl_Delay1ms(2u);enFlagSta = WDT_GetFlag(WdtFlagCountUnderflow);/* WDT underflow interrupt */if (Set == enFlagSta){WDT_ClearFlag(WdtFlagCountUnderflow);/* Normal mode */if (0u == u8ExIntCnt){LedToggle(LED1);}/* Sleep mode */else{LedToggle(LED2);}}WDT_RefreshCounter();}
5.主流程图
6. 实验过程
【第一步:新建/配置工程】
参见2.2.3节,将工程模板复制到实验目录下,将工程名改为wdt_nvic。
勾选FWLibCfg.h配置中的CLK_EN、EFM_EN、GPIO_EN、PWC_EN、SRAM_EN、UTILITY_EN、EVENT_NMI_SWI_EN、WDT_EN选项
【第二步:添加外部中断模块驱动】
本次配置与实验4外部中断实验一致,请自行操作。
【第三步:添加LED模块驱动】
LED驱动及配置与实验1跑马灯实验一致,请自行操作。
【第四步:添加WDT模块驱动】
将wdt_nvic.c和wdt_nvic.h复制到\实验14WDT中断实验\Hardware\Peripheral路径下,同时将wdt_nvic.c添加到工程中Hardware/Peripheral下。
【第五步:初始化编程】
1)添加wdt_nvic.h头文件
在main.c文件中先添加wdt_nvic.h头文件。
#include "wdt_nvic.h"
2)WDT中断初始化
在主函数main中添加WDT中断初始化函数。
Wdt_Nvic_Init();
【第六步:WDT定时中断功能编程】
while (1){/* Sleep mode */if (1u == u8ExIntCnt){PWC_EnterSleepMd();__WFI();}}
这个变量(u8ExIntCnt)是按键2外部中断记录按键次数的,如果按键按下去一次,则HC32进入到睡眠模式,LED2闪烁。再按一次按键,外部中断会让HC32退出睡眠模式,u8ExIntCnt变量清零,HC32变为正常工作模式,LED1正常模式下闪烁。
【第七步:下载验证】
连接好硬件,编译下载运行该程序,正常工作状态下LED1闪烁,按下按键KEY2,进入睡眠模式,睡眠模式LED2闪烁,再按一次按键KEY2,回到工作状态后LED1闪烁。
本文链接:https://my.lmcjl.com/post/8807.html
4 评论