用户工具

站点工具


icore4t_26
银杏科技有限公司旗下技术文档发布平台
技术支持电话0379-69926675-801
技术支持邮件Gingko@vip.163.com
版本 日期 作者 修改内容
V1.0 2020-03-10 gingko 初次建立




STM32CubeMX教程二十六——IWDG看门狗实验

1.在主界面选择File–>New Project 或者直接点击ACCEE TO MCU SELECTOR 2.出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置 在搜索栏的下面,提供的各 种查找方式,可以选择芯片内核,型号,等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32H750IBKx。 3.配置RCC,使用外部时钟源 4.时基源选择SysTick 5.将PA10,PB7,PB8设置为GPIO_Output 6.将ARM_KEY对应的引脚PH7设置为GPIO_Intput 7.引脚模式配置 8.配置IWDG 9.时钟源设置,选择外部高速时钟源,配置为最大主频 10.工程文件的设置, 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可 IDE我们使用的是 MDK V5.27 11.点击Code Generator,进行进一步配置

  • Copy all used libraries into the project folder
  • 将HAL库的所有.C和.H都复制到所建工程中
    • 优点:这样如果后续需要新增其他外设又可能不再用STM32CubeMX的时候便会很方便
    • 缺点:体积大,编译时间很长
  • Copy only the necessary library files
  • 只复制所需要的.C和.H(推荐)
    • 优点:体积相对小,编译时间短,并且工程可复制拷贝
    • 缺点:新增外设时需要重新用STM32CubeMX导入
  • Add necessary library files as reference in the toolchain project configuration file
  • 不复制文件,直接从软件包存放位置导入.C和.H
    • 优点:体积小,比较节约硬盘空间
    • 缺点:复制到其他电脑上或者软件包位置改变,就需要修改相对应的路径
  • 自行选择方式即可

12.然后点击GENERATE CODE 创建工程 创建成功,打开工程。




实验二十六:IWDG看门狗实验——复位ARM

一、 实验目的与意义

  1. 了解STM32 IWDG结构。
  2. 了解STM32 IWDG特征。
  3. 掌握IWDG的使用方法。
  4. 掌握STM32 HAL库中IWDG属性的配置方法。
  5. 掌握KEILMDK 集成开发环境使用方法。

二、 实验设备及平台

  1. iCore4T 双核心板。点击购买
  2. JLINK(或相同功能)仿真器。点击购买
  3. Micro USB线缆。
  4. Keil MDK 开发平台。
  5. STM32CubeMX开发平台。
  6. 装有WIN XP(及更高版本)系统的计算机。

三、 实验原理

1.看门狗简介

  • 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界磁场的干扰,造成各种寄存器和内存的数据混乱,会导致程序指针错误,不在程序区,取出错误的程序指令等,都会陷入死循环。程序的正常运行被打断,由单片机控制的系统无法继续正常工作,会造成整个系统陷入停滞状态,发生不可预料的后果。看门狗就是定期的查看芯片内部的情况,一旦发生错误就向芯片发出重启的电路。看门狗命令在程序的中断中拥有最高的优先级。

2.STM32H7独立看门狗简介

  • STM32H750的独立看门狗由内部专门的32Khz低速时钟(LSI)驱动,即使主时钟发生故障,它也仍然有效。这里需要注意独立看门狗的时钟是一个内部RC时钟,所以并不是准确的32Khz,而是在17~47Khz之间的一个可变化的时钟,只是我们在估算的时候,以32Khz的频率来计算,看门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。

3.相关寄存器

(1) 键值寄存器 IWDG_KR
  • 该寄存器的各位描述如图:

  • 在键寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)。无论何时,只要键寄存器IWDG_KR中被写入0xAAAA,IWDG_RLR中的值就会被重新加载到计数器中从而避免产生看门狗复位。
  • IWDG_PR和IWDG_RLR寄存器具有写保护功能。要修改这两个寄存器的值,必须先向IWDG_KR寄存器中写入0x5555。将其他值写入这个寄存器将会打乱操作顺序,寄存器将重新被保护。重装载操作(即写入0xAAAA)也会启动写保护功能。
(2) 预分频寄存器(IWDG_PR)
  • 该寄存器用来设置看门狗时钟的分频系数,最低为4,最高位256,该寄存器是一个32位的寄存器,但是我们只用了最低3位,其他都是保留位。预分频寄存器各位定义如图:

(3) 重装载寄存器(IWDG_RLR)
  • 该寄存器用来保存重装载到计数器中的值。该寄存器也是一个32位寄存器,但是只有低12位是有效的,该寄存器的各位描述如图:

  • 只要对以上三个寄存器进行相应的设置,我们就可以启动STM32H7的独立看门狗。

四、 实验程序

1.主函数

int main(void)
{
    HAL_Init();
    SystemClock_Config();
    i2c.initialize();
    axp152.initialize();
    axp152.set_dcdc1(3500);//[ARM & FPGA BK1/2/6 &OTHER]
    axp152.set_dcdc2(1200);//[FPGA INT & PLL D]
    axp152.set_aldo1(2500);//[FPGA PLL A]
    axp152.set_dcdc4(3300);//[POWER_OUTPUT]
    axp152.set_dcdc3(3300);//[FPGA BK4][Adjustable]
    axp152.set_aldo2(3300);//[FPGA BK3][Adjustable]
    axp152.set_dldo1(3300);//[FPGA BK7][Adjustable]
    axp152.set_dldo2(3300);//[FPGA BK5][Adjustable]
    MX_GPIO_Init();
    MX_IWDG1_Init();
    HAL_Delay(50);
    LED_ON; 
    while (1)
    {
/* 独立看门狗设置“喂狗”时间为2s,如果超过2s没有“喂狗”,则“被狗咬”,立即STM32复位 */
        while(ARM_KEY_VALUE == KEY_DOWN);//按键按下不再喂狗,STM32将复位
        HAL_IWDG_Refresh(&hiwdg1);       //每1s喂狗一次,防止被狗咬
        LED_ON;
        HAL_Delay(500);
        LED_OFF;
        HAL_Delay(500);
    }
 }

2.IWDG1初始化函数

void MX_IWDG1_Init(void)
{
  hiwdg1.Instance = IWDG1;             
  hiwdg1.Init.Prescaler = IWDG_PRESCALER_32;    //预分频系数
  hiwdg1.Init.Window = 4095;                        //窗口值
  hiwdg1.Init.Reload = 2000;                        //重装载值
  if (HAL_IWDG_Init(&hiwdg1) != HAL_OK)
  {
    Error_Handler();
  }
}

3.喂狗函数

  • 在HAL中重载计数值的函数是HAL_IWDG_Refresh,它的作用是把值0xAAAA写入到IWDG_KR寄存器,从而触发计数器重载,即实现独立看门狗的喂狗操作。该函数声明为:
HAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg)
{
  /* 使用重载寄存器中定义的值重载IWDG计数器 */
  __HAL_IWDG_RELOAD_COUNTER(hiwdg);
  /* 返回函数状态 */
  return HAL_OK;
}

五、 实验步骤

  1. 把仿真器与iCore4T的SWD调试口相连(直接相连或者通过转接器相连);
  2. 把iCore4T通过Micro USB线与计算机相连,为iCore4T供电;
  3. 打开Keil MDK 开发环境,并打开本实验工程;
  4. 烧写程序到iCore4T上;
  5. 也可以进入Debug 模式,单步运行或设置断点验证程序逻辑。

六、 实验现象

  1. iCore4T双核心板LED闪烁,当按键按下超过2s,看门狗复位ARM,LED熄灭。
icore4t_26.txt · 最后更改: 2022/04/01 10:46 由 sean