一、简介
本文主要介绍如何对 LKS_EVB_MCU453_V2.0 开发板 IWDG 看门狗测试。
硬件平台:LKS_EVB_MCU453_V2.0 开发板、LPCLINK2 Debugger or Jlink。
软件平台:Keil
参考例程:LKS32MC45x_PeripDemo_v2.5
图1 LKS 板
图2 LPC
二、Demo 示例
按照如图所示路径双击打开 Demo 文件。
图3
图4 出自 LKS32MC45x_PeripDemo_v2.5
2.1 主函数
如果返回值是 start_PRES,也就是按下 start 键,执行看门狗喂狗操作,重新加载看门狗的复位时间(3s)。如果返回值是 stop PRES,也就是按下 stop 键,则 P4_5 置 1,点亮 LED1。
2.1.1 key = GPIO_KEY_Scan(0):调用 GPIO_KEY_Scan 函数扫描按键状态。输入参数:mode:0,不支持连续按;1,支持连续按。这里是选择不支持连续按。函数返回的值将被存储在 key 变量中。
2.1.2case start_PRES:如果 key 的值等于 start_PRES(表示“开始”按键被按下),则调用 IWDG_FeedDog() 函数。这通常是为了重置看门狗定时器,防止系统复位。
2.1.3case stop_PRES:如果 key 的值等于 stop_PRES(表示“停止”按键被按下),则调用 GPIO_SetBits(GPIO4, GPIO_Pin_5):设置 GPIO4 的第 5 个引脚为高电平,用来点亮 LED1。
2.2 函数 Hardware_init()
进入函数 Hardware_init(),配置硬件初始化相关内容
图5出自 LKS32MC45x_PeripDemo_v2.5
这段代码是一个硬件初始化函数,主要的步骤包括:
2.2.1关闭中断:__disable_irq(); 禁用所有中断。这是为了确保在进行硬件初始化时,不会有中断打断当前的初始化过程,从而避免潜在的竞争条件和不一致的状态。
2.2.2 使能系统寄存器写操作:SYS_WR_PROTECT = 0x7a83; 解除对系统寄存器的写保护,以便可以对系统寄存器进行配置和初始化。依据来自以下:
图6 出自LKS32MC45x_DataSheet_V1.53.pdf
2.2.2 GPIO 初始化:
GPIO_init(); 调用一个函数来初始化通用输入输出(GPIO)端口,设置它们的工作模式和状态。
图7 出自LKS32MC45x_PeripDemo_v2.5
P0.7:配置为输入模式,用于连接一个按键(start1)。GPIO_Mode_IN 表示该引脚作为输入,GPIO_AF_GPIO 表示该引脚的功能为普通 GPIO。
P4.7:同样配置为输入模式,用于连接另一个按键(stop1)。
P4.5:配置为输出模式,用于控制一个 LED(LED1)。GPIO_Mode_OUT 表示该引脚作为输出。
所以:
输入引脚:P0.7 和 P4.7 被配置为输入模式,用于读取按键状态。
输出引脚:P4.5、P0.14 和 P0.13 被配置为输出模式,用于控制 LED 的开关状态。
2.2.3 看门狗初始化 IWDG_init():
调用看门狗定时器初始化函数,配置看门狗的参数。看门狗用于监控系统的运行状态,确保在系统出现故障时能够自动复位。
图8 出自LKS32MC45x_PeripDemo_v2.5
DWK_EN:设置为 DISABLE,表示禁用深度休眠定时唤醒功能。这意味着在深度休眠模式下,看门狗不会自动唤醒系统。
WDG_EN:设置为 ENABLE,表示启用独立看门狗。这是启动看门狗的关键步骤。
WTH:设置为 0,表示看门狗的定时唤醒时间。看门狗使用 32kHz RC 时钟从 IWDG RTH 开始计数,递减计数至 IWDG_WTH 产生唤醒信号。
RTH:设置为 0x1f000,表示复位时间。这个值对应的复位时间为 3 秒。计算方式是将 0x1f000 除以 32K(32768),得出看门狗的超时时间。
总结
通过配置 DWK_EN、WDG_EN、WTH 和 RTH 等参数,用户可以根据具体需求调整看门狗的行为。
2.2.4 函数 GPIO_KEY_Scan()
可以看到,这里是用于扫描按键状态的函数,key_up=1 代表按键松开。先把按键标志置 1,然后在 if 语句里判断,key_start 或着 key_stop 中其中一个按下,执行 if 里的操作,首先把按键标志置 0,代表按键按下,接下来判断是 key_start 按下还是 key_stop 按下,如果是 key_start 按下,则返回值 start_PRES,如果是 key_stop 按下,则返回值 stop_PRES。两者都不是,判断按键 start 和按键 stop 有没有按下,都没有按下,则按键标志置 1 ,返回 0。
图9 出自LKS32MC45x_PeripDemo_v2.5
图10 出自LKS32MC45x_PeripDemo_v2.5
2.2.5 IWDG_FeedDog():
图10出自LKS32MC45x_PeripDemo_v2.5
图11 出自 LKS32MC45x_UM_v1.54
IWDG->PSW = PSW_IWDG_PRE:
这行代码将 PSW 寄存器设置为 0XA6B4。写入密码解锁之后进行写操作。
图12 出自 LKS32MC45x_UM_v1.54
IWDG->CLR = PSW_IWDG_CLR;:
这行代码将 CLR 寄存器设置为 PSW_IWDG_CLR。CLR 寄存器通常用于重置看门狗计时器。
PSW_IWDG_CLR 值为 0x798D,对 B[0] 写 1,重置 WDT 计数器,开始重新计数 3s 灭灯。
三、硬件连接方式
图13 出自LKS_EVB_MCU453_V2.0
LKS 采用 SWD 接口方式连接,在板子上有接出 SWD 烧录口如图所示。SWD 的接口定义如图所示,按照如图进行连接。
3.1 LPC Debugger 方式
图14
如图所示,LPC Debugger 板和 LKS_EVB_MCU453_V2.0 板连接,通过板上接口 GND、DIO、CLK、3.3V 与 SWD 的对应接口相连。这是本文选择的调试方式。
由于板子没有 LED2 相关电路,所以我们需要外接一个 LED2 以用来方便观察现象,如图所示,我借用了另外一块板的 LED 部分,连接如图。对应的原理图如图:
图15
图16 出自LKS_EVB_MCU453_V2.0
红色线:接 LED1 网络
灰色线:接 LED2 网络(由于此篇没有用到 LED2 所以可以不接)
紫色、橙色线:接 GND 网络
四、编译和下载
图17
- 左:构建目标文件
- 右:构建所有文件
- 下载代码到闪存
- 启动调试
先按 1 编译,2 下载到板上即可。
五、实验现象
图18
按下 stop 键,可以看到左下角外接灯板 LED1 灯亮。
图19
取下 stop 键,3s 之后 LED1 灯灭。
图20
重新按下 stop 点亮灯,然后 3s 内不停按下 start 键,可以看到灯一直亮。
六、总结
此篇文章的重要步骤:
按键扫描:程序通过 GPIO_KEY_Scan 函数不断扫描按键状态。
看门狗管理:当“开始”按键被按下时,程序会重置看门狗定时器,也就是常说的喂狗。
LED 控制:当“停止”按键被按下时,程序会设置 GPIO 引脚,点亮 LED。
无限循环:主函数在一个无限循环中运行,持续监测按键输入并执行相应的操作。按键不按下:LED 亮 3s 复位灯灭。开始按键按下看门狗喂狗,防止程序复位,LED 常亮。
七、参考文献
[1] LKS32MC45x_DataSheet_V1.54.pdf
[2] SDK:LKS32MC45x_PeripDemo_v2.5
[3] 原理图:LKS_EVB_MCU453_V2.0
[4] LKS32MC45x_UM_v1.54
欢迎在点击此处前往博文下方留言评论,我们会及时回复您的问题。
如有更多需求,欢迎联系大联大世平集团 ATU 部门:atu.sh@wpi-group.com 作者:小梨