S32K148 SDK3.0 PE配置 看门狗(WDOG)

前言

S32K1xx Series Reference Manual的pdf文档23章给出了看门狗的框图:
在这里插入图片描述
先不用细看, 下面结合PE配置看. 本文中用到LPUART2(PTA8, PTA9), 用的J-Link调试, S32K148_SDK 3.0.0.

建立工程

打开S32 Design Studio for ARM, 接下来步骤:

  • File -> New -> S32DS Application Project
  • Processors 选择 S32K148, Project Name 填你自己的工程名
  • Select SDK: SDKs 选择 S32K148_SDK 3.0.0, Debugger选择J-Link, Finish.

ProcessorExpert配置

双击工程名, 点击Components窗口Components目录下的 pin_mux:PinSetting, LPUART中选择PTA8/PTA9, 并设置发送为Output:
在这里插入图片描述
Component Library中双击添加lpuart组件, 配置lpuart, 选择LPUART2, 波特率115200:
在这里插入图片描述
Component Library中双击添加wdog组件, 配置wdog:

  • 时钟源默认WDOG_LPO_CLOCK(128kHz默认, 可到clock_manager中修改为32kHz或者1kHz)
  • 勾选预分配使能(鼠标悬停提示固定256分频, 这样clock cycle就变成了500Hz)
  • 中断不用(有用过的可以评论下使用方法)
  • 窗口不用(用的话, 在Window Value~Timeout Value之间才能喂狗, 条件苛刻)
  • 设置Timeout Value为500, 也就是1s内喂狗就不会复位了, 注意Window ValueTimeout Value都是16位计数器, 值必须在[1, 65535], 否则无效(回到之前的值)
    在这里插入图片描述
    点击生成代码:
    在这里插入图片描述

代码补全

添加LPUART2printf支持:

/* User includes (#include below this line is not maintained by Processor Expert) */
#include <stdio.h>
#include "ewl_misra_types.h"
#include "file_struc.h"

int_t __write_console(__file_handle handle, uchar_t * buffer, size_t * count)
{
    uint32_t bytesRemain;
    size_t bytes=*count;
    uchar_t ret_car[]={"\r"};
    LPUART_DRV_SendData(INST_LPUART2, buffer, bytes);
    while(LPUART_DRV_GetTransmitStatus(INST_LPUART2, &bytesRemain) != STATUS_SUCCESS);
    LPUART_DRV_SendData(INST_LPUART2, ret_car, 1);
    while(LPUART_DRV_GetTransmitStatus(INST_LPUART2, &bytesRemain) != STATUS_SUCCESS);
    return 0;
}

main函数中系统和引脚的初始化:

  /* Write your code here */
  /* For example: for(;;) { } */
  CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT,
                 g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);
  CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT);
  PINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr);

串口的初始化:

  LPUART_DRV_Init(INST_LPUART2, &lpuart2_State, &lpuart2_InitConfig0);

看门狗初始化和喂狗:

  /* Initialize WDOG */
  WDOG_DRV_Init(INST_WATCHDOG1, &watchdog1_Config0);
  printf("watchdog enable!\r\n");

  while (1)
  {
    printf("xixiheheheihei\r\n");
    for (uint32_t i = 0; i < 2989000*2; i++);	//about 2s
    /* Reset Watchdog counter */
    WDOG_DRV_Trigger(INST_WATCHDOG1);
  }

2s后喂狗, 肯定来不及, 系统会复位, 调试运行试试:
在这里插入图片描述
可以看到, 约1s系统复位一次. 现在把延时改成约0.5s, 这样狗就能喂上了:

  /* Initialize WDOG */
  WDOG_DRV_Init(INST_WATCHDOG1, &watchdog1_Config0);
  printf("watchdog enable!\r\n");

  while (1)
  {
    printf("xixiheheheihei\r\n");
    for (uint32_t i = 0; i < 2989000/2; i++);	//about 0.5s
    /* Reset Watchdog counter */
    WDOG_DRV_Trigger(INST_WATCHDOG1);
  }

调试运行, 系统不再复位, 符合预期:
在这里插入图片描述

完整工程下载

https://download.csdn.net/download/weifengdq/12011905

微信公众号

欢迎扫描二维码关注本人微信公众号, 及时获取或者发送给我最新消息:
在这里插入图片描述

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值