STM32的寄存器详解

2024-09-01 11:12
文章标签 详解 stm32 寄存器

本文主要是介绍STM32的寄存器详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

一、 STM32 单片机寄存器概述

1.寄存器的作用

2.寄存器的分类

二、STM32 内核寄存器

1.程序计数器(PC)

2.堆栈指针(SP)

3.链接寄存器(LR)

4.控制寄存器(CONTROL)

三、STM32 外设寄存器

1.GPIO寄存器

2.USART 寄存器

3.TIM 定时器寄存器

4.ADC 寄存器

四、寄存器的访问方式

1.直接访问

2.库函数访问

五、寄存器编程的注意事项

1.寄存器的位定义

2.寄存器的访问顺序

3.中断处理中的寄存器访问

六、总结


前言

    在嵌入式系统开发中,STM32 单片机以其高性能、丰富的外设和灵活的编程方式而备受青睐。理解 STM32 单片机的寄存器是深入掌握其工作原理和进行高效编程的关键。本文将详细介绍 STM32 单片机的寄存器,帮助读者更好地理解和应用这一强大的微控制器。

一、 STM32 单片机寄存器概述

寄存器是微控制器内部的一种高速存储单元,用于存储控制信息、数据和状态标志等。STM32 单片机拥有众多的寄存器,它们分布在不同的外设模块和内核中,共同协作实现各种功能。

1.寄存器的作用

  • 控制外设的工作模式和参数设置。
  • 读取外设的状态信息和数据。
  • 配置内核的运行模式和中断处理。

2.寄存器的分类

  • 通用寄存器:用于存储临时数据和地址。
  • 特殊功能寄存器(SFR):特定于某个外设或内核功能的寄存器,用于控制和状态监测。

二、STM32 内核寄存器

1.程序计数器(PC)

  • 作用:存储下一条要执行的指令的地址。
  • 特点:自动递增,指向程序的执行流程。

2.堆栈指针(SP)

  • 作用:指向堆栈的顶部,用于存储函数调用时的局部变量和返回地址。
  • 分为主堆栈指针(MSP)和进程堆栈指针(PSP),可根据不同的运行模式切换使用。

3.链接寄存器(LR)

  • 作用:在函数调用时存储返回地址。
  • 当发生中断或异常时,LR 也用于保存返回地址,以便在中断处理完成后恢复程序的执行。

4.控制寄存器(CONTROL)

  • 作用:控制处理器的运行模式,如选择特权级和堆栈指针。
  • 可用于切换处理器的运行状态,如进入和退出中断处理。

三、STM32 外设寄存器

1.GPIO寄存器

  • GPIOx_MODER:用于设置 GPIO 引脚的工作模式,如输入、输出、模拟等。
  • GPIOx_OTYPER:配置 GPIO 引脚的输出类型,推挽输出或开漏输出。
  • GPIOx_OSPEEDR:设置 GPIO 引脚的输出速度。
  • GPIOx_PUPDR:选择 GPIO 引脚的上拉或下拉电阻。
  • GPIOx_IDR 和 GPIOx_ODR:分别用于读取输入引脚的状态和设置输出引脚的值。

2.USART 寄存器

  • USARTx_SR:状态寄存器,包含发送和接收状态标志。
  • USARTx_DR:数据寄存器,用于发送和接收数据。
  • USARTx_BRR:波特率寄存器,设置串口通信的波特率。
  • USARTx_CR1、USARTx_CR2 和 USARTx_CR3:控制寄存器,用于配置串口的工作模式、中断等。

3.TIM 定时器寄存器

  • TIMx_CR1:控制寄存器 1,设置定时器的计数模式、预分频系数等。
  • TIMx_ARR:自动重装载寄存器,决定定时器的计数周期。
  • TIMx_CNT:计数器寄存器,存储当前的计数值。
  • TIMx_DIER:中断使能寄存器,允许或禁止定时器的中断。
  • TIMx_SR:状态寄存器,包含定时器的各种状态标志。

4.ADC 寄存器

  • ADCx_CR1 和 ADCx_CR2:控制寄存器,用于配置 ADC 的工作模式、转换触发等。
  • ADCx_SMPR1 和 ADCx_SMPR2:采样时间寄存器,设置 ADC 的采样时间。
  • ADCx_SQR1、ADCx_SQR2 和 ADCx_SQR3:通道序列寄存器,用于选择要转换的通道。
  • ADCx_DR:数据寄存器,存储转换后的结果。

四、寄存器的访问方式

1.直接访问

通过寄存器的地址直接读取或写入寄存器的值。例如,使用指针访问寄存器:*(volatile uint32_t *)0x40020000 = 0x01;

2.库函数访问

STM32 提供了丰富的库函数,可以方便地访问寄存器。例如,使用 GPIO 库函数设置引脚输出:GPIO_SetBits(GPIOA, GPIO_Pin_5);

五、寄存器编程的注意事项

1.寄存器的位定义

  • 理解寄存器中每个位的含义和作用,避免错误地设置或读取寄存器的值。
  • 可以参考 STM32 的参考手册和数据手册,了解寄存器的详细位定义。

2.寄存器的访问顺序

  • 某些寄存器的设置需要按照特定的顺序进行,以确保正确的操作。
  • 在进行复杂的外设配置时,要仔细阅读参考手册中的操作步骤和注意事项。

3.中断处理中的寄存器访问

  • 在中断处理程序中,要注意寄存器的状态可能会被其他中断或程序修改
  • 尽量减少在中断处理程序中对寄存器的访问,以避免影响系统的实时性和稳定性。

六、总结

STM32 单片机的寄存器是实现各种功能的关键组成部分。通过深入理解寄存器的作用、分类和访问方式,开发者可以更好地掌握 STM32 单片机的工作原理,进行高效的编程和系统设计。在实际应用中,要注意寄存器的位定义、访问顺序和中断处理等问题,以确保系统的正确运行。希望本文对读者在学习和使用 STM32 单片机的寄存器时有所帮助。

这篇关于STM32的寄存器详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1126770

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor

LabVIEW FIFO详解

在LabVIEW的FPGA开发中,FIFO(先入先出队列)是常用的数据传输机制。通过配置FIFO的属性,工程师可以在FPGA和主机之间,或不同FPGA VIs之间进行高效的数据传输。根据具体需求,FIFO有多种类型与实现方式,包括目标范围内FIFO(Target-Scoped)、DMA FIFO以及点对点流(Peer-to-Peer)。 FIFO类型 **目标范围FIFO(Target-Sc

019、JOptionPane类的常用静态方法详解

目录 JOptionPane类的常用静态方法详解 1. showInputDialog()方法 1.1基本用法 1.2带有默认值的输入框 1.3带有选项的输入对话框 1.4自定义图标的输入对话框 2. showConfirmDialog()方法 2.1基本用法 2.2自定义按钮和图标 2.3带有自定义组件的确认对话框 3. showMessageDialog()方法 3.1

脏页的标记方式详解

脏页的标记方式 一、引言 在数据库系统中,脏页是指那些被修改过但还未写入磁盘的数据页。为了有效地管理这些脏页并确保数据的一致性,数据库需要对脏页进行标记。了解脏页的标记方式对于理解数据库的内部工作机制和优化性能至关重要。 二、脏页产生的过程 当数据库中的数据被修改时,这些修改首先会在内存中的缓冲池(Buffer Pool)中进行。例如,执行一条 UPDATE 语句修改了某一行数据,对应的缓

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD