STM32
直播中

神之小风

12年用户 857经验值
私信 关注
[问答]

STM32H745获取MCU重启的原因?

void Check_Rst(void){    my_printf(" CSR = %xrn", RCC->CSR);    if(__HAL_RCC_GET_FLAG(RCC_FLAG_PINRST) != RESET ) // NRST 引脚复位    {        my_printf("PIN reset rn");    }    if(__HAL_RCC_GET_FLAG(RCC_FLAG_PORRST) != RESET ) // 上电掉电复位    {        my_printf("POR/PDR reset rn");    }    if(__HAL_RCC_GET_FLAG(RCC_FLAG_SFTRST) != RESET ) //  软件复位    {        my_printf("Software reset  rn");    }    if(__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST) != RESET ) // 独立看门狗复位    {        my_printf("Independent watchdog reset rn");    }    if(__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST) != RESET ) // 窗口看门狗复位    {        my_printf("Window watchdog reset rn");    }    if(__HAL_RCC_GET_FLAG(RCC_FLAG_LPWRRST) != RESET ) // 低功耗复位    {        my_printf("(Low-power reset rn");    }    __HAL_RCC_CLEAR_RESET_FLAGS();          //清除复位标志}


回帖(1)

石玉兰

2024-5-18 17:41:31
在这段代码中,我们正在检查STM32H745微控制器(MCU)的重启原因。代码使用了STM32 HAL库来获取和检查RCC(Reset and Clock Control)寄存器的状态。以下是代码的逐步解释:

1. 首先,我们定义了一个名为`Check_Rst`的函数,该函数没有参数。

```c
void Check_Rst(void)
```

2. 在函数内部,我们使用`my_printf`函数打印RCC的CSR(Control and Status Register)寄存器的值。CSR寄存器包含了MCU的复位和时钟控制状态。

```c
my_printf(" CSR = %xrn", RCC->CSR);
```

3. 接下来,我们使用`__HAL_RCC_GET_FLAG`宏来检查`RCC_FLAG_PINRST`标志。如果此标志不为`RESET`,则表示MCU是由于NRST(复位)引脚触发的复位。

```c
if(__HAL_RCC_GET_FLAG(RCC_FLAG_PINRST) != RESET)
{
    my_printf("PIN reset rn");
}
```

4. 然后,我们再次使用`__HAL_RCC_GET_FLAG`宏来检查`RCC_FLAG_PORRST`标志。如果此标志不为`RESET`,则表示MCU是由于上电或掉电触发的复位(Power On Reset 或 Power Down Reset)。

```c
if(__HAL_RCC_GET_FLAG(RCC_FLAG_PORRST) != RESET)
{
    my_printf("POR/PD reset rn");
}
```

这段代码的目的是检查STM32H745 MCU的重启原因,并打印出相应的信息。通过检查CSR寄存器中的不同标志,我们可以确定是哪种类型的复位导致了MCU的重启。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分