中小企业信息服务平台seo网络推广软文的格式
2026/1/27 10:55:24 网站建设 项目流程
中小企业信息服务平台,seo网络推广软文的格式,郑州网站设计专家,毕业设计代做网站机械目录 一、HC32L130 软件复位的核心方式 二、前提准备#xff1a;HC32L130 寄存器及 CMSIS 库依赖 三、方式一#xff1a;Cortex-M0 内核标准软件复位 1. 原理 2. 代码实现 3. 说明 四、方式二#xff1a;操作 HC32L130 复位控制器#xff08;RSTC#xff09;实现软…目录一、HC32L130 软件复位的核心方式二、前提准备HC32L130 寄存器及 CMSIS 库依赖三、方式一Cortex-M0 内核标准软件复位1. 原理2. 代码实现3. 说明四、方式二操作 HC32L130 复位控制器RSTC实现软件复位1. 原理2. 代码实现3. 寄存器说明五、方式三独立看门狗IWDG触发软件复位1. 原理2. 代码实现3. 说明六、复位原因检测1. 复位状态寄存器RSTC_SR位定义2. 复位原因检测代码七、注意事项八、应用场景总结HC32L130 是华大半导体基于ARM Cortex-M0内核的低功耗 MCU其软件复位功能可通过Cortex-M0 内核标准复位接口、HC32L130 外设复位控制器或独立看门狗IWDG触发复位三种方式实现适用于不同场景如普通软件复位、带复位原因记录的复位等。以下详细讲解各方式的实现原理、代码示例及注意事项。一、HC32L130 软件复位的核心方式HC32L130 的软件复位主要分为三类内核级复位调用 Cortex-M0 内核标准的NVIC_SystemReset()函数触发系统全局复位外设控制器复位操作 HC32L130 的 ** 复位控制器RSTC** 寄存器主动触发软件复位看门狗复位配置独立看门狗IWDG后故意不喂狗使其超时触发硬件复位间接软件复位。其中内核级复位是最简便的方式外设控制器复位可自定义复位范围看门狗复位适合需要记录复位原因的场景。二、前提准备HC32L130 寄存器及 CMSIS 库依赖HC32L130 的软件开发需基于华大提供的HC32L13x 系列标准库或直接操作寄存器需包含核心头文件#include hc32l130.h #include core_cm0plus.h // Cortex-M0内核头文件三、方式一Cortex-M0 内核标准软件复位Cortex-M0 内核提供了统一的软件复位接口NVIC_SystemReset()该函数通过操作内核的 ** 应用程序中断及复位控制寄存器AIRCR** 触发系统复位是跨平台的通用方式实现最简单。1. 原理向内核SCB-AIRCR寄存器写入0x05FA0000 | VECTKEY密钥和SYSRESETREQ位位 2内核会触发芯片全局复位复位所有外设和内核状态。2. 代码实现/** * brief Cortex-M0内核软件复位 * note 复位后程序从0x00000000地址开始执行即复位向量表 */ void soft_reset_by_cortex(void) { __disable_irq(); // 复位前关闭所有中断避免中断干扰复位过程 /* 触发内核系统复位 */ NVIC_SystemReset(); /* 复位后代码不会执行到此处 */ while(1); }3. 说明NVIC_SystemReset()是 CMSIS 库的标准函数定义在core_cm0plus.h中复位前需关闭中断__disable_irq()防止中断处理函数打断复位流程复位后MCU 会重新执行启动文件从main()函数开始运行。四、方式二操作 HC32L130 复位控制器RSTC实现软件复位HC32L130 内置复位控制器RSTC通过配置其寄存器RSTC_CR的 ** 软件复位请求位SWRST** 可触发芯片复位该方式更贴合 HC32L130 的硬件特性支持更精细的复位控制。1. 原理HC32L130 的 RSTC 寄存器位于地址 0x40000000 0x00000C00区域其中RSTC_CR复位控制寄存器的 ** 位 0SWRST** 为软件复位请求位写入 1 时触发芯片复位写入RSTC_CR前需先写入 ** 访问密钥0xA5** 到RSTC_KEYR寄存器解锁写保护。2. 代码实现/** * brief HC32L130复位控制器软件复位 * note 需先解锁RSTC寄存器再触发软件复位 */ void soft_reset_by_rstc(void) { __disable_irq(); // 关闭中断 /* 1. 解锁RSTC寄存器写入密钥0xA5 */ M0P_RSTC-KEYR 0xA5; /* 2. 置位SWRST位触发软件复位 */ M0P_RSTC-CR_f.SWRST 1; /* 等待复位生效实际执行到此处时已开始复位 */ while(1); }3. 寄存器说明M0P_RSTC是 HC32L130 标准库中对 RSTC 外设的寄存器映射宏RSTC_KEYR为密钥寄存器必须写入0xA5才能解锁RSTC_CR的写保护否则写入无效RSTC_CR_f.SWRST是寄存器位段定义标准库封装直接操作寄存器也可写为M0P_RSTC-CR | 0x01;。五、方式三独立看门狗IWDG触发软件复位独立看门狗IWDG是 HC32L130 的硬件模块由内部低速时钟LSI驱动不受主时钟影响。通过配置 IWDG 为短超时时间然后不喂狗使其超时触发复位属于间接软件复位适合需要记录 “看门狗复位” 原因的场景。1. 原理启用 IWDG配置预分频系数和重装载值设置短超时时间如 100ms不执行喂狗操作IWDG_ReloadCounter()IWDG 计数器递减至 0 时触发系统复位复位后可通过RSTC_SR寄存器读取复位原因确认是 IWDG 复位。2. 代码实现/** * brief 初始化IWDG独立看门狗 * param prescaler: 预分频系数0~7对应div4/div8/.../div256 * param reload: 重装载值0~0xFFF */ void iwdg_init(uint8_t prescaler, uint16_t reload) { /* 解锁IWDG寄存器写入密钥0x5555 */ M0P_IWDG-KR 0x5555; /* 设置预分频系数 */ M0P_IWDG-PR prescaler 0x07; /* 解锁后设置重装载值 */ M0P_IWDG-KR 0x5555; M0P_IWDG-RLR reload 0xFFF; /* 启动IWDG写入密钥0xCCCC */ M0P_IWDG-KR 0xCCCC; } /** * brief IWDG喂狗 */ void iwdg_feed(void) { M0P_IWDG-KR 0xAAAA; // 写入喂狗密钥重载计数器 } /** * brief 触发IWDG复位软件故意不喂狗 */ void soft_reset_by_iwdg(void) { __disable_irq(); /* 初始化IWDG设置超时时间约100msLSI40kHz */ // 预分频6div12840kHz/128312.5Hz重载值32 → 32/312.5≈0.1024s iwdg_init(6, 32); /* 不喂狗等待IWDG超时触发复位 */ while(1); }3. 说明HC32L130 的 IWDG 时钟为内部低速时钟LSI40kHz不受主时钟影响可靠性更高IWDG 寄存器需通过密钥解锁0x5555为配置解锁0xAAAA为喂狗0xCCCC为启动该方式复位后可通过读取RSTC_SR寄存器的IWDG_RST位判断是否为看门狗复位。六、复位原因检测HC32L130 的RSTC_SR复位状态寄存器记录了复位的原因软件复位后可读取该寄存器分析复位类型便于调试和故障处理。1. 复位状态寄存器RSTC_SR位定义位段功能说明取值说明POR_RST上电复位标志1上电复位0非上电复位PIN_RST引脚复位标志NRST 引脚1引脚复位0非引脚复位WDG_RST看门狗复位标志IWDG1IWDG 复位0非 IWDG 复位SWR_RST软件复位标志RSTC 触发1软件复位0非软件复位LPWR_RST低功耗复位标志1低功耗复位0非低功耗复位2. 复位原因检测代码/** * brief 读取HC32L130复位原因 * return 复位原因字符串 */ const char* get_reset_reason(void) { const char* reason Unknown Reset; /* 读取复位状态寄存器 */ uint32_t rst_sr M0P_RSTC-SR; if(rst_sr RSTC_SR_POR_RST) { reason Power On Reset (POR); } else if(rst_sr RSTC_SR_PIN_RST) { reason Pin Reset (NRST); } else if(rst_sr RSTC_SR_WDG_RST) { reason IWDG Reset; } else if(rst_sr RSTC_SR_SWR_RST) { reason Software Reset (RSTC); } else if(rst_sr RSTC_SR_LPWR_RST) { reason Low Power Reset; } /* 清除复位状态标志写入1清除 */ M0P_RSTC-KEYR 0xA5; // 解锁 M0P_RSTC-SR rst_sr; // 写入原值清除标志 M0P_RSTC-KEYR 0x00; // 重新加锁 return reason; }七、注意事项中断关闭软件复位前必须通过__disable_irq()关闭所有中断防止中断处理函数在复位过程中执行导致复位失败或异常寄存器解锁操作 RSTC 和 IWDG 寄存器时需先写入对应密钥解锁否则写入无效HC32L130 的外设寄存器大多有写保护关键数据保存若需在复位前保存关键数据可将数据写入片内 Flash 或 SRAMSRAM 在软件复位后数据不丢失上电复位才会清空时钟依赖内核复位和 RSTC 复位依赖主时钟而 IWDG 复位依赖 LSI 时钟若主时钟故障优先使用 IWDG 复位复位后初始化软件复位后MCU 的外设寄存器不会自动恢复默认值除复位相关寄存器需在main()函数中重新初始化外设。八、应用场景总结复位方式优点缺点适用场景内核NVIC_SystemReset()简单通用、跨平台无复位原因记录普通软件复位需求RSTC 寄存器复位贴合 HC32L130 硬件、可记录复位原因需解锁寄存器需要区分 “软件复位” 原因的场景IWDG 看门狗复位硬件级复位、可靠性高复位有短暂延时ms 级主程序卡死时的复位兜底通过以上方式可灵活实现 HC32L130 的软件复位功能并结合复位原因检测提升系统的可调试性和鲁棒性。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询