连接三个LED灯到单片机引脚,并编写程序来控制它们的状态。可以使用sbit关键字定义变量,并将LED灯的状态赋值给这些变量。在程序中编写一个循环,使三个LED灯以固定的频率交替闪烁。...实验原理图 3.3.2 LED 灯电路连接图图中从 3 个 LED 灯的阳极引出连接到 3.3V 电源,阴极各经过 1 个电阻引入至 STM32 的 3 个 GPIO 引脚 PH10、PH11、PH12...中,所以我们只要控制这三个引脚输出高低电平, 即可控制其所连接 LED 灯的亮灭。...如果您的实验板 STM32 连接到 LED 灯的引脚或极性不 一样,只需要修改程序到对应的 GPIO 引脚即可,工作原理都是一样的。...我们的目标是把 GPIO 的引脚设置成推挽输出模式并且默认下拉,输出低电平,这样就 能让 LED 灯亮起来了。3. 主要仪器设备STM32开发板,keil5软件4. 实验内容及步骤1.
目录 端口复用 端口复用映射原理 GPIOx AFRL GPIOx AFRH 流程 ---- 端口复用 STM32有很多的内置外设,这些外设的外部引脚都是与GPIO复用的。...从表中可以看出,32 位寄存器 GPIOx_AFRL 每四个位控制一个 IO 口,所以每个寄存器控制 32/4=8 个 IO 口。...寄存器对应四位的值配置决定这个 IO 映射到哪个复用功能 AF。 ...对于外设复用功能的配置,除了 ADC 和 DAC 要将 IO 配置为模拟通道之外其他外设功能一律 要配置为复用功能模式,这个配置是在 IO 口对应的 GPIOx_MODER 寄存器中配置的。...上面两步,在我们库函数中是通过 GPIO_Init 函数来实现的,参考代码如下: /*GPIOA9 与 GPIOA10 初始化*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin
IIC通信协议详解 一、前言 1、IIC的概述 2、IIC分为软件IIC和硬件IIC 二、IIC通信协议 1、空闲状态 2、开始信号与停止信号 3、 应答信号 4、 发送数据 5、接收数据 三、STM32...数据线SDA:用来一位一位的传送数据。...2、IIC分为软件IIC和硬件IIC 软件IIC:软件IIC通信指的是用单片机的两个I/O端口模拟出来的IIC,用软件控制管脚状态以模拟I2C通信波形,软件模拟寄存器的工作方式。...硬件IIC:一块硬件电路,硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的,硬件(固件)I2C是直接调用内部寄存器进行配置。...打开 myiic.h 头文件可以看到,我们除了函数申明之外,还定义了几个宏定义标识符: //IO 方向设置 #define SDA_IN() {GPIOB->MODER&=~(3<<(9*2));GPIOB
子优先级分组:用于配置同一优先级中多个中断之间的响应顺序,通过NVIC模块的IPR(Interrupt Priority Register)寄存器进行配置。...在使用STM32中的EXTI外部中断时,需要注意以下几点: 配置GPIO引脚:首先需要将要使用的GPIO引脚配置为输入模式,同时使能外部中断线。...在外部中断中,为了允许对每个I/O引脚选择不同的中断线,需要使用AFIO来配置GPIO端口的复用功能,从而定义中断线的连接。...在STM32外部中断的使用中,这三个组件经常一同出现: AFIO和GPIO可以一起配置中断线路和端口,以便将输入引脚映射到正确的外部中断线路。...,也就是所有的管脚寄存器(ODR和BSR等,不包括MODER)都运行在50MHz的时钟下 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode
单片机的寄存器通常用于配置外设、控制GPIO、设置通信参数等,使用位操作可以高效、精准地对寄存器进行配置,而不会影响其他无关位。...1、使用位掩码 位掩码用于选择寄存器中的特定位,而不影响其他位。常见的位操作包括 置位、清位、翻转、读取。..._5 5 // 置位PA5引脚(输出高) GPIOA_ODR |= (1 << PIN_5); 2、使用宏定义 使用宏定义可以提高代码的可移植性和可读性,减少硬编码。...1 : 0) 示例(使用宏定义控制GPIO): SET_BIT(GPIOA_ODR, PIN_5); // 置位 CLEAR_BIT(GPIOA_ODR, PIN_5); // 清零 TOGGLE_BIT...)功能,可以定义结构体,并指定每个字段占用的位数,适用于某些特殊寄存器操作。
BSRR: 位设置/重置寄存器,用于设置或重置 GPIO 引脚的状态。 BRR: 位重置寄存器,用于重置 GPIO 引脚的状态。 LCKR: 锁定寄存器,用于锁定 GPIO 配置,防止进一步更改。...这些头文件通常包括: 4.1 GPIO 外设头文件 #include "stm32f10x_gpio.h" stm32f10x_gpio.h: 定义 GPIO 外设的寄存器操作函数,如 GPIO 初始化...CLEAR_BIT: 清除寄存器中的某一位为 0。 READ_BIT: 读取寄存器中某一位的值。 MODIFY_REG: 修改寄存器中的某些位。...这些宏定义用于简化寄存器的位操作,使代码更加清晰和易于维护。 11....它提供了对微控制器外设寄存器的定义、寄存器操作宏和外设库函数接口,帮助开发者高效地配置和操作外设。 在实际开发中,利用 STM32 标准外设库和 HAL 库可以简化外设的配置和操作,提升开发效率。
单片机又有8位的如51单片机、16位的如MSP430、32位的如STM32,通常我们说的多少位通常指的是内核(CPU)一次处理的数据宽度。...STM32具有超低的价格、超多的外设、丰富的型号、优异的实时性、极低的开发成本等优势。STM32凭借其产品线的多样化、极高的性价比、简单易用的库开发方式,迅速在众多32位单片机中脱颖而出。...换句话说每个外设(如GPI0、USART、I2C、SPI.…)都对应有寄存器来对他控制。 所以STM32可以用寄存器开发也可以用库开发。...其中第一个参数指要打开哪一组GPIO的时钟,取值参见stm32f10x_rcc.h文件中的宏定义,第二个参数为打开或关闭使能,取值参见stm32f10x.h文件中的定义,其中ENABLE代表开启使能,DISABLE...文件中定义的,其中第一个参数代表要配置哪组GPIO,取值参见stm32f10x.h文件中的定义,第二个参数是第1步定义的GPIO的初始化类型结构体。
讲解GPIO口输入)---初学者必看 03 STM32寄存器开发基础-点亮LED灯(讲解GPIO口输出)---初学者必看 04 STM32寄存器开发基础-位段操作(以检测按键为例) 05 STM32寄存器开发基础...(2)C语言的位运算是必须必须要会,我的STM32教程里都是采用寄存器编程,寄存器编程都是采用位运算操作STM32的寄存器,如果你不懂位运算,那么可能就看不懂如何操作硬件寄存器。...从下面的寄存器截图里可以看出,这个寄存器是32位,有32个位。 每4个位表示一个GPIO口的模式。...在STM32中文参考手册_V10.pdf里的。 通过以上的2个官方手册资料给出的信息,我们就可以写出代码了。 下面是我封装好的位段代码。...就可以直接使用已经定义好的寄存器进行配置。 那我们可不可以自己定义寄存器名字,不要官方的stm32f10x.h头文件呢? 那当然是可以的。 如果你为了能更加清晰的搞懂底层,是可以自己写的头文件的。
STM32 IO口取反 | 寄存器方式 | 异或运算符 | 原理 1. 引言 在嵌入式系统中,IO口(输入/输出口)的控制是非常基础且重要的操作。...通过GPIO,可以实现对外部设备的控制,如LED、按钮、传感器等。 2.2 STM32的GPIO架构 STM32的GPIO架构具有以下特点: 每个GPIO引脚可以配置为输入或输出模式。...支持多种工作模式,如推挽输出、开漏输出、浮空输入、上拉输入、下拉输入等。 提供多种速度选择,以满足不同应用的需求。 通过寄存器操作可以实现对GPIO的高效控制。...3.1 寄存器操作实现取反 GPIO引脚的输出状态存储在ODR(输出数据寄存器)中,通过对该寄存器进行操作,可以实现引脚状态的修改。具体操作步骤如下: 读取当前ODR寄存器的值。...以下是本文的要点总结: GPIO引脚的基本概念和STM32的GPIO架构。 GPIO寄存器的功能和使用方法。 异或运算符的基本原理及其在GPIO引脚取反中的应用。
而bit-banding(位带操作)的目的就是实现直接操作单一比特位 为了达成这个目的首先我们有必要理解STM32的特殊存储区段位带区与位带别名区。...下图中的红色方框代表位带区的范围,可以看到SRAM中位带区佔有1MB,外设区段部分,1MB的储存范围刚好涵盖了AHB, APB1, APB2,可以说我们使用的大部分外设,例如GPIO, UART, SPI...: 外设位带别名区首地址: 0x42000000 SRAM位带别名区首地址: 0x22000000 为了在运算当中不用在程式中编写两个不同的运算式,我们试着将两个公式用一条语句来完成: (bit_band_addr...(uint16_t LED){ BIT_GPIOH(BIT_MODER, (LED*2)) = SET; BIT_GPIOH(BIT_MODER, ((LED*2)+1)) = RESET...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
函数库讲解 在正常使用中,除了STM32CubeMX配置之外,我们有时候还需要自己配置一些东西,学习并理解HAL库,也是我们必须要学习的一个地方 首先打开stm32f4xx_hal_gpio.h 发现一共定义有...GPIO的相关配置寄存器 STM32的每组GPIO口包括7个寄存器。...这7个寄存器分别为: GPIOx_CRL:端口配置低寄存器(32位) GPIOx_CRH:端口配置高寄存器(32位) GPIOx_IDR:端口输入寄存器(32位) GPIOx_ODR:端口输出寄存器(32...位) GPIOx_BSRR:端口位设置/清除寄存器(32位) GPIOx_BRR:端口位清除寄存器(16位) GPIOx_LCKR:端口配置锁存寄存器(32位) 具体我们这里就不讲了,篇幅有限,可以到《...STM32中文参考手册》中查看 关于GPIO的八种模式请参看 《STM32 GPIO八种模式及工作原理详解》 按键消抖: /** * 函数功能: 按键外部中断回调函数 * 输入参数: GPIO_Pin
其他GPIO端口以此类推即可。 ③寄存器位表 紧接着的是本寄存器的位表,表中列出它的 0-31 位的名称及权限。...而有的寄存器位只读,一般是用于表示 STM32 外设的某种工作状态的,由 STM32硬件自动更改,程序通过读取那些寄存器位来判断外设的工作状态。...同样,读寄存器也是用取指针操作,把寄存器中的数据取到变量里,从而获取 STM32外设的状态。...封装寄存器列表 用上面的方法去定义地址,还是稍显繁琐,例如 GPIOA-GPIOE 都各有一组功能相同的寄存器,如 GPIOA_ODR/GPIOB_ODR/GPIOC_ODR 等等,它们只是地址不一样,...这样的地址偏移与 STM32 GPIO 外设定义的寄存器地址偏移一一对应,只要给结构体设置好首地址,就能把结构体内成员的地址确定下来,然后就能以结构体的形式访问寄存器。
其他GPIO端口以此类推即可。 ③寄存器位表 紧接着的是本寄存器的位表,表中列出它的0-31 位的名称及权限。...而有的寄存器位只读,一般是用于表示STM32 外设的某种工作状态的,由STM32硬件自动更改,程序通过读取那些寄存器位来判断外设的工作状态。 ...同样,读寄存器也是用取指针操作,把寄存器中的数据取到变量里,从而获取STM32 外设的状态。 2....封装寄存器列表 用上面的方法去定义地址,还是稍显繁琐,例如GPIOA-GPIOE 都各有一组功能相同的寄存器,如GPIOA_ODR/GPIOB_ODR/GPIOC_ODR 等等,它们只是地址不一样,...这样的地址偏移与STM32 GPIO 外设定义的寄存器地址偏移一一对应,只要给结构体设置好首地址,就能把结构体内成员的地址确定下来,然后就能以结构体的形式访问寄存器。
注意的是有一个地址叫偏移地址,是相对于GPIO这个外设的基地址的偏移量 在28页 这就是位表 紧接着的是本寄存器的位表,表中列出它的0-31 位的名称及权限。...而有的寄存器位只读,一般是用于表示STM32外设的某种工作状态的,由STM32 硬件自动更改,程序通过读取那些寄存器位来判断外设的工作状态。 这也好理解,你一个复位的寄存器,你想读说明东西出来。...例如本寄存器中有两种寄存器位,分别为BRy 及BSy,其中的y 数值可以是0-15,这里的0-15 表示端口的引脚号,如BR0、BS0 用于控制GPIOx 的第0 个引脚,若x 表示GPIOA,那就是控制...BSRR是对一个位的操作 因为如果对寄存器的操作,就是要不停的看各种定义。 GPIO的寄存器就这么多 很多时候要操作GPIO前要先看看状态是什么?...这样的地址偏移与STM32 GPIO 外设定义的寄存器地址偏移一一对应,只要给结构体设置好首地址,就能把结构体内成员的地址确定下来,然后就能以结构体的形式访问寄存器。
尽管有这样的保护,并不意味着STM32 的引脚能直接外接大功率驱动器件,如直接驱动电机,强制驱动要么电机不转,要么导致芯片烧坏,必须要加大功率及隔离电路驱动。...在STM32的应用中,除了必须用开漏模式的场合,我们都习惯使用推挽输出模式。 开漏输出一般应用在I2C、SMBUS 通讯等需要“线与”功能的总线电路中。...“输入数据寄存器GPIOx_IDR”中,通过读取该寄存器就可以了解GPIO 引脚的电平状态。...通过对GPIO 寄存器写入不同的参数,就可以改变GPIO 的工作模式, 第一个就是 这些是功能所在 在GPIO外设中,控制端口高低控制寄存器CRH和CRL 可以配置每个GPIO 的工作模式和工作的速度...需要在外部定义一个SystemInit 函数设置STM32 的时钟;STM32 上电后,会执行SystemInit 函数,最后执行C 语言中的main 函数。
17.2 GPIO涉及到的寄存器 GPIO外设涉及到的寄存器比较少,也容易理解,推荐大家阅读GPIO源码的时候将参考手册中对应的寄存器功能做一个了解。...Configuration --------------------*/ /* 配置为模拟模式 */ GPIOx->MODER |= (GPIO_MODER_MODER0 GPIO的BSRR寄存器进行设置,使用这个寄存器的好处是支持原子操作,由硬件支持的。原子操作的含义是操作过程不会被中断打断,而我们使用GPIO中另一个设置输出的寄存ODR是会被中断打断的。...注意事项: 此函数是锁住用户设置的引脚所对应的寄存器某些位,并不是把整个寄存器都锁住了。 一旦锁住后,就不能再修改,只有复位后才可以重新配置。...17.5 总结 本章节就为大家讲解这么多,建议大家将GPIO的驱动源码结合参考手册中的寄存器通读一遍,对于我们后面章节的学习大有裨益。
STM32的低功耗模式设计是嵌入式系统中非常重要的一个环节,尤其在电池供电的设备中,如何在保持一定功能的情况下降低功耗显得尤为重要。...对于大部分外设,如GPIO、PWM、ADC、DAC等,在低功耗模式下需要保存它们的配置寄存器的状态。 这可以通过在进入低功耗模式前保存外设的寄存器状态,然后在恢复时将其加载。...可以使用RCC寄存器来重新启用相关外设时钟,并确保时钟稳定后再恢复外设功能。 一些外设(如GPIO、USART等)可能在进入低功耗模式时需要重新初始化。 可以通过配置寄存器来恢复其工作模式。...例如,当STM32进入待机模式时,只有重要的外设(如RTC)能够唤醒系统,其他外设通过外部中断唤醒。 在此过程中,调度器能够选择性地恢复任务执行。...对于功耗敏感的应用,调试过程中通过功耗测试设备(如电流探针)来实时检测系统功耗,并确保低功耗模式的设计能够有效降低功耗。
STM32 芯片的GPIO被分成很多组,每组有16 个引脚,如型号为STM32F103VET6 型号的芯片有GPIOA、GPIOB、GPIOC 至GPIOE 共5 组GPIO,芯片一共100 个引脚,其中...最基本的输出功能是由STM32 控制引脚输出高、低电平,实现开关控制,如把GPIO引脚接入到LED 灯,那就可以控制LED 灯的亮灭,引脚接入到继电器或三极管,那就可以通过继电器或三极管控制外部大功率电路的通断...而“置位/复位寄存器GPIOx_BSRR”可以通过修改输出数据寄存器的值从而影响电路的输出。 4....复用功能输出 “复用功能输出”中的“复用”是指STM32 的其它片上外设对GPIO 引脚进行控制,此时GPIO 引脚用作该外设功能的一部分,算是第二用途。...在GPIO 外设中,控制端口高低控制寄存器CRH和CRL 可以配置每个GPIO的工作模式和工作的速度,每4 个位控制一个IO,CRH 控制端口的高八位,CRL 控制端口的低8 位,具体的看CRH 和CRL
4.1 NVIC优先级分组 NVIC的中断优先级由优先级寄存器的4位(0~15)决定,这4位可以进行切分,分为高n位的抢占优先级和低4-n位的响应优先级。...6.AFIO复用 AFIO主要用于引脚复用功能的选择和重定义 在STM32中,AFIO主要完成两个任务:复用功能引脚重映射、中断引脚选择 这个结构比较简单,就是16个数据选择器,选择16个接到对应的EXTI...向上首先触发一个挂起寄存器,就相当于一个中断标志位,我们可以通过读取这个标志位来判断是哪个通道出发的中断。...8.EXTI 外部中断的详细函数讲解 在 STM32 的固件库或 HAL 库中,外部中断的配置和使用主要包括以下几个步骤: GPIO 配置:将指定的 GPIO 引脚设置为外部中断模式。...(RCC_APB2Periph_AFIO, ENABLE); //开启AFIO的时钟,外部中断必须开启AFIO的时钟 参数: GPIOx:指定 GPIO 端口(如 GPIOA, GPIOB)。
我们还可以使用GPIO来模拟通信协议,比如I2C,SPI或者某个芯片特定的协议,我们都可以使用GPIO的输出模式来模拟其中中输出时序部分」 1.2GPIO基本结构 在STM32中,所有的GPIO都是挂载在...输入寄存器读取为1,就证明对应的端口目前是高电平,读取为0,就是低电平 因为STM32是32位的单片机,所以STM32内部都是32位的,但是这个端口只有16位,所以这个寄存器只有低16位对应的有端口...第②种方式是通过设置这个位设置和位清除寄存器,如果我们要对某一位进行置1的操作,在位设置的寄存器的对应的位写1即可,剩下不需要操作的位写0,这样他内部就会有电路,自动将输出寄存器中对应的位置写1,而剩下写...第③种方式就是读写STM32中的位带区域,这个位带的作用就和STM32中的位寻址的作用差不多,在STM32中,有一段区域映射了RAM和外设寄存器所有的位,读写这段地址中的区域,就相当于读写所映射位置的某一位一样...,在推挽输出模式下,STM32对IO口有绝对的控制权,高低电平都对STM32说的算,②在开漏模式下,这个P-MOS是无效的,只有N-MOS在工作,数据寄存器为1时,下管断开,这时输出寄存器相当于断开,这就是高阻模式