0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RT-Thread Nano入门:独立看门狗(IWDT)

CHANBAEK 来源:MrZhou的技术栈 作者: zzx_mcu 2023-11-22 11:04 次阅读

本文主要介绍怎么用RT-Thread Nano实现独立看门狗IWDT驱动,创建一个喂狗线程,实现定时喂狗功能。

一、准备工作

1.硬件准备:

STM32F103RCT6(本人使用正点原子的MINI板)

ST-LINK

USB转TTL模块

2.软件准备:

KEIL5 MDK

STM32CubeMX

二、使用STM32CubeMX生成MDK工程

使用STM32CubeMX创建STM32F103RBT6的对应工程,配置时钟源,使能GPIO、UART、IWDT,配置时钟树。

配置预览效果,配置PA8引脚为推挽输出,用于LED灯闪烁。

图片

STM32F103RBT6的最大主频为72M,配置PLL选择外部时钟。

图片

生成KEIL MDK工程。

图片

二、添加RT-Thread Nano到工程

打开MDK工程,添加RT-Thread Nano组件,具体可参考官方《基于Keil MDK移植RT-Thread Nano》文档,链接为https://www.rt-thread.org/document/site/tutorial/nano/nano-port-keil/an0039-nano-port-keil/。

主要分为以下几个步骤:

  1. 注释掉STM32CubeMX生成的PendSV,HardFault,SysTick。
  2. 将main.c中的板级初始化函数,系统时钟配置函数移到board.c中,替换RTT的配置。
  3. 移植FinSH,实现rt_hw_console_output()函数。
void rt_hw_console_output(const char *str)
{
   /* empty console output */
   rt_size_t i = 0, size = 0;
   char a = 'r';

//   __HAL_UNLOCK(&huart1);
   rt_enter_critical();
   size = rt_strlen(str);
   for (i = 0; i < size; i++)
    {
       if (*(str + i) == 'n')
       {
           HAL_UART_Transmit(&huart1, (uint8_t *)&a, 1, 1);
       }
       HAL_UART_Transmit(&huart1, (uint8_t *)(str + i), 1, 1);
    }
       rt_exit_critical();

}

三、编写代码

主要实现两个功能,LED闪烁和IWDG喂狗。

  1. 在main函数中创建两个线程。
tid1 = rt_thread_create("iwdg",
                        iwdg_thread_entry,
                        RT_NULL,
                        THREAD_STACK_SIZE,
                        THREAD_PRIORITY,
                        THREAD_TIMESLICE);
if(tid1!= RT_NULL)
{
     rt_thread_startup(tid1);
}


       tid2= rt_thread_create("led",
                              led_thread_entry,
                              RT_NULL,
                              THREAD_STACK_SIZE,
                              THREAD_PRIORITY- 1,
                              THREAD_TIMESLICE);

if(tid2!= RT_NULL)
{
    rt_thread_startup(tid2);
}

2.LED线程

static void led_thread_entry(void *param)
{
       MX_GPIO_Init();
       while(1)
       {
              HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8, GPIO_PIN_RESET);
              rt_thread_mdelay(500);
              HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8, GPIO_PIN_SET);
              rt_thread_mdelay(500);
//            rt_kprintf("hello,ledn");
       }

}

3.IWDG线程

static void iwdg_thread_entry(void *param)
{
       MX_IWDG_Init();
       while(1)
       {
              HAL_IWDG_Refresh(&hiwdg);
              rt_kprintf("feediwdgn");
              rt_thread_mdelay(1000);
       }
}

注意计算iwdg的溢出时间,本文设置的溢出时间约为3.276s,预分频值为32,看门狗时钟为40kHz。

计算看门狗溢出时间:

1.方式一

分频后的频率:IWDG时钟/分频值 = 40KHz/32= 1.25KHz

溢出时间:设置的装填值/分频后的频率 = 4095/1.25KHz = 3276ms=3.276s

2.方式二

用户手册的公式给定公式,看门狗溢出时间:

Tout=((4×2^prer)×rlr)/40KHz。

其中Tout 为看门狗溢出时间(单位为ms),prer为看门狗时钟预分频值(IWDG_PR值),范围为0~7;rlr 为看门狗的重装载值(IWDG_RLR 的值)。

我们在STM32CubeMX中设置分频值为32,相当(4×2^prer=32),prer = 3,rlr = 4095,故有

Tout=((4×2^prer) ×rlr) /40KHz =((4×2^3) ×4095) /40KHz = 3276ms。

其实也很好理解,看门狗定时器是一个递减的定时器,从给定的计算值递减到0时就会产生看门狗复位(如果不喂狗),我们设置的计数值4095,看门狗计一次数的时间为32/40kHz,故总时间就等于计数值*一次计数的时间。

四、下载验证

现象:

1.看门狗每1s喂一次狗。

图片

2.led灯以1Hz的频率闪烁。

图片

至此,RTT中的独立看门狗就讲解结束。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • MDK
    MDK
    +关注

    关注

    4

    文章

    209

    浏览量

    32063
  • 线程
    +关注

    关注

    0

    文章

    504

    浏览量

    19675
  • RT-Thread
    +关注

    关注

    31

    文章

    1285

    浏览量

    40077
  • stm32cubemx
    +关注

    关注

    5

    文章

    283

    浏览量

    14791
  • 独立看门狗
    +关注

    关注

    0

    文章

    24

    浏览量

    3827
收藏 人收藏

    评论

    相关推荐

    独立看门狗(IWDG)的基础知识

      STM32F10xxx系列内置两个看门狗(独立看门狗和窗口看门狗),提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(
    发表于 10-19 17:10 4249次阅读
    <b class='flag-5'>独立</b><b class='flag-5'>看门狗</b>(IWDG)的基础知识

    STM32中的独立看门狗和窗口看门狗是什么

    在早期的MCU中是没有看门狗这种东西的,所以产品就很容易出现死机,跑飞的情况。为了避免这种情况的出现,后期的MCU都集成了看门狗的功能。但是目前看门狗发展到今天基本上分为两大类:独立
    的头像 发表于 02-20 17:47 2715次阅读
    STM32中的<b class='flag-5'>独立</b><b class='flag-5'>看门狗</b>和窗口<b class='flag-5'>看门狗</b>是什么

    怎样去搭建一种基于RT-Thread实时操作系统的STM32开发环境?

    怎样去搭建一种基于RT-Thread实时操作系统的STM32开发环境?怎样去搭建一种IWDT独立看门狗的环境?如何去编写IWDT
    发表于 07-27 07:19

    实现独立看门狗IWDT驱动

    实现独立看门狗IWDT驱动,创建喂狗线程,实现喂狗功能工程环境:stm32cubeIDE开发板:STM32 F103 ZET6最小系统仿真器:st-link V2cubeIDE 基于eclipse
    发表于 08-03 06:30

    stm32看门狗时间计算 独立看门狗和窗口看门狗的特性是什么

    本文为您讲解STM看门狗时间计算(时限)与频率计算,独立看门狗和窗口看门狗的特性、区别与联系。
    发表于 10-10 10:41 8759次阅读

    什么是stm32看门狗独立看门狗和窗口看门狗工作原理解析

    stm32有两个看门狗独立看门狗和窗口看门狗,其实两者的功能是类似的,只是喂狗的限制时间不同。 独立
    的头像 发表于 11-06 11:48 2.7w次阅读
    什么是stm32<b class='flag-5'>看门狗</b>?<b class='flag-5'>独立</b><b class='flag-5'>看门狗</b>和窗口<b class='flag-5'>看门狗</b>工作原理解析

    STM32看门狗配置(独立看门狗IWDG和窗口看门狗WWDG)

    stm32自带两个看门狗模块,独立看门狗IWDG和窗口看门狗WWDG。看门狗主要作用是可用来检测和解决由软件错误引起的故障;当计数器达到给定
    发表于 11-09 17:17 8438次阅读
    STM32<b class='flag-5'>看门狗</b>配置(<b class='flag-5'>独立</b><b class='flag-5'>看门狗</b>IWDG和窗口<b class='flag-5'>看门狗</b>WWDG)

    MCU独立看门狗与窗口看门狗的区别

    早期的MCU没有看门狗,就容易引起有些产品死机了不能重启工作。为了避免这个问题,后期的MCU在内部集成了看门狗的功能。为了满足更多使用场景,现在很多MCU都集成了两个看门狗独立
    发表于 10-28 20:06 8次下载
    MCU<b class='flag-5'>独立</b><b class='flag-5'>看门狗</b>与窗口<b class='flag-5'>看门狗</b>的区别

    RT-Thread Nano入门学习笔记

    RT-Thread Nano入门学习笔记
    发表于 11-26 12:36 20次下载
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b><b class='flag-5'>入门</b>学习笔记

    基于 Keil MDK 移植 RT-Thread Nano

    本文介绍如何基于 Keil MDK 移植 RT-Thread Nano ,并以一个 stm32f103 的基础工程作为示例进行讲解。 RT-Thread Nano 已集成在 Keil
    发表于 01-26 17:04 16次下载
    基于 Keil MDK 移植 <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>

    STM32:独立看门狗、窗口看门狗的配置

    STM32单片机的看门狗独立看门狗和窗口看门狗之分,这两者的工作原理却完全不同。
    发表于 02-08 16:15 18次下载
    STM32:<b class='flag-5'>独立</b><b class='flag-5'>看门狗</b>、窗口<b class='flag-5'>看门狗</b>的配置

    窗口看门狗是什么?与独立看门狗有啥区别?

    STM32有两个看门狗独立看门狗和窗口看门狗。其实两者的功能是类似的,只是喂狗的限制时间不同。
    发表于 02-09 10:28 9次下载
    窗口<b class='flag-5'>看门狗</b>是什么?与<b class='flag-5'>独立</b><b class='flag-5'>看门狗</b>有啥区别?

    STM32中的独立看门狗和窗口看门狗

    一、前言 在早期的MCU中是没有看门狗这种东西的,所以产品就很容易出现死机,跑飞的情况。为了避免这种情况的出现,后期的MCU都集成了看门狗的功能。但是目前看门狗发展到今天基本上分为两大类:独立
    的头像 发表于 12-22 16:58 2133次阅读

    STM32中的独立看门狗和窗口看门狗

    在早期的MCU中是没有看门狗这种东西的,所以产品就很容易出现死机,跑飞的情况。为了避免这种情况的出现,后期的MCU都集成了看门狗的功能。但是目前看门狗发展到今天基本上分为两大类:独立
    的头像 发表于 01-30 14:38 1367次阅读
    STM32中的<b class='flag-5'>独立</b><b class='flag-5'>看门狗</b>和窗口<b class='flag-5'>看门狗</b>

    瑞萨e2studio----独立看门狗IWDT

    概述本篇文章主要介绍如何使用e2studio对瑞萨进行独立看门狗IWDT配置,并且配置RTC时钟产生1s的周期中断,通过串口打印查看独立看门狗
    的头像 发表于 11-26 17:18 1558次阅读
    瑞萨e2studio----<b class='flag-5'>独立</b><b class='flag-5'>看门狗</b><b class='flag-5'>IWDT</b>