STM32的8种工作模式被赋值为0x00,0x04,0x28等的原因及端口速度

这篇具有很好参考价值的文章主要介绍了STM32的8种工作模式被赋值为0x00,0x04,0x28等的原因及端口速度。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

如有错误,还请包涵与指出

1.keil中的GIPO端口配置值与对应寄存器端口配置值

        在配置端口模式时,突然想到为什么stm32f10x_gpio.h文件中配置端口的模式值等于图1这些值,这些值与寄存器上介绍的值又感觉不一样,为什么这8种模式就等于对应的这些值。

//8种输出模式
typedef enum
{ GPIO_Mode_AIN = 0x0,
  GPIO_Mode_IN_FLOATING = 0x04,
  GPIO_Mode_IPD = 0x28,
  GPIO_Mode_IPU = 0x48,
  GPIO_Mode_Out_OD = 0x14,
  GPIO_Mode_Out_PP = 0x10,
  GPIO_Mode_AF_OD = 0x1C,
  GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;

//端口的三种速度
typedef enum
{ 
  GPIO_Speed_10MHz = 1,
  GPIO_Speed_2MHz, 
  GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;

图1  Keil中配置端口给的值

         在STM32中文参考手册中,可以看到端口配置低寄存器(CRL)的定义,如图2所示,对某个端口配置成推挽输出,速度为50MHz,则这4位为:0011。这里当时想糊涂了,一个是0011,一个是0x10,怎么等价的。去网上百度了一下,在正点原子论坛上有条解释是:这个固件库是为了写代码方便赋值,在GPIO_Init初始化里面进行运算,得到的赋值寄存器的相应位。

STM32的8种工作模式被赋值为0x00,0x04,0x28等的原因及端口速度,STM32学习,stm32,嵌入式硬件,单片机

图2   CRL寄存器配置

 2. 调试LED流水灯代码

        于是,打开一个LED流水灯程序,对PB5进行推挽输出配置,在Debug下观察程序执行过程。①点击魔术棒按钮,②点击显示符号窗口,③右键点击要查看的变量添加到watch窗口,如图3所示。

STM32的8种工作模式被赋值为0x00,0x04,0x28等的原因及端口速度,STM32学习,stm32,嵌入式硬件,单片机

图3 调试窗口

        将程序执行到GPIO_Init()函数前,观察watch窗口的变量值变化情况,如图4所示。随后点击单步执行,可以看到GPIO_Pin=0x0020,Speed=0x03,Mode=0x10,这与其宏定义和定义的变量值相等。

STM32的8种工作模式被赋值为0x00,0x04,0x28等的原因及端口速度,STM32学习,stm32,嵌入式硬件,单片机

图4 调试界面

2.1  GPIO_Pin=0x0020,Speed=0x03,Mode=0x10原因

        GPIO_Pin=0x0020,这在gpio.h文件中进行了宏定义,如图5所示。定义成这样的原因是:

STM32的8种工作模式被赋值为0x00,0x04,0x28等的原因及端口速度,STM32学习,stm32,嵌入式硬件,单片机

图5 引脚宏定义

        引脚0为  0000 0000 0000 0001

        引脚1为  0000 0000 0000 0010

        引脚2为  0000 0000 0000 0100

        以此类推...

        引脚15为1000 0000 0000 0000

        每个I/O端口都有寄存器配置,在参考手册中说到,ODR寄存器的0-15位分别一一对应16个I/O端口,如图6所示。我们在寄存器中对端口PB5进行置1,寄存器操作一般是:

        GPIOB_ODR | = (1<<5);

        这就与刚刚宏定义相对应起来了,哪个寄存器的位需要置1就选择对应的I/O口。

STM32的8种工作模式被赋值为0x00,0x04,0x28等的原因及端口速度,STM32学习,stm32,嵌入式硬件,单片机

图6 ODR寄存器 

         对于Speed=0x03与Mode=0x10这里用了一个枚举,程序中让10MHz=1,往后枚举值从2开始递增,所50MHz=0x03,推挽输出的值已经给出,如图7所示。

STM32的8种工作模式被赋值为0x00,0x04,0x28等的原因及端口速度,STM32学习,stm32,嵌入式硬件,单片机

图7 端口速度与模式

        一直点击单步运行,进入GPIO_Iint初始化函数,会判断是低8位还是高8位的寄存器,即CRL与CRH,寄存器每4个位控制一个端口的模式及速度,每个寄存器32位,控制8个I/O口。随着单步执行,会看到这些变量变化,如图8所示,程序具体执行过程就不再分析,直接单步执行非常清晰。

STM32的8种工作模式被赋值为0x00,0x04,0x28等的原因及端口速度,STM32学习,stm32,嵌入式硬件,单片机

图8 执行过程

3.程序变量最终执行结果

        执行到最后一步,会看到寄存器CRL和变量tmpreg的值为0x4434444,也就是0x 0100 0100 0011 0100 0100 0100 0100 0100,这与之前最开始说的一致,在PB5端口的值为:0011,正好对应了推挽输出,50MHz,如图9所示。其中也可以看到GIPOB的地址为0x40010C00,偏移量也能对应上。

STM32的8种工作模式被赋值为0x00,0x04,0x28等的原因及端口速度,STM32学习,stm32,嵌入式硬件,单片机

图9 执行完推挽输出变量值

        正如正点原子论坛中所说,对于端口初始化中的输出模式,输出速度等于多少,都是已经在这个gpio.h文件中已经计算好了,让用户可以更加方便的直接使用。还要注意的是,寄存器与Keil中.h文件中定义的值不是一个东西,不要混淆,但却有联系,.h中的值是经过计算的。文章来源地址https://www.toymoban.com/news/detail-779793.html

到了这里,关于STM32的8种工作模式被赋值为0x00,0x04,0x28等的原因及端口速度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ESP32 s3 PSRAM ID read error: 0x00ffffff 已解决。

    使用 ESP32-S3 N16R8 报错 原因是ESP32-S3R8模块内置的RSRAM 为八线模式PSRAM(OCTAL MODE PSRAM) 在menuconfig中配置 即可正常识别。 补充内容: 怎么查看芯片集成的PSRAM是什么模式的SPI呢?由于ESP-32S3的PSRAM是集成在封装内的,所以直接查看芯片数据手册,这里摘抄了相关的内容。 在八线P

    2024年02月12日
    浏览(57)
  • STM32的八种工作模式

    STM32单片机具有高性能、低成本、低功耗的优点,与它打交道就必须先了解它的几种工作模式,它共有八种IO口模式,分别是:模拟输入、浮空输入、上拉输入、下拉输入、开漏输出、推挽输出、复用开漏输出和复用推挽输出。 在这八种工作模式中分为: 1、四种 输入 模式

    2024年02月10日
    浏览(31)
  • 【STM32 CubeMX】GPIO的工作模式

    在嵌入式系统开发中,对于STM32微控制器的GPIO(General Purpose Input/Output)引脚的配置和使用是至关重要的。GPIO引脚可以通过STM32 CubeMX工具来进行灵活的配置,以满足各种应用需求。了解GPIO的工作模式对于正确配置和使用这些引脚至关重要。 GPIO是General-purpose and alternate-functio

    2024年02月22日
    浏览(25)
  • stm32_ADC电源、通道、工作模式

    0、ADC功能框图 1、ADC的电源 1.1、工作电源 VSSA=VSS,VDDA=VDD,简单来说,通常stm32是3.3V,ADC的工作电源也是3.3V; 1.2、参考电压 VREF+和VREF-并不一定引出,取决于封装,如果没有引出则VREF+连接到VDDA、VREF-连接到VSSA。 在不要求精度的情况下,VREF+可直接接到VDDA,想要精确测量,

    2024年02月12日
    浏览(27)
  • STM32学习记录——GPIO的8种工作模式

    目录 前言 一、GPIO的介绍 二、GPIO的八种工作模式 三、四种输入模式介绍及主要应用 GPIO_Mode_AIN   模拟输入 GPIO_Mode_IN_FLOATING   浮空输入 GPIO_Mode_IPD   下拉输入 GPIO_Mode_IPU  上拉输入 四、四种输出模式介绍及主要应用 GPIO_Mode_Out_OD   开漏输出 GPIO_Mode_Out_PP   推挽输出 GPIO

    2024年02月17日
    浏览(31)
  • STM32F103GPIO工作模式及原理

    GPIO,全称为通用输入输出端口,是STM32系列微控制器中的一个重要概念。STM32芯片的GPIO引脚可以被配置为输入模式或输出模式,实现与外部设备的通信、控制以及数据采集功能。 输入模式 浮空输入 上拉输入 下拉输入 模拟输入 输出模式 开漏输出 推挽输出 推挽式复用功能

    2024年01月20日
    浏览(28)
  • STM32F103——GPIO八种工作模式

    目录 1、GPIO 基本结构分析 2、GPIO 八种工作模式 2.1 输入浮空  2.2 输入上拉 2.3 输入下拉 2.4 模拟功能 2.5 开漏输出 2.6 开漏式复用功能 2.7 推挽输出 2.8 推挽式复用功能 3、GPIO 八种工作模式特点及应用  STM32F103的 GPIO 工作有八种模式,但是具体这些模式是怎么实现的?下面我们

    2024年02月14日
    浏览(28)
  • (stm32之HAL库)UART工作在DMA模式要打开串口中断吗?

    最近学习了stm32(F4xx)的串口在DMA模式下的使用,期间以ST官方提供的例程进行参考学习,发现其初始化过程中是打开了UART的中断的,而且HAL库中stm32f4xx_hal_uart.c文件中的DMA模式使用说明里也有这么一句话: 即在非循环模式下(也就是发完一次数据就停止的常用模式)需要配置

    2024年02月12日
    浏览(26)
  • STM32 GPIO的八种工作模式各有特点,适用于不同的应用场景

    学了挺久的单片机老是记不住每种模式的运用场景今天用通义千问总结了一下作为鞭策顺便记录一下 STM32 GPIO的八种工作模式各有特点,适用于不同的应用场景。以下是每种模式的简要描述及其对应的应用场景: 1. **GPIO_Mode_AIN** - **模拟输入**    - **应用场景**: 当GPIO引脚作为

    2024年04月11日
    浏览(64)
  • STM32F103ZET6 GPIO工作模式介绍+使用寄存器点亮第一个LED灯

    目录  GPIO的工作模式介绍 1.输入模式(模拟、上拉、下拉、浮空) 2.输出模式(推挽/开漏) 3.复用功能(推挽/开漏) 4.模拟输入输出(上下拉无影响) 如何使用寄存器点亮第一个LED灯         在输入模式时,施密特触发器打开,输出被禁止。可通过输入数据寄存器 GPIOx_

    2024年02月06日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包