华大HC32F460WDT中断实验

目录

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_ENWDT_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 评论

留下您的评论.