eric2013 发表于 2020-6-21 09:31:48

调试阶段的定时器,看门狗,I2C,CAN是否还运行的问题

针对这个问题,STM32上有个专门的调试冻结寄存器。默认情况下,是都运行的。

static/image/hrline/4.gif



eric2013 发表于 2020-6-21 09:58:35

/** @briefFreeze/Unfreeze Peripherals in Debug mode
*/
#define __HAL_DBGMCU_FREEZE_WWDG1()          (DBGMCU->APB3FZ1 |= (DBGMCU_APB3FZ1_DBG_WWDG1))

#define __HAL_DBGMCU_FREEZE_TIM2()         (DBGMCU->APB1LFZ1 |= (DBGMCU_APB1LFZ1_DBG_TIM2))
#define __HAL_DBGMCU_FREEZE_TIM3()         (DBGMCU->APB1LFZ1 |= (DBGMCU_APB1LFZ1_DBG_TIM3))
#define __HAL_DBGMCU_FREEZE_TIM4()         (DBGMCU->APB1LFZ1 |= (DBGMCU_APB1LFZ1_DBG_TIM4))
#define __HAL_DBGMCU_FREEZE_TIM5()         (DBGMCU->APB1LFZ1 |= (DBGMCU_APB1LFZ1_DBG_TIM5))
#define __HAL_DBGMCU_FREEZE_TIM6()         (DBGMCU->APB1LFZ1 |= (DBGMCU_APB1LFZ1_DBG_TIM6))
#define __HAL_DBGMCU_FREEZE_TIM7()         (DBGMCU->APB1LFZ1 |= (DBGMCU_APB1LFZ1_DBG_TIM7))
#define __HAL_DBGMCU_FREEZE_TIM12()          (DBGMCU->APB1LFZ1 |= (DBGMCU_APB1LFZ1_DBG_TIM12))
#define __HAL_DBGMCU_FREEZE_TIM13()          (DBGMCU->APB1LFZ1 |= (DBGMCU_APB1LFZ1_DBG_TIM13))
#define __HAL_DBGMCU_FREEZE_TIM14()          (DBGMCU->APB1LFZ1 |= (DBGMCU_APB1LFZ1_DBG_TIM14))
#define __HAL_DBGMCU_FREEZE_LPTIM1()         (DBGMCU->APB1LFZ1 |= (DBGMCU_APB1LFZ1_DBG_LPTIM1))
#define __HAL_DBGMCU_FREEZE_I2C1()         (DBGMCU->APB1LFZ1 |= (DBGMCU_APB1LFZ1_DBG_I2C1))
#define __HAL_DBGMCU_FREEZE_I2C2()         (DBGMCU->APB1LFZ1 |= (DBGMCU_APB1LFZ1_DBG_I2C2))
#define __HAL_DBGMCU_FREEZE_I2C3()         (DBGMCU->APB1LFZ1 |= (DBGMCU_APB1LFZ1_DBG_I2C3))
#define __HAL_DBGMCU_FREEZE_FDCAN()          (DBGMCU->APB1HFZ1 |= (DBGMCU_APB1HFZ1_DBG_FDCAN))


#define __HAL_DBGMCU_FREEZE_TIM1()         (DBGMCU->APB2FZ1 |= (DBGMCU_APB2FZ1_DBG_TIM1))
#define __HAL_DBGMCU_FREEZE_TIM8()         (DBGMCU->APB2FZ1 |= (DBGMCU_APB2FZ1_DBG_TIM8))
#define __HAL_DBGMCU_FREEZE_TIM15()          (DBGMCU->APB2FZ1 |= (DBGMCU_APB2FZ1_DBG_TIM15))
#define __HAL_DBGMCU_FREEZE_TIM16()          (DBGMCU->APB2FZ1 |= (DBGMCU_APB2FZ1_DBG_TIM16))
#define __HAL_DBGMCU_FREEZE_TIM17()          (DBGMCU->APB2FZ1 |= (DBGMCU_APB2FZ1_DBG_TIM17))
#define __HAL_DBGMCU_FREEZE_HRTIM()          (DBGMCU->APB2FZ1 |= (DBGMCU_APB2FZ1_DBG_HRTIM))

#define __HAL_DBGMCU_FREEZE_I2C4()         (DBGMCU->APB4FZ1 |= (DBGMCU_APB4FZ1_DBG_I2C4))
#define __HAL_DBGMCU_FREEZE_LPTIM2()         (DBGMCU->APB4FZ1 |= (DBGMCU_APB4FZ1_DBG_LPTIM2))
#define __HAL_DBGMCU_FREEZE_LPTIM3()         (DBGMCU->APB4FZ1 |= (DBGMCU_APB4FZ1_DBG_LPTIM3))
#define __HAL_DBGMCU_FREEZE_LPTIM4()         (DBGMCU->APB4FZ1 |= (DBGMCU_APB4FZ1_DBG_LPTIM4))
#define __HAL_DBGMCU_FREEZE_LPTIM5()         (DBGMCU->APB4FZ1 |= (DBGMCU_APB4FZ1_DBG_LPTIM5))
#define __HAL_DBGMCU_FREEZE_RTC()            (DBGMCU->APB4FZ1 |= (DBGMCU_APB4FZ1_DBG_RTC))
#define __HAL_DBGMCU_FREEZE_IWDG1()          (DBGMCU->APB4FZ1 |= (DBGMCU_APB4FZ1_DBG_IWDG1))


#define __HAL_DBGMCU_UnFreeze_WWDG1()          (DBGMCU->APB3FZ1&= ~ (DBGMCU_APB3FZ1_DBG_WWDG1))

#define __HAL_DBGMCU_UnFreeze_TIM2()         (DBGMCU->APB1LFZ1&= ~ (DBGMCU_APB1LFZ1_DBG_TIM2))
#define __HAL_DBGMCU_UnFreeze_TIM3()         (DBGMCU->APB1LFZ1&= ~ (DBGMCU_APB1LFZ1_DBG_TIM3))
#define __HAL_DBGMCU_UnFreeze_TIM4()         (DBGMCU->APB1LFZ1&= ~ (DBGMCU_APB1LFZ1_DBG_TIM4))
#define __HAL_DBGMCU_UnFreeze_TIM5()         (DBGMCU->APB1LFZ1&= ~ (DBGMCU_APB1LFZ1_DBG_TIM5))
#define __HAL_DBGMCU_UnFreeze_TIM6()         (DBGMCU->APB1LFZ1&= ~ (DBGMCU_APB1LFZ1_DBG_TIM6))
#define __HAL_DBGMCU_UnFreeze_TIM7()         (DBGMCU->APB1LFZ1&= ~ (DBGMCU_APB1LFZ1_DBG_TIM7))
#define __HAL_DBGMCU_UnFreeze_TIM12()          (DBGMCU->APB1LFZ1&= ~ (DBGMCU_APB1LFZ1_DBG_TIM12))
#define __HAL_DBGMCU_UnFreeze_TIM13()          (DBGMCU->APB1LFZ1&= ~ (DBGMCU_APB1LFZ1_DBG_TIM13))
#define __HAL_DBGMCU_UnFreeze_TIM14()          (DBGMCU->APB1LFZ1&= ~ (DBGMCU_APB1LFZ1_DBG_TIM14))
#define __HAL_DBGMCU_UnFreeze_LPTIM1()         (DBGMCU->APB1LFZ1&= ~ (DBGMCU_APB1LFZ1_DBG_LPTIM1))
#define __HAL_DBGMCU_UnFreeze_I2C1()         (DBGMCU->APB1LFZ1&= ~ (DBGMCU_APB1LFZ1_DBG_I2C1))
#define __HAL_DBGMCU_UnFreeze_I2C2()         (DBGMCU->APB1LFZ1&= ~ (DBGMCU_APB1LFZ1_DBG_I2C2))
#define __HAL_DBGMCU_UnFreeze_I2C3()         (DBGMCU->APB1LFZ1&= ~ (DBGMCU_APB1LFZ1_DBG_I2C3))
#define __HAL_DBGMCU_UnFreeze_FDCAN()          (DBGMCU->APB1HFZ1&= ~ (DBGMCU_APB1HFZ1_DBG_FDCAN))


#define __HAL_DBGMCU_UnFreeze_TIM1()         (DBGMCU->APB2FZ1&= ~ (DBGMCU_APB2FZ1_DBG_TIM1))
#define __HAL_DBGMCU_UnFreeze_TIM8()         (DBGMCU->APB2FZ1&= ~ (DBGMCU_APB2FZ1_DBG_TIM8))
#define __HAL_DBGMCU_UnFreeze_TIM15()          (DBGMCU->APB2FZ1&= ~ (DBGMCU_APB2FZ1_DBG_TIM15))
#define __HAL_DBGMCU_UnFreeze_TIM16()          (DBGMCU->APB2FZ1&= ~ (DBGMCU_APB2FZ1_DBG_TIM16))
#define __HAL_DBGMCU_UnFreeze_TIM17()          (DBGMCU->APB2FZ1&= ~ (DBGMCU_APB2FZ1_DBG_TIM17))
#define __HAL_DBGMCU_UnFreeze_HRTIM()          (DBGMCU->APB2FZ1&= ~ (DBGMCU_APB2FZ1_DBG_HRTIM))

#define __HAL_DBGMCU_UnFreeze_I2C4()         (DBGMCU->APB4FZ1&= ~ (DBGMCU_APB4FZ1_DBG_I2C4))
#define __HAL_DBGMCU_UnFreeze_LPTIM2()         (DBGMCU->APB4FZ1&= ~ (DBGMCU_APB4FZ1_DBG_LPTIM2))
#define __HAL_DBGMCU_UnFreeze_LPTIM3()         (DBGMCU->APB4FZ1&= ~ (DBGMCU_APB4FZ1_DBG_LPTIM3))
#define __HAL_DBGMCU_UnFreeze_LPTIM4()         (DBGMCU->APB4FZ1&= ~ (DBGMCU_APB4FZ1_DBG_LPTIM4))
#define __HAL_DBGMCU_UnFreeze_LPTIM5()         (DBGMCU->APB4FZ1&= ~ (DBGMCU_APB4FZ1_DBG_LPTIM5))
#define __HAL_DBGMCU_UnFreeze_RTC()            (DBGMCU->APB4FZ1&= ~ (DBGMCU_APB4FZ1_DBG_RTC))
#define __HAL_DBGMCU_UnFreeze_IWDG1()          (DBGMCU->APB4FZ1&= ~ (DBGMCU_APB4FZ1_DBG_IWDG1))

云琴箫龙 发表于 2021-7-27 16:32:55

请教硬汉哥,我想在调试模式下把外部看门狗也禁止掉,请问STM32有没有一个寄存器可以指示当前是否是调试模式?

eric2013 发表于 2021-7-27 17:57:10

云琴箫龙 发表于 2021-7-27 16:32
请教硬汉哥,我想在调试模式下把外部看门狗也禁止掉,请问STM32有没有一个寄存器可以指示当前是否是调试模 ...

没找到。

云琴箫龙 发表于 2021-7-28 10:13:05

eric2013 发表于 2021-7-27 17:57
没找到。

参考这位哥们儿的方式,试了一下,可以检测出来是否在仿真模式下。https://blog.csdn.net/billy145533/article/details/49706783

eric2013 发表于 2021-7-28 16:41:31

云琴箫龙 发表于 2021-7-28 10:13
参考这位哥们儿的方式,试了一下,可以检测出来是否在仿真模式下。https://blog.csdn.net/billy145533/ar ...

谢谢。

caicaptain2 发表于 2023-6-26 13:51:20

eric2013 发表于 2020-6-21 09:58


我今天试了这个,需要在跳转bootload的时候把iwdg看门狗冻结,不起作用。
看文档说明,似乎是必须通过por异步复位,而且“在系统复位状态下”写入寄存器。。。。这个系统复位状态下,哪里还能有代码可以执行哦?

eric2013 发表于 2023-6-27 08:44:27

caicaptain2 发表于 2023-6-26 13:51
我今天试了这个,需要在跳转bootload的时候把iwdg看门狗冻结,不起作用。
看文档说明,似乎是必须通过po ...

MDK Option选型里面可以设置。
页: [1]
查看完整版本: 调试阶段的定时器,看门狗,I2C,CAN是否还运行的问题