在操作寄存器的时候,操作的是都寄存器的绝对地址,如果每个外设寄存器都这样操作,那将非常麻烦。...我们考虑到外设寄存器的地址都是基于外设基地址的偏移地址,都是在外设基地址上逐个连续递增的,每个寄存器占32 个字节,这种方式跟结构体里面的成员类似。...这些结构体内的成员,都代表着寄存器,而寄存器很多时候是由外设或STM32 芯片状态修改的,也就是说即使CPU 不执行代码修改这些变量,变量的值也有可能被外设修改、更新,所以每次使用这些变量的时候,我们都要求...所以我们要再找到外设的地址,我们可以把这些外设的地址定义成一个个宏,实现外设存储器的映射。 不装逼了,就是这样的一点东西。...首先通过强制类型转换把外设的基地址转换成GPIO_TypeDef 类型的结构体指针,然后通过宏定义把GPIOA、GPIOB 等定义成外设的结构体指针,通过外设的结构体指针我们就可以达到访问外设的寄存器的目的
上图中,左边的GPIO_VCC表示STM32的GPIO口,它可以输出3.3V和0V电压。这里就用S1开关控制这两种电压。...比较安全的做法是把外接电源和常开端连接到外接的高压电路中。 所以,GPIO口通过三极管驱动继电器的电路如下: 左边是STM32的单片机端口通过三极管输出电压,右边是继电器。...当GPIO = +3.3V时,继电器的1和4引脚之间的电压约为0.7V;此时继电器的开关连接到3号引脚;负载R16上没有电流。...无论继电器是否在工作,电源上都要流出较大电流,这个电路的功耗是很高的。尤其是当GPIO为1时,R10的功耗为:0.33 * 0.33 * 10 = 1w,而此时我们的继电器实际上并没有工作。...改进: 现在在三极管的发射极 (E极) 上连接4.3k电阻 (也可以更大)。继电器并联在这个电阻上。 当GPIO为0时,三极管断开,发射极没有电流,功耗极低,继电器不被驱动。
从菜鸟到牛人的学习步骤 我们假定大家已经对STM32的书籍或者文档有一定的理解。如不理解,请立即阅读STM32的文档,以获取最基本的知识点。 英文好的同学,请不要以为你很牛,可以只看英文文档。...步骤二,挑选部分例程的HEX,比如LED灯的例程HEX文件,下载到芯达STM32开发板中,观察两个LED灯的闪烁情况。这部分的操作,可以参考我们推出的相应的教程进行。...如何验证自己已经熟悉调试软件的操作了呢?很简单,神舟STM32开发板光盘里附带了很多HEX格式的文件,可以选择一些HEX文件,来观察运行结果。...实际的项目中,代码成百上千个,如何一个一个自己写?调用固件库中的函数来完成,才是王者之道。 GPIO本身的编程实际上很简单: 1、设置GPIO口的引脚为输入或者输出模式。...2、操作寄存器,往寄存器里置1或者清零操作——这个步骤,固件库已经提供了专门的GPIO_SetBits函数和GPIO_ResetBits函数,我们只要去调用即可实现对IO口的置1和清零。
本文将详细介绍如何通过寄存器方式和异或运算符对STM32的GPIO引脚进行取反操作,帮助读者深入理解这一过程。 2....支持多种工作模式,如推挽输出、开漏输出、浮空输入、上拉输入、下拉输入等。 提供多种速度选择,以满足不同应用的需求。 通过寄存器操作可以实现对GPIO的高效控制。...2.3 GPIO寄存器简介 STM32的GPIO控制通过一系列寄存器实现,主要包括以下几个: GPIOx_CRL/CRH(配置寄存器低/高):配置引脚的模式和功能。...以下是本文的要点总结: GPIO引脚的基本概念和STM32的GPIO架构。 GPIO寄存器的功能和使用方法。 异或运算符的基本原理及其在GPIO引脚取反中的应用。...感谢各位的阅读和支持,如果觉得这篇文章对你有帮助,请不要吝惜你的点赞和评论,这对我们非常重要。再次感谢大家的关注和支持!
前言 上一节我们讲解了STM32CubeMX的基本使用和工程的配置,那么这一节我们正式来学习CubeMX配置STM32的各个外设功能了 今天我们会详细的带你学习STM32CubeMX配置外部中断,并且讲解...HAL库的GPIO的各种函数,带你学习不一样的STM32 如果还没有配置过工程,请参看上一篇博客 《STM32CubeMX教程二–基本使用(新建工程点亮LED灯)》 那么话不多说,我们开始正式的讲解吧!...,但我们只需要动几下鼠标便可以完成操作,这正是STM32CubeMX的强大之处 GPIO_EXIT的6种模式 我们的按键选择下降沿触发 1.4设置NVIC(嵌套向量中断控制器) 1点击NVIC2 勾选...GPIO的相关配置寄存器 STM32的每组GPIO口包括7个寄存器。...STM32中文参考手册》中查看 关于GPIO的八种模式请参看 《STM32 GPIO八种模式及工作原理详解》 按键消抖: /** * 函数功能: 按键外部中断回调函数 * 输入参数: GPIO_Pin
在STM32点灯的时候,一般输出低电平点灯,输出高电平灭灯。在嵌入Linux操作系统的情况下,我们自然也要想到有个写1/0的思想。类比我们上一篇的hello程序: ?...此时我们可以把上一节的led_init函数led_drv_write函数进行修改: ? ? 与STM32一样,对于i.MX 6ULL的GPIO外设来说,也有很多寄存器: ?...上面我们只是点一个灯,如果是要点多个灯呢?那就得操控多个GPIO。如果进行地址映射的写法还像上面那样,代码就会显得很臃肿。回想一下我们STM32,GPIO外设通过结构体来管理它的寄存器: ?...在这里,我们也可以模仿STM32那样子,用一个结构体来对i.MX 6ULL的GPIO的寄存器进行管理,如: struct GPIO_RegDef { volatile unsigned int DR...)); 然后就可以向STM32那样来操控GPIO寄存器,如: GPIO5->DR &= ~(1 GPIO5_IO03输出低电平 */ GPIO5->DR |= (1 << 3);
目前STM32开发方式主要由3种:寄存器、标准库、HAL 库。...当前这个系列文章的STM32开发主要是选择寄存器方式开发,寄存器开发优点是: 代码较少、整体比较精简,运行效率较高。...点亮LED灯,需要控制STM32的GPIO口输出指定的电平,STM32GPIO口编程步骤分为: 开时钟 配置GPIO口模式 控制GPIO口输出 中文参考手册里的第6章和第8章分别介绍了时钟寄存器和GPIO...GPIO口模式配置寄存器有两个:CRL和CRH,一个IO口由4个二进制位表示,STM32是32位的MCU,一个寄存器是32位,GPIO口分为GPIOA,GPIOB,GPIOC等很多组,每一组的GPIO口的数量是...所以要配置一组GPIO口的模式需要64个二进制位,所以就分成了两个寄存器来表示。 CRL配置07的GPIO口,CRH就配置815的IO口。
stm32芯片的GPIO引脚与外部设备连接起来,GPIO既然一个引脚可以用于输入、输出或其他特殊功能,那么一定有寄存器用来选择这些功能。...将上拉和下拉的开关都关断,这种状态我们称为浮空模式,一旦配置成这个模式,引脚的电压是不确定的,如果用万用表测量此模式下管脚电压时会发现只有 1 点几伏,而且还不时改变,所以一般情况下我们都会给引脚设置成上拉或者下拉模式...在复用功能输入模式时,GPIO 引脚的信号传输到 STM32 其他片上外设,由该外设读取引脚的状态。...输入上拉模式:上拉就是把点位拉高,比如拉到Vcc。上拉就是将不确定的信号通过一个电阻嵌位在高电平。电阻同时起到限流的作用。弱强只是上拉电阻的阻值不同,没有什么严格区分。...GPIO相关寄存器六、在stm32中选用io模式(1) 浮空输入_IN_FLOATING ——浮空输入,可以做KEY识别,RX1(2)带上拉输入_IPU——IO内部上拉电阻输入(3)带下拉输入_IPD—
目录 1、基本结构 2、4种输入模式 3、4种输出模式 4、GPIO选型和配置 ---- 1、基本结构 STM32 GPIO是通用输入/输出端口的英文简称,其可实现输入、输出、驱动、通信等功能,STM32...或字节(8位)进行访问,具体模式如下所示: 浮空输入 上拉输入 下拉输入 模拟输入 开漏输出 推挽输出 复用功能推挽输出 复用功能开漏输出 以STM32L011为例(其他STM32处理器大同小异),GPIO...3、P-MOS、N-MOS:单元电路使得GPIO具有“推挽输出”和“开漏输出”的功能。 2、4种输入模式 STM32具有浮空输入、上拉输入、下拉输入和模拟输入4种输入模式。...3、4种输出模式 STM32有开漏输出、推挽输出、复用功能开漏输出和复用功能推挽输出4种输出模式(本文STM32L011的上、下拉电阻为公共区域,所以输出模式具有上拉或下拉功能)。...复用功能开漏输出模式、复用功能推挽输出模式的原理和开漏输出模式、推挽输出模式原理基本一致,只不过输出的高低电平,不是由MCU配置置位/复位寄存器或者输出数据寄存器的值,而是利用片上外设模块的复用功能输出来决定的
GPIO 是通用输入输出端口的简称,简单来说就是STM32 可控制的引脚,STM32 芯片的GPIO 引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。...GPIO 框图剖析 通过GPIO 硬件结构框图,就可以从整体上深入了解GPIO 外设及它的各种应用模式。...复用功能输出 “复用功能输出”中的“复用”是指STM32 的其它片上外设对GPIO 引脚进行控制,此时GPIO 引脚用作该外设功能的一部分,算是第二用途。...输入数据寄存器 看GPIO 结构框图的上半部分,GPIO 引脚经过内部的上、下拉电阻,可以配置成上/下拉输入,然后再连接到施密特触发器,信号经过触发器后,模拟信号转化为0、1 的数字信号,然后存储在...复用功能输入 与“复用功能输出”模式类似,在“复用功能输入模式”时,GPIO引脚的信号传输到 STM32 其它片上外设,由该外设读取引脚状态。
以下是关于STM32 GPIO输入的一些基本知识点: 引脚配置:每个GPIO引脚可以独立配置为输入或输出,支持多种输入模式。...输入模式:GPIO输入引脚可以配置为上拉、下拉或浮空输入,以适应不同的电路设计。 中断功能:GPIO输入支持外部中断,可以在信号变化时触发中断处理程序,增强实时响应能力。...STM32 GPIO 输入配置步骤 配置STM32的GPIO输入一般需要以下几个步骤: 选择GPIO引脚: 确定要使用的GPIO引脚,参考STM32的引脚图,确保该引脚支持输入功能 启用时钟:...可以通过软件去抖动或硬件滤波器来提高信号的稳定性。 总结 STM32的GPIO输入功能为外部设备交互提供了灵活的解决方案。...通过正确配置GPIO引脚,开发者可以有效地读取外部信号,并在需要时触发中断,增强系统的响应能力。希望本文能够帮助您更好地理解和使用STM32的GPIO输入功能。
HAL库和标准库的使用区别不大,也无需知道外设寄存器地址,主函数如代码段 6.5.1 所示。...输出参数:无 * 返回值:无 * 函数作用:初始化 LED 的引脚,配置为上拉推挽输出 */ void LedGpioInit(void) { // 定义 GPIO 的结构体变量 GPIO_InitTypeDef...; // 默认上拉 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;// 引脚反转速度设置为快 // 初始化引脚配置 HAL_GPIO_Init(GPIOB,...【总结】 本章开始讲解了一些STM32结构的基础知识,这些知识对STM32的整体理解会有很大帮助,读者应多理解。 随后介绍的四种开发模式,读者重点理解C语言操作寄存器开发和使用HAL库开发。...后续的实验会以HAL库为主,但读者也应理解HAL库的本质也是操作寄存器,因此理解如何操作寄存器,对以后学习、调试,都会有帮助。
STM32芯片内部可以粗略划分两部分:内核+片上外设。如果与电脑类比,内核与片上外设就如同电脑的CPU与主板、内存、显卡、硬盘的关系。...那个东西就是寄存器,其实不管我们用库开发还是寄存器开发我们本质上就是在控制寄存器上的每个位的通断,并且这些寄存器都有其特定的功能。....…)都对应有寄存器来对他控制。 所以STM32可以用寄存器开发也可以用库开发。 STM的选型 STM32是ST的所有产品的统称,ST有两大家族STM8和STM32。...点亮LED灯 GPIO简介 参考自:【STM32开发】STM32 GPIO配置 GPI0是通用输入输出端口的简称,从名字上也可看出GPIO最基本的功能就输入和输出。...具有上拉或下拉功能的复用功能开漏 GPIO_Mode_AF_OD 我的STM32开发板板载两个LED小灯,电路图如下: GPIO配置 由于STM32的GPIO工作模式有8种,所以在GPIO
外设寄存器结构体 3.1 GPIO 寄存器结构体 GPIO(通用输入输出)寄存器结构体定义了 GPIO 外设的寄存器布局。...CRH: 配置寄存器高,用于配置 GPIO 引脚的模式和输出类型(高 16 位)。 IDR: 输入数据寄存器,读取 GPIO 引脚的输入值。 ODR: 输出数据寄存器,设置 GPIO 引脚的输出值。...查阅参考手册:STM32 的参考手册提供了详细的寄存器描述和外设功能。尽管外设库封装了很多细节,但理解寄存器的工作原理仍然很重要。 使用外设库函数:利用外设库函数来配置和操作外设。...这些文档提供了详细的寄存器描述、功能说明和应用指导,是开发过程中必不可少的参考资料。 示例代码:STM32 官方网站和 GitHub 上提供了丰富的示例代码,涵盖了各种外设和功能。...感谢各位的阅读和支持,如果觉得这篇文章对你有帮助,请不要吝惜你的点赞和评论,这对我们非常重要。再次感谢大家的关注和支持!
51单片机的开发模式基于寄存器开发,这里的寄存器我们可以把它想象成中间人。...需要通过配置寄存器(端口、定时器、串口、AD、IIC、SPI等)去控制片上的外设,也就是通过一定的游戏规则(没人教你,游戏你一样会玩,还贼溜)告诉中间人你要做什么。...配置寄存器的过程是了解单片机内部硬件非常重要的基础。买一个开发板就可以搞定这部分的学习,初步掌握这些寄存器的使用方法。...51单片机直接配置寄存器,而STM32由于需要配置的寄存器较多,官方推出现成的库(中间人太多,需要1个代表)让用户直接调用,一次性去配置所用外设的相关寄存器,这样可以有效减少工作量以及出错的机率,意义重大...下面是配置STM32端口的示例代码,使用参考:STM32单片机介绍1。
3.1关于STM32文档学习 本期教程,我们假定大家已经对STM32的书籍或者文档有一定的理解。如不理解,请立即阅读STM32的文档,以获取最基本的知识点。...如何验证自己已经熟悉调试软件的操作了呢?很简单, STM32开发板光盘里附带了很多HEX格式的文件,可以选择一些HEX文件,来观察运行结果。...比如LED灯的例程HEX文件,下载到芯达STM32开发板中,观察LED灯的闪烁情况。灯在闪烁,就说明你刚才的操作已经把HEX文件烧写到闪存中了。...实际的项目中,代码成百上千个,如何一个一个自己写?调用固件库中的函数来完成,才是王者之道。 GPIO本身的编程实际上很简单: 1、设置GPIO口的引脚为输入或者输出模式。...2、操作寄存器,往寄存器里置1或者清零操作——这个步骤,固件库已经提供了专门的GPIO_SetBits函数和GPIO_ResetBits函数,我们只要去调用即可实现对IO口的置1和清零。
因为有上面这个需求,才有了本篇博文,此处涉及的技术点包括:FSMC接口、内存管理两大块,这两块在网络上已经有大量的资料了,本篇博文本着记录总结的目的,综合讲述下FSMC的原理、相关寄存器、参数设置方法、...一定要记住一点,总线是硬件实现的,有严格的规定好的时序。 ...4 FSMC相关寄存器及配置参数 STM32 的 FSMC 各 Bank 配置寄存器如下: 红框标记的是对于NOR FLASH或SRAM配置涉及的寄存器,通过这 3 个寄存器, 可以设置...假设原来FSMC_A0-A18和A0-A18是一一对应的,这时,你把FSMC_A0和A1对调下,当MCU控制写地址1的时候,实际上写的是0x00000002,反过来读地址1的时候,实际上也是读的这个0x00000002...若本文对您有帮助,轻抬您发财的小手,关注/评论/点赞/收藏,就是对我最大的支持! 祝君升职加薪,鹏程万里!
在STM32中,使用寄存器地址偏移来访问和控制特定寄存器,这可以通过指针操作和位域操作等方式来实现。需要注意的是,对于不同的芯片型号和不同的寄存器组,其基地址和偏移量可能会有所不同。...时钟中断寄存器是一类特殊的寄存器,用于配置 STM32 微控制器中的时钟中断。...例如,在使用STM32的ADC(模数转换器)时,可以选择在每个APB2时钟上采样来提高转换精度。...在开漏模式下,输出引脚不会直接提供高电平的输出,而是通过连接一个上拉电阻或使用内部上拉电阻来实现。上拉电阻的值通常很大,因此在输出高电平时,输出电平可能不稳定,容易受到外部干扰的影响。...弱上拉是指在输入端口(比如微控制器的GPIO口)上通过加入一个大约为10kΩ的电阻,从而使该输入端口与VCC(正电源)之间形成一个电阻分压网络,从而使输入端口的电压在没有外部信号的情况下趋向于高电平,即被上拉到
其中,GPIO就是STM32控制器中的一种重要的通用输入输出口。 GPIO全称为“General Purpose Input and Output”,即通用输入输出口。...在STM32控制器中,GPIO口通常是通过引脚配置和寄存器编程进行控制的。...2.GPIO基本结构 STM32的系统结构如下图,在STM32中,所有的GPIO都是挂载在APB2外设总线上的,APB2在APB1的左边,GPIO的名称是按照GPIOA,GPIOB......的方式来命名的...每个GPIO外设有16个引脚,从0-15,每个GPIO中包含了寄存器和驱动器,寄存器就相当于一个特殊的存储器,内核可以通过APB2总线来对寄存器进行读写,这就可以完成输出电平和读取电平了。...因为STM32是32位的单片机,所以内部的寄存器都是32位的,但是端口只有16位,所以寄存器只有低16位有端口,高16位是没有端口的。
除此之外,还用在电平不匹配的场合,如需要输出5 伏的高电平,就可以在外部接一个上拉电阻,上拉电源为5 伏,并且把GPIO 设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出5 伏的电平,具体见图STM32...上拉了 前面提到的双MOS 管结构电路的输入信号,是由GPIO“输出数据寄存器GPIOx_ODR”提供的,因此我们通过修改输出数据寄存器的值就可以修改GPIO 引脚的输出电平。...就是这样的 接下来看输入: 看GPIO 结构框图的上半部分,GPIO 引脚经过内部的上、下拉电阻,可以配置成上/下拉输入,然后再连接到施密特触发器,信号经过触发器后,模拟信号转化为0、1 的数字信号,然后存储在...看,绕过了施密特触发器 GPIO就是输入和输出,复用,那么就是有如下的: 就是这样 输入(模拟/浮空/上拉/下拉): 在输入模式时,施密特触发器打开,输出被禁止,可通过输入数据寄存器GPIOx_IDR...需要在外部定义一个SystemInit 函数设置STM32 的时钟;STM32 上电后,会执行SystemInit 函数,最后执行C 语言中的main 函数。
领取专属 10元无门槛券
手把手带您无忧上云