ST意法半导体
登录
直播中
一曲作罢
10年用户
979经验值
擅长:可编程逻辑 电源/新能源 MEMS/传感技术
私信
关注
[问答]
请问STM32MP257的m33核可以通过IWDG4 reset吗?需要怎么配置?
开启该帖子的消息推送
STM32
reset
STM32
MP257 的m33核可以通过IWDG4 reset吗?需要怎么配置?
回帖
(1)
陈炜
2025-3-8 10:55:24
步骤 1:启用 IWDG4 时钟
IWDG4 使用低速时钟源(LSE 或 LSI)。首先需要启用和配置低速时钟源。
#include "stm32mp1xx_hal.h"
void SystemClock_Config(void);
int main(void)
{
HAL_Init(); // 初始化 HAL 库
SystemClock_Config(); // 配置系统时钟
// 启用 LSE 作为 IWDG 时钟源
__HAL_RCC_LSE_CONFIG(RCC_LSE_ON);
if (HAL_IS_BIT_SET(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY))) {
// LSE 已就绪
__HAL_RCC_IWDG4_CLK_ENABLE(); // 启用 IWDG4 时钟
} else {
// LSE 未就绪,可以切换到 LSI
__HAL_RCC_LSI_ENABLE();
while (!__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY));
__HAL_RCC_IWDG4_CLK_ENABLE();
}
while (1) {
// 主循环
}
}
步骤 2:初始化 IWDG4
配置 IWDG4 的计时器参数,包括预分频器和计时周期。
#include "stm32mp1xx_hal_iwdg.h"
void IWDG4_Init(void)
{
IWDG_HandleTypeDef hiwdg4;
// 初始化 IWDG4
hiwdg4.Instance = IWDG4;
hiwdg4.Init.Prescaler = 32; // 预分频器
hiwdg4.Init.Reload = 1000; // 自动重装载值
hiwdg4.Init.Window = 0xFFFF; // 窗口值(可选)
hiwdg4.Init.Counter = 0x0; // 初始计数值
hiwdg4.Init.ClockSource = IWDG_CLOCKSOURCE_LSI; // 时钟源为 LSI
hiwdg4.Init.EWIV = IWDG_EWIV_ENABLE; // 使能早期唤醒中断(可选)
HAL_IWDG_Init(&hiwdg4);
}
int main(void)
{
HAL_Init();
SystemClock_Config();
IWDG4_Init(); // 初始化 IWDG4
while (1) {
// 主循环
}
}
步骤 3:触发复位
当 IWDG4 的计时器溢出时,会触发系统复位。为了测试复位功能,可以手动触发 IWDG4 的溢出:
void HAL_IWDG_RefreshCallback(IWDG_HandleTypeDef *hiwdg)
{
// 处理 IWDG 溢出事件
HAL_NVIC_SystemReset(); // 触发系统复位
}
int main(void)
{
HAL_Init();
SystemClock_Config();
IWDG4_Init();
while (1) {
HAL_Delay(5000); // 延时 5 秒
HAL_IWDG_Refresh(&hiwdg4); // 刷新 IWDG4 计时器
}
}
步骤 1:启用 IWDG4 时钟
IWDG4 使用低速时钟源(LSE 或 LSI)。首先需要启用和配置低速时钟源。
#include "stm32mp1xx_hal.h"
void SystemClock_Config(void);
int main(void)
{
HAL_Init(); // 初始化 HAL 库
SystemClock_Config(); // 配置系统时钟
// 启用 LSE 作为 IWDG 时钟源
__HAL_RCC_LSE_CONFIG(RCC_LSE_ON);
if (HAL_IS_BIT_SET(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY))) {
// LSE 已就绪
__HAL_RCC_IWDG4_CLK_ENABLE(); // 启用 IWDG4 时钟
} else {
// LSE 未就绪,可以切换到 LSI
__HAL_RCC_LSI_ENABLE();
while (!__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY));
__HAL_RCC_IWDG4_CLK_ENABLE();
}
while (1) {
// 主循环
}
}
步骤 2:初始化 IWDG4
配置 IWDG4 的计时器参数,包括预分频器和计时周期。
#include "stm32mp1xx_hal_iwdg.h"
void IWDG4_Init(void)
{
IWDG_HandleTypeDef hiwdg4;
// 初始化 IWDG4
hiwdg4.Instance = IWDG4;
hiwdg4.Init.Prescaler = 32; // 预分频器
hiwdg4.Init.Reload = 1000; // 自动重装载值
hiwdg4.Init.Window = 0xFFFF; // 窗口值(可选)
hiwdg4.Init.Counter = 0x0; // 初始计数值
hiwdg4.Init.ClockSource = IWDG_CLOCKSOURCE_LSI; // 时钟源为 LSI
hiwdg4.Init.EWIV = IWDG_EWIV_ENABLE; // 使能早期唤醒中断(可选)
HAL_IWDG_Init(&hiwdg4);
}
int main(void)
{
HAL_Init();
SystemClock_Config();
IWDG4_Init(); // 初始化 IWDG4
while (1) {
// 主循环
}
}
步骤 3:触发复位
当 IWDG4 的计时器溢出时,会触发系统复位。为了测试复位功能,可以手动触发 IWDG4 的溢出:
void HAL_IWDG_RefreshCallback(IWDG_HandleTypeDef *hiwdg)
{
// 处理 IWDG 溢出事件
HAL_NVIC_SystemReset(); // 触发系统复位
}
int main(void)
{
HAL_Init();
SystemClock_Config();
IWDG4_Init();
while (1) {
HAL_Delay(5000); // 延时 5 秒
HAL_IWDG_Refresh(&hiwdg4); // 刷新 IWDG4 计时器
}
}
举报
更多回帖
rotate(-90deg);
回复
相关问答
STM32
reset
使用
STM32
u575
配置
USB host读取U盘功能,是使用适应
M
3的USB驱动还是必须使用
M33
的USB驱动?
2024-03-13
491
如何
通过
Cortex
M4
控制
STM32MP
157上的LTDC?
2023-01-16
570
怎么
通过
库函数来实现
STM32F103_IWDG
独立看门狗的
配置
?
2021-09-18
1766
为什么
STM32MP
157A-DK1到
M4
的远程处理会失败呢?如何使其正常工作呢
2022-12-14
287
有没有办法同时流式传输 A55 的 uart 日志并使用 MCUXpresso 使用 iMX93 evk 调试
M33
?
2023-05-18
601
如何对独立看门狗
IWDG
的代码进行
配置
2021-09-14
1723
STM32MP
1:OpenOCD无法停止所有内核要如何解决?
2023-01-17
564
如何实现
STM32MP
1里A7和
M4
之间的通信?
2022-01-26
1470
LPC55S69是两个ARM Cortex
M33
内核,这种双内核应用在那种场景中比较合适?
2023-10-30
628
5340芯片移植时在rtthread_startup出现hardfault怎么解决呢?
2023-01-10
735
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分