首页 > 其他分享 >STM32的寄存器详解

STM32的寄存器详解

时间:2024-09-01 10:57:12浏览次数:9  
标签:单片机 中断 STM32 访问 详解 寄存器 GPIO

目录

前言

一、 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,访问,详解,寄存器,GPIO
From: https://blog.csdn.net/qq_38072731/article/details/140102394

相关文章

  • 【STM32开发指南】手把手带你从零开始搭建工程(HAL库版)
    【前言】STM32微控制器因其高性能、低功耗和丰富的外设资源,在嵌入式系统开发中得到了广泛应用。在开发STM32项目时,创建工程是第一步,也是至关重要的一步。【STM32开发指南】手把手带你从零开始搭建工程(标准库版)_stm32开发教程-CSDN博客文章浏览阅读1.5k次,点赞40次,收藏30次。本......
  • 双指针算法详解
      我的主页:2的n次方_       1.双指针算法双指针算法是一种在数组或字符串中常用且高效的算法技术,它通过维护两个指针(或索引)来遍历数据结构,从而解决某些问题。这种算法能够减少不必要的重复遍历,降低时间复杂度,并且往往能够使得代码更加简洁易懂。根据指针......
  • IoC&AOP详解
    1.IoC1.1什么是IoC    IoC即控制反转/反转控制。它是一种思想而不是一种技术实现,描述的是:Java开发领域对象的创建以及管理的问题    例如:现有类A依赖类B        传统开发方式:在类A中通过new关键字来创建一个类B的对象      ......
  • MVCC详解
    1.概念1.1什么是MVCCMVCC,全称Multi-VersionConcurrencyControl,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。MVCC在MySQLInnoDB中的实现主要是为了提高数据库并发性能,用更好的方式去处理读-......
  • 集合及数据结构第十二节(上)———— 二叉搜索树和Map、Set详解
    系列文章目录集合及数据结构第十二节(上)————二叉搜索树和Map、Set详解二叉搜索树和Map、Set详解搜索树的概念二叉搜索树的实现性能分析和java类集的关系搜索的概念及场景模型关于Map的说明关于Map.Entry<K,V>的说明Map的常用方法说明TreeMap的使用案例Set的常见......
  • Python的Matplotlib库详解
    Python的Matplotlib库详解Matplotlib是Python中功能强大的数据可视化库,广泛应用于科研、数据分析、报告生成等领域。它能创建各种类型的图表,帮助用户直观地展示数据。一、使用场景1.数据探索和分析:在数据科学领域,Matplotlib经常被用来绘制各种图表,如折线图、散点图、......
  • STM32--硬件读写W25Q64
    声明:我是跟着B站江科大的视频的学习过程中记录下来作者的文案,记录下来是为了方便自己日后复习。如果你也是跟着江科大的视频学习的,可以一起学习。我把其中一些白话进行了修改,并且添加了自己的一些理解。我只有一些pyhon基础,所以可能有错误,学起来也比较吃力,就把自己的一些理解......
  • STM32学习笔记,SPI通信协议(理论部分)
    SPI通信和I2C通信差不多,两个协议的目的都一样,都是实现主控芯片和各种外挂芯片之间的数据交流;有了数据交流的能力,主控芯片就可以挂载并操纵各式各样的外部芯片,来实现一个功能更强大的控制系统;课程安排与I2C通信一样,先学习SPI协议的软硬件规定;先用软件模拟的SPI,实现读写W25Q64......
  • c语言分支与循环详解
    使用if、switch实现分支结构,使用for、while、dowhile实现循环结构分支:1.1if语句的语法if(表达式) 语句;在c语言中0表示假,则语句不执行。非0表示真,语句执行1.2else与if对应,比如说一个数不是奇数就是偶数了if(表达式) 语句1;else 语句2;表达式成立则执行语句1,不成......
  • STM32F411 标准库硬件SPI (硬件NSS/CS)驱动st7735--1.8寸TFT显示屏
    TFT的spi驱动文件完整工程网盘放在末尾#include"lcd_driver.h"staticuint16_tSPI_TIMEOUT_UserCallback(uint8_terrorCode);//液晶IO初始化配置voidLCD_Driver_Init(void){ SPI_InitTypeDefSPI_InitStructure; GPIO_InitTypeDefGPIO_InitStructure; /*......