STM32F10xxx寄存器操作精解(一)

STM32自学之SPI的DMA操作(寄存器级) STM32自学之SPI的DMA操作(寄存器级) 一、实验目标 学会配置STM32的SPI寄存器和DMA寄存器,实现STM32的SPI1与SPI2通信功能,每次发送一字节数据,并可多次发送,如果接收的数据正确,则点亮LED灯。之后看可以利用DMA来实现什么功能~~~ 二、实验目的 加入DMA的SPI通信相对于普通SPI通信有什么好处?ST给SPI加了DMA功能出于什么目的?我觉得这是很重要的一个问题... 阅读详情

1. 初识STM32F10xxx寄存器:从零开始的底层操作

记得我第一次接触STM32单片机的时候,看着那些密密麻麻的寄存器名称和缩写,简直一头雾水。什么rc_w1、rt_w、rs,看起来就像天书一样。但后来我发现,其实这些寄存器就像是单片机的"控制开关",只要你懂得如何操作它们,就能完全掌控这个小小的芯片。

STM32F10xxx系列微控制器的寄存器操作,说白了就是直接跟硬件对话。不像使用库函数那样隔着一层,寄存器操作让你能够最直接、最精确地控制每一个硬件模块。这种操作方式虽然看起来复杂,但一旦掌握,你会发现它既高效又灵活。

对于嵌入式开发初学者来说,理解寄存器操作是迈向高手之路的必经阶段。即使你现在可能更习惯用HAL库或标准库,但真正遇到复杂问题或者需要优化性能时,寄存器级别的操作能力会让你游刃有余。而且,当你读懂参考手册中那些寄存器的描述,你会对整个芯片的工作原理有更深入的理解。

2. 解密参考手册中的寄存器缩写

2.1 基础读写类型:rw、r、w

最基本的寄存器操作类型就是读写控制了。rw表示可读可写,这是最常见的类型。比如控制GPIO输出状态的寄存器,通常就是rw类型,你可以读取当前状态,也可以写入新值。

r类型是只读的,这种寄存器通常用于读取硬件状态。比如说状态寄存器,你只能读取它来了解外设的当前状态,但不能修改它。如果你不小心向只读寄存器写入数据,通常不会有任何效果,但好的编程习惯是避免这样的操作。

w类型是只写寄存器,这种情况比较特殊。你可以写入数据来控制硬件,但读取时只会得到复位值。这种设计通常是为了节省硬件资源,或者因为某些技术限制。

2.2 清除型寄存器:rc_w1与rc_w0

这是STM32中很有特色的寄存器类型。rc_w1表示通过写1来清除位,而写0没有效果。这种设计在中断标志清除中特别常见。比如说,当某个中断发生时,相应的标志位会被硬件置1,你需要通过向该位写1来清除它。

我刚开始时就犯过这样的错误:以为写0可以清除标志位,结果发现中断标志一直存在。后来仔细看手册才明白,原来需要写1才能清除。这种设计虽然反直觉,但有其硬件实现的考虑。

rc_w0则相反,通过写0来清除位。这两种清除方式的选择,通常与硬件设计有关,作为开发者,我们需要仔细阅读手册,了解每个寄存器的具体行为。

2.3 特殊操作类型:rt_w、t和rc_r

rt_w(read-only write trigger)类型很有特点:你可以读取当前值,但写入任何值都会触发某个事件,而不会改变寄存器本身的值。这种寄存器通常用于启动某些操作,比如开始一个转换过程。

t(toggle)类型是我个人觉得很有趣的设计。通过写1来翻转位的状态:如果原来是0就变成1,原来是1就变成0。写0则没有效果。这种操作在控制LED闪烁等场景中特别有用。

rc_r(read/clear by read)类型就更特别了:读取这个位时会自动清除它。这种设计通常用于状态标志,读取后自动清除,避免了额外的清除操作。

3. 实战演练:GPIO寄存器操作详解

3.1 GPIO寄存器组成与功能

让我们以最常用的GPIO外设为例,看看如何实际操作寄存器。STM32的每个GPIO端口都有一组寄存器,包括配置寄存器、输入数据寄存器、输出数据寄存器和置位/复位寄存器。

GPIOx_CRL和GPIOx_CRH是配置寄存器,用于设置每个引脚的工作模式和速度。每个引脚占用4个位,可以配置为输入、输出、复用功能或模拟模式。对于输出模式,还可以设置输出速度。

我建议在修改配置寄存器时,采用"读取-修改-写入"的方式,而不是直接赋值。因为每个寄存器控制多个引脚,直接赋值可能会影响其他引脚的配置。具体做法是先读取当前值,然后用位操作修改需要改变的位,最后写回寄存器。

3.2 完整的GPIO输出配置示例

假设我们要将PA5引脚配置为推挽输出,速度50MHz,下面是通过寄存器操作实现的代码:

// 启用GPIOA时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;

// 配置PA5为推挽输出,速度50MHz
// 先清除PA5的配置位
GPIOA->CRL &= ~(GPIO_CRL_MODE5 | GPIO_CRL_CNF5);
// 设置MODE5为11(输出模式,速度50MHz)
GPIOA->CRL |= GPIO_CRL_MODE5_1 | GPIO_CRL_MODE5_0;
// CNF5设置为00(通用推挽输出)
// 因为CNF5位已经清除,所以不需要再设置

// 设置PA5输出高电平
GPIOA->BSRR = GPIO_BSRR_BS5;
// 或者输出低电平
GPIOA->BSRR = GPIO_BSRR_BR5;

这里用到了BSRR寄存器,这个寄存器设计得很巧妙:高16位用于复位(输出低电平),低16位用于置位(输出高电平)。这种设计可以避免读-修改-写操作,实现原子性的位操作。

3.3 GPIO输入配置与数据读取

对于输入配置,我们需要设置引脚为输入模式,并选择上拉或下拉电阻。假设我们要配置PA0为浮空输入:

// 启用GPIOA时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;

// 配置PA0为浮空输入
GPIOA->CRL &= ~(GPIO_CRL_MODE0 | GPIO_CRL_CNF0);
GPIOA->CRL |= GPIO_CRL_CNF0_1;  // CNF0=10表示输入浮空

// 读取PA0引脚状态
uint8_t pin_state = (GPIOA->IDR & GPIO_IDR_IDR0) ? 1 : 0;

输入数据寄存器IDR是只读的,每个位对应一个引脚的电平状态。读取时需要注意,即使某个引脚配置为输出,你仍然可以读取IDR寄存器来获取实际输出电平。

4. 系统配置与时钟控制寄存器

4.1 时钟控制寄存器操作

STM32的时钟系统相当灵活,但也相对复杂。通过RCC(Reset and Clock Control)寄存器,我们可以控制系统各个部分的时钟源和分频系数。

比如要启用GPIOB的时钟,我们需要操作APB2外设时钟使能寄存器:

RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;

记得在操作任何外设之前,都要先启用相应的时钟。这是STM32与许多其他单片机不同的地方,也是初学者常犯的错误。我曾经花了半天时间调试一个简单的GPIO程序,最后发现是忘记启用时钟了。

4.2 时钟源切换与PLL配置

STM32可以使用内部RC振荡器、外部晶体或者PLL作为系统时钟源。通过配置RCC_CFGR寄存器,我们可以切换时钟源并设置PLL参数。

下面是将系统时钟配置为72MHz的示例:

// 启用外部高速时钟
RCC->CR |= RCC_CR_HSEON;
while (!(RCC->CR & RCC_CR_HSERDY)) {}

// 配置PLL:HSE作为输入,9倍频
RCC->CFGR |= RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL9;
// 启用PLL
RCC->CR |= RCC_CR_PLLON;
while (!(RCC->CR & RCC_CR_PLLRDY)) {}

// 切换系统时钟到PLL
RCC->CFGR |= RCC_CFGR_SW_PLL;
while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL) {}

时钟配置需要在系统初始化时完成,通常是在main函数的开始处。配置时要注意各个时钟源的稳定时间,确保在切换前等待就绪标志。

5. NVIC与中断控制寄存器

5.1 中断优先级配置

STM32的NVIC(Nested Vectored Interrupt Controller)提供了灵活的中断优先级管理。每个中断源都可以配置优先级,支持抢占优先级和子优先级。

设置中断优先级的示例:

// 设置USART1中断的优先级
// 优先级分组为2位抢占优先级,2位子优先级
NVIC_SetPriorityGrouping(2);

// 设置抢占优先级为1,子优先级为2
NVIC_SetPriority(USART1_IRQn, (1 << 2) | 2);

在实际项目中,合理设置中断优先级很重要。高优先级的中断应该处理时间敏感的任务,而低优先级的中断可以处理不那么紧急的事情。

5.2 中断使能与标志管理

使能特定中断需要通过NVIC的ISER寄存器,清除中断标志则通常通过外设的相应寄存器。

// 使能USART1中断
NVIC_EnableIRQ(USART1_IRQn);

// 在中断服务程序中清除标志位
void USART1_IRQHandler(void) {
    if (USART1->SR & USART_SR_RXNE) {
        // 读取数据会自动清除RXNE标志
        uint8_t data = USART1->DR;
        // 处理数据
    }
}

中断标志的管理需要特别注意。有些标志通过读取数据寄存器清除,有些需要写特定值清除,还有些会自动清除。一定要参考参考手册,确保正确清除中断标志,否则会导致重复进入中断。

6. 调试技巧与常见陷阱

6.1 寄存器操作调试方法

调试寄存器操作时,我通常使用以下几种方法:首先是用调试器直接查看寄存器值,大多数IDE都提供了外设寄存器查看功能;其次是用逻辑分析仪或示波器验证硬件信号;最后是添加日志输出,帮助理解程序执行流程。

遇到寄存器操作不生效时,首先检查时钟是否启用,然后检查寄存器地址是否正确。有时候编译器优化可能会影响寄存器访问,这时可以使用volatile关键字确保每次都会实际访问寄存器。

6.2 常见错误与解决方法

我在寄存器操作中踩过不少坑,比如忘记启用外设时钟、错误计算位偏移、混淆set和clear寄存器等。其中一个特别隐蔽的错误是字节序问题:STM32是小端模式,但有些寄存器位域的定义可能会让人困惑。

另一个常见错误是未正确理解寄存器的复位值。有些寄存器复位后是全0,有些则有特定的初始值。在修改寄存器前,最好先读取当前值,然后只修改需要的位。

对于保留位,一定要保持其复位值不变。虽然有些保留位读返回0,写无效,但为了兼容未来的芯片版本,最好避免修改这些位。

7. 进阶技巧:位带操作与原子访问

7.1 位带操作原理与应用

STM32的位带功能提供了真正的位级原子访问能力。通过位带别名区,我们可以像访问普通变量一样访问单个位,而不用担心读-修改-写操作带来的竞态条件。

位带区的计算公式稍微复杂一些:

// 计算外设位带别名地址
#define PERIPH_BB_BASE  0x42000000
#define PERIPH_BASE     0x40000000

#define PERIPH_REG(reg) (*(volatile uint32_t *)(PERIPH_BASE + (reg)))
#define BITBAND_PERIPH(reg, bit) \
    (*(volatile uint32_t *)(PERIPH_BB_BASE + ((reg) - PERIPH_BASE) * 32 + (bit) * 4))

// 使用示例:操作GPIOA ODR的第5位
BITBAND_PERIPH(0x4001080C, 5) = 1;  // 设置PA5输出高

位带操作在中断和主程序共享的标志位中特别有用,可以避免使用临界区保护,提高代码效率。

7.2 原子操作与临界区保护

对于不支持位带的寄存器,或者需要修改多个位的情况,我们需要使用原子操作。STM32提供了Cortex-M内核的原子操作指令,也可以使用临界区保护。

// 使用LDREX/STREX实现原子操作
uint32_t atomic_set_bit(volatile uint32_t *reg, uint32_t bit) {
    uint32_t value;
    do {
        value = __LDREXW(reg);
        value |= (1 << bit);
    } while (__STREXW(value, reg));
    return value;
}

// 或者使用临界区
__disable_irq();
GPIOA->ODR |= GPIO_ODR_ODR5;
__enable_irq();

临界区保护应该尽量简短,避免影响中断响应时间。对于简单的位操作,优先考虑使用位带或者硬件提供的set/reset寄存器。

真正掌握寄存器操作需要时间和实践,建议从简单的GPIO控制开始,逐步尝试更复杂的外设如USART、SPI、定时器等。每学到一个新的外设,就仔细阅读参考手册中关于寄存器的描述,理解每个位的作用和操作方式。

STM32GPIO寄存器CRL、CRH、IDR、ODR、BSRR、BRR GPIO 寄存器描述 注意:本文以STM32F10XXX为参考,重在理解 CRL与CRH CRL与CRH分别为端口配置低与端口配置高寄存器,为32位寄存器,其中每四位控制一个I/O口 对CNFy与MODEy(y=0,1,2…7)位写1或0控制I/O口的输入输出模式 STM32I/O口都是16位的,CRL与CRH分别控制低8位与高8位,两个寄存器的用法与功能完全一模一样,下面来几个例子就明白了 e.g.PD1配置为推挽输出,最大速度50MHz GPIOD->CRL=3<<4. 阅读详情

相关推荐

STM32F10xxx Cortex-M3 编程手册详述

Cortex-M3是ARM公司设计的一款针对实时嵌入式应用的32位处理器内核,广泛应用于微控制器中。本章节将介绍Cortex-M3的核心特性,从它的基础架构讲起,到它的性能优势以及如何在复杂的嵌入式环境中实现有效的任务调度。Cortex-M3内核采用三级流水线,具备Thumb-2指令集,允许同时执行32位和16位指令,提高代码密度和性能。它的哈佛结构设计使得指令和数据可以并行访问,进一步加快了程序的执行速度。在嵌入式系统中,微控制器的外设集扮演着至关重要的角色,它决定了微控制器的功能和性能。

weixin_42350014的博客 1549

stm 32 直接读取寄存器 --方法

1)unsigned long *p = ((volatile unsigned long *) 0x40021370); unsigned long ReadValue = *p; printf(">>>ReadValue :0x%X\n", ReadValue ); ...

Take_it_easier的博客 4907

STM32F10xxx Cortex-M3 微控制器编程综合指南

ARM Cortex-M3是一个广泛使用的32位RISC处理器内核,专为微控制器设计。该内核拥有高性能,同时保持了低功耗特性,适合实时应用。M3内核的特点包括Thumb-2指令集,提供了指令集效率和代码密度之间的平衡,以及非对齐数据访问支持,简化了硬件设计。STM32F10xxx系列微控制器基于ARM Cortex-M3内核,是ST公司生产的高性能32位微控制器。这款系列的微控制器是为嵌入式应用设计的,集成了丰富的片上外设和存储器资源,具有高灵活性、低功耗和高性能的特点。

weixin_42097508的博客 1200

STM32寄存器读写操作

将为你总结如何利用 位偏移(Pos)和位掩码(Msk)进行寄存器的 读和 操作。这种方法在寄存器编程中非常通用且规范。

Flocx的博客 1529

STM32F10xxx DMA 控制器深入应用:实践案例与技术要点

在嵌入式系统开发中,高效的数据处理是实现高性能应用的关键。为此,许多现代微控制器集成了直接内存访问(DMA)控制器,以提高数据吞吐量并降低CPU负担。STM32F10xxx系列微控制器正是这样的一个示例,它搭载了功能强大的DMA控制器,使其成为进行高速数据处理的理想选择。STM32F10xxx微控制器由意法半导体(STMicroelectronics)开发,该系列包含多种型号,以满足不同应用需求。从低功耗到高性能,这些微控制器提供了多种配置选项,而DMA控制器便是其中的一大特色。

weixin_33610780的博客 876

TexGen模型导出到ABAQUS的inp文件:如何快速修改纱线材料属性(避坑指南)

本文针对TexGen模型导出到ABAQUS的inp文件后纱线材料属性缺失或错误的问题,提供了高效的解决方案。文章详细解析了inp文件结构,指导用户如何手动定位并修改纱线材料属性,并提供了可批量处理的Python脚本,帮助用户快速、精准地完成材料参数赋值,有效提升复合材料仿真工作效率。

ice55的博客 603

从零开始:STM32F10xxx寄存器操作权限的实战解读与避坑指南

本文深入解析STM32F10xxx系列微控制器的寄存器操作权限,包括rw、r、w、rc_w1等权限类型及其正确使用方法。通过实战案例揭示常见误区,如中断标志清除错误和保留位处理隐患,并提供基于参考手册的避坑指南和调试技巧,帮助开发者提升代码稳定性和系统可靠性。

u0v1w2x3的博客 613

CKAD-CN 考试知识点分享(12) Secret - 1

步骤操作完成1提取 Deployment 中的硬编码 Secret 值✅2创建名为postgres的 Secret✅3修改 Deployment 使用引用 Secret✅4验证新 Pod 正常运行✅❌未删除原 Deployment✅(遵守要求)✅任务完成。敏感信息已从环境变量移出,安全地存储在 Kubernetes Secret 中。

轻的博客 634

学习STM32F10xxx寄存器以及初始化GPIO端口

stm32寄存器学习

小伙子的博客 2234

麒麟V10服务器多硬盘安装与分区实战:告别自动分区,手动分配/boot、swap和/根目录

本文详细介绍了麒麟V10服务器在多硬盘环境下的手动分区策略,包括/boot、swap和/根目录的优化分配方案。通过SSD与HDD混合存储架构的合理规划,提升系统性能和运维效率,适用于企业级定制化系统部署需求。

weixin_26976635的博客 410

模型量化必知:Per-Tensor和Per-Channel到底怎么选?

本文深入解析了模型量化中Per-Tensor与Per-Channel两种核心策略的抉择。Per-Tensor量化实现简单、硬件兼容性极佳,适合激活值或分布均匀的权重;而Per-Channel量化精度更高,能更好地处理权重分布不均的卷积层,是现代CNN权重量化的主流。文章提供了从硬件平台、数值分布到精度需求的实战决策框架,并推荐了“权重Per-Channel,激活Per-Tensor”的混合量化最佳实践。

assembly8low的博客 983

[STM32f10xxx库函数]定义、命名和编码规则

[STM32f10xxx库函数]1.定义、命名和编码规则1.定义2.命名规则3.编码规则3.1变量3.2布尔型3.3标志位状态类型3.4功能状态类型3.5错误状态类型3.6外设 1.定义 2.命名规则 PPP 表示任一外设缩写,例如: ADC。 系统、源程序文件和头文件命名都以“stm32f10x_”作为开头,例如: stm32f10x_conf.h。 常量仅被应用于一个文件的,定义于该文件中;被应用于多个文件的,在对应头文件中定义。所有常量都由英文字母大写书写。 寄存器作为常量处理。他们的命名都由英文字

HGEVRFBIERBV的博客 2571

【华为鸿蒙3.0/荣耀安卓12使用VMOS Pro的激活方式】

解压激活工具 →连接数据线 轻松搞定激活!

Amy_mumu的博客 142万+

STM32寄存器的简介、地址查找,与直接操作寄存器

本文主要是对STM32寄存器的简介、地址查找,与直接操作寄存器进行讲解

qq_58759694的博客 8209

agent-browser OpenClaw 的最佳搭档

agent-browser 是专为 AI Agent 设计的浏览器自动化工具,目前被公认为 OpenClaw 的最佳配套方案。这份技术文档完整记录了其架构、协议、性能调优与常见问题处理,非常适合想让OpenClaw 真正“上手”互联网的开发者与老用户。

liu_zhiyi的博客 1782

国科大学习资料--数据挖掘(刘莹)--第三章习题及参考答案

国科大学习资料–数据挖掘(刘莹)–第三章习题及参考答案 国科大学习资料–数据挖掘(刘莹)–第三章习题及参考答案 国科大学习资料–数据挖掘(刘莹)–第三章习题及参考答案 第 3 章分类与回归 3.1简述决策树分类的主要步骤。 答:决策树生成的过程如下: (1)对数据源进行数据预处理, 得到训练集和测试集; (2)对训练集进行训练; (3)对初始决策树进行树剪枝; (4)由所得到的决策树提取分类规则; (5)使用测试数据集进行预测,评估决策树模型; 3.2给定决策树,选项有:(1)将决策树转换成规则,然后对结果

无名何许人的博客 3094

【正点原子STM32】STM32基础知识(F1F4F7H7 STM32系统框架、寻址范围、存储器映射的存储器功能划分、寄存器映射)

一、STM32系统框架 - 1.1、Cortex M内核 & 芯片 - 1.2、F1系统架构 - 1.3、F4系统架构 - 1.4、F7系统架构 - 1.5、H7系统架构 二、STM32的寻址范围? 三、存储器映射 - 存储器功能划分(F1为例) - STM32F1存储器映射图 四、寄存器映射 - 寄存器基础知识 - STM32寄存器分类 - 寄存器映射(F1为例) - 寄存器描述解读 - 寄存器映射举例 - 寄存器地址计算 - GPIOA_ODR寄存器地址计算过程: - 使用结构体,可以很方便的

咖喱年糕的博客 4246

2026年寒武纪数字IC笔试试卷带答案

本文摘要: 该数字IC设计测试卷包含单选题(30分)、波形分析题(15分)、多选题(30分)三类客观题,覆盖时序约束、半导体工艺、状态机、数制转换、同步复位等核心知识点。重点考察:1)跨时钟域处理(如异步FIFO、格雷码应用);2)时序分析(建立/保持时间、时钟约束指令);3)低功耗设计技术(时钟门控、DVFS);4)寒武纪MLU架构特性(张量核、混合精度计算)。解析强调工程实践要点,如异步复位需同步释放、建立时间违例与频率的关联性等。试题难度梯度明显,既包含基础概念辨析(如Moore/Mealy状态机),

Open 224

STM32F10xxx参考手册注解(一)

寄存器是计算机中央处理器(CPU)中的一部分,它们是非常快速且能够暂时存储数据的特殊存储单元。寄存器通常用于保存操作数、中间结果以及指令地址等,是计算机执行算术或逻辑运算时直接使用的存储空间。由于寄存器直接与CPU相连,访问速度非常快,通常比访问主存(RAM)要快得多。在程序执行过程中,CPU会从内存中读取指令,然后将这些指令中涉及到的操作数加载到寄存器中,进行计算或处理,再将结果写回到内存或寄存器中。

lovingking416的博客 1726

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

STM32F10xxx参考手册

STM32F10xxx参考手册 【下载地址】STM32F10xxx参考手册 本手册全面解析STM32F10xxx系列微控制器的核心功能与特性,涵盖寄存器描述、存储架构、电源管理、时钟控制、中断处理、DMA控制器、模拟/数字转换、定时器、实时时钟、看门狗、存储器控制、通信接口(如USB、CAN、SPI、I2C、USART)...

gitblog_06769的博客 445

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

STM32F10xxx——看门狗

重装载寄存器是一个 12 位的寄存器,里面装着要刷新到计数器的值,这个值的大小决定着独立 看门狗的溢出时间。STM32F10xxx内置两个看门狗,独立看门狗和窗户看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。狗,在生活中我们非常熟悉,常见的有,在田园里的土狗,生活中的累成狗;软件必须以一定的间隔写入0xAAAA,否则,当计数器为0时,看门狗会产生复位。时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟 或过早的操作。

weixin_67953478的博客 1202

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【免费下载】 STM32F10xxx中文板参考手册PDF下载

STM32F10xxx中文板参考手册PDF下载 【下载地址】STM32F10xxx中文板参考手册PDF下载分享 STM32F10xxx中文板参考手册PDF下载本仓库提供STM32F10xxx系列微控制器的中文板参考手册PDF文件下载 ...

gitblog_06512的博客 3089

STM32中断编程步骤

介绍stm32f10x中断的概念,已经中断向量表,还有中断编程的一下要点,涉及的一下寄存器

bsqetuo的博客 9205

【STM32笔记】STM32的看门狗详解(独立看门狗和窗口看门狗)

首先,它不是真的狗。看门狗(Watchdog)是一种硬件定时器,用于监测程序执行是否正常,并在系统出现故障或死锁时重启系统。

Macy~的博客 1万+
上一篇: 蓝牙模块的“人性化”设计:从用户故事看HC-05的体验优化与常见坑点
下一篇: 电赛电源进阶——C2000 F2800157 GPIO深度配置与SysConfig实战解析
python9snake
博客等级 码龄1天 0粉丝 1724原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值