stm32 IO口模式的寄存器配置

合集下载

单片机io口赋变量

单片机io口赋变量

单片机io口赋变量在单片机编程中,IO口(输入/输出端口)的赋值通常是通过编程来控制的。

不同的单片机可能会有不同的IO端口数量和特性,但它们的基本操作是相似的。

下面我将以一个简单的例子来说明如何给单片机的IO口赋值。

假设我们使用的是一个常见的单片机,比如STM32。

STM32单片机使用C语言进行编程,并提供了丰富的库函数来控制IO 口。

首先,你需要在程序中包含相应的头文件,这些头文件定义了单片机的寄存器和库函数。

例如:c#include "stm32f10x.h" // 这只是一个示例,实际文件名可能会有所不同接下来,你需要初始化IO口。

这通常包括设置IO口的工作模式(输入、输出、推挽、开漏等)和输出类型(如果是输出端口的话)。

STM32提供了GPIO库来简化这些设置。

例如:cvoid GPIO_Configuration(void){GPIO_InitTypeDef GPIO_InitStructure;// 开启GPIO时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);// 配置PC13为推挽输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStructure);}在上述代码中,GPIOC 和GPIO_Pin_13 分别表示GPIOC端口和该端口的第13个引脚。

这段代码将PC13引脚配置为推挽输出,并设置了输出速度。

最后,你可以通过直接给IO口的寄存器赋值来控制IO口的电平。

但是,STM32的库函数提供了一种更简单的方法:cvoid Set_High(void){GPIO_SetBits(GPIOC, GPIO_Pin_13); // 将PC13引脚设置为高电平}void Set_Low(void){GPIO_ResetBits(GPIOC, GPIO_Pin_13); // 将PC13引脚设置为低电平}在上述代码中,Set_High 和Set_Low 函数分别用来将PC13引脚设置为高电平和低电平。

stm32读取io口高电平范围

stm32读取io口高电平范围

主题:STM32读取IO口高电平范围分析内容:1. STM32简介1.1 STM32是由意法半导体公司推出的一款32位嵌入式微控制器产品线。

1.2 STM32具有高性能、低功耗、丰富的外设接口和丰富的开发工具支持等特点。

2. IO口的定义2.1 IO口是微控制器上的通用输入输出引脚,可以通过程序控制其电平状态。

2.2 在一般情况下,IO口可以设置为输入模式或输出模式。

3. STM32读取IO口高电平的方法3.1 使用GPIO读取寄存器3.1.1 GPIO读取寄存器是用来读取IO口的高电平状态的寄存器。

3.1.2 该寄存器可以通过位操作来读取每个IO口的状态,可以获取其高电平状态。

3.2 使用外部中断3.2.1 在需要及时响应IO口状态变化的情况下,可以使用外部中断来读取IO口的高电平状态。

3.2.2 外部中断可以在IO口状态发生变化时立即响应,提高了系统的实时性。

3.3 使用定时器3.3.1 定时器可以周期性地读取IO口的状态,对于需要进行定时采集的场景较为适用。

3.3.2 通过定时器可以定时读取IO口的高电平状态,并进行相应的处理和分析。

4. STM32读取IO口高电平的限制4.1 IO口的速度限制4.1.1 由于IO口的速度限制,读取高电平的频率受到一定的限制。

4.1.2 针对高速信号的IO口读取,需要根据具体情况选择合适的读取方法。

4.2 IO口的电压范围限制4.2.1 STM32的IO口在读取高电平时,需要注意其电压范围的限制。

4.2.2 超过了IO口能够承受的电压范围,可能会损坏IO口或引发其他问题。

5. 结论5.1 通过GPIO读取寄存器、外部中断、定时器等方法,可以实现STM32读取IO口高电平的功能。

5.2 在使用这些方法时,需要注意IO口的速度限制和电压范围限制,以确保系统的稳定性和安全性。

结尾:以上就是对STM32读取IO口高电平范围的分析,希望对您有所帮助。

如有任何问题,欢迎交流讨论。

STM32的IO口设置方法实例

STM32的IO口设置方法实例

STM32的IO⼝设置⽅法实例STM32的IO⼝设置⽅法实例!通过本节的学习,你将了解到STM32的IO⼝作为输出使⽤的⽅法。

本节分为如下⼏个⼩节:3.1.1 STM32 IO⼝简介3.1.2 硬件设计3.1.3 软件设计3.1.4 仿真与下载3.1.1 STM32 IO简介作为所有开发板的经典⼊门实验,莫过于跑马灯了。

ALIENTEK MiniSTM32开发板板载了2个LED,DS0和DS1,本实验将通过教你如何控制这两个灯实现交替闪烁的类跑马灯效果。

该实验的关键在于如何控制STM32的IO⼝输出。

了解了STM32的IO⼝如何输出的,就可以实现跑马灯了。

通过这⼀节的学习,你将初步掌握STM32基本IO⼝的使⽤,⽽这是迈向STM32的第⼀步。

STM32的IO⼝可以由软件配置成8种模式:1、输⼊浮空2、输⼊上拉3、输⼊下拉4、模拟输⼊5、开漏输出6、推挽输出7、推挽式复⽤功能8、开漏复⽤功能每个IO⼝可以⾃由编程,单IO⼝寄存器必须要按32位字被访问。

STM32的很多IO⼝都是5V兼容的,这些IO⼝在与5V电平的外设连接的时候很有优势,具体哪些IO⼝是5V兼容的,可以从该芯⽚的数据⼿册管脚描述章节查到(I/O Level标FT的就是5V电平兼容的)。

STM32的每个IO端⼝都有7个寄存器来控制。

他们分别是:配置模式的2个32位的端⼝配置寄存器CRL和CRH;2个32位的数据寄存器IDR和ODR;1个32位的置位/复位寄存器BSRR;⼀个16位的复位寄存器BRR;1个32位的锁存寄存器LCKR;这⾥我们仅介绍常⽤的⼏个寄存器,我们常⽤的IO端⼝寄存器只有4个:CRL、CRH、IDR、ODR。

CRL和CRH控制着每个IO⼝的模式及输出速率。

STM32的IO⼝位配置表如表3.1.1.1所⽰:表3.1.1.1 STM32的IO⼝位配置表STM32输出模式配置如表3.1.1.2所⽰:表3.1.1.2 STM32输出模式配置表接下来我们看看端⼝低配置寄存器CRL的描述,如下图所⽰:图3.1.1.1端⼝低配置寄存器CRL各位描述该寄存器的复位值为0X4444 4444,从上图可以看到,复位值其实就是配置端⼝为浮空输⼊模式。

STM32F103串口通信寄存器设置

STM32F103串口通信寄存器设置
10.PCE为校验使能位。0:禁止校验;1:使能校验。
9.PS为校验位选择。0:偶校验;1:奇校验。
8.PE中断使能。0:禁止产生中断;1:当USART_SR中PE为1时产生串口中断。默认0
7.TXIE为发送缓冲区空中断使能位。1:当USART_SR中的TXE位为1时将产生串口中断。
6.TCIE为发送完成中断使能位。1:当USART_SR中的TC位为1时将产生串口中断。
USART1->BRR=0x0ea6;//主频36M时,波特率为9600
//USART1->BRR=0x0139;//主频36M时,波特率为115200
//USART1->CR1|=0x200c;//串口开,发送长度8字节,无校验,发送开,接收开;
USART1->CR1|=0x340c;//串口开,发送长度9字节,偶校验,发送开,接收开;
//字节0x0a,则存入数表
else{if(shubiao[len-1]==0x0d){enddd=1;len--;};};};
//如果是0x0a,则判断前一个字符是不是0x0d,(回车符ASCII码为0x0a0d)//是的话则标记接受完成标志eddd并删掉已接受到的前一个字节的数据
if(enddd==1)//如果接受完成了
它是由两个寄存器组成的,一个给发送用(TDR),一个给接收用(RDR),该寄存器兼具读和写的功能。TDR寄存器提供了内部总线和输出移位寄存器之间的并行接口。RDR寄存器提供了输入移位寄存器和内部总线之间的并行接口。
当使能校验位(USART_CR1中PCE位被置位)进行发送时,写到MSB的值(根据数据的长度不同,MSB是第7位或者第8位)会被后来的校验位取代。当使能校验位进行接收时,读到的MSB位是接收到的校验位。

stm32 pc13~pc15 配置成IO口

stm32 pc13~pc15 配置成IO口

stm32 pc13~pc15 配置成IO 口在STM32 的数据手册的管脚分配图中可以看到:PC14 与OSC32_IN 公用一个引脚,PC15 与OSC32_OUT 公用一个引脚,它们的使用方法如下:当LSE(低速外部时钟信号)开启时,这两个公用管脚的功能是OSC32_IN 和OSC32_OUT。

当LSE(低速外部时钟信号)关闭时这两个公用管脚的功能是PC14 和PC15。

备用区域控制寄存器(RCC_BDCR)的LSEON 用于控制LSE 的开启或关闭。

关于这个寄存器的用法请参看《STM3210x 技术参考手册》。

文档下面有一段话:PC13,PC14 和PC15 引脚通过电源开关进行供电,因此这三个引脚作为输出引脚时有以下限制:作为输出脚时只能工作在2MHz 模式下最大驱动负载为30pF 同一时间,三个引脚中只有一个引脚能作为输出引脚。

在最新版本的文档中,同一时间,三个引脚中只有一个引脚能作为输出引脚这句话已经去掉了,即三个引脚可以同时作为输出引脚,但其他条件没有变:不能用这些引脚作为电流源,比如驱动一个LED 等。

库函数用法:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);//开C 口时钟,复用时钟。

GPIO_InitTypeDef GPIO_InitStructure;//设为输出注意:2MHZGPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13 |GPIO_Pin_14 | GPIO_Pin_15;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;GPIO_InitStructure.GPIO_Mode =。

STM32单片机的八种IO口模式解析

STM32单片机的八种IO口模式解析

STM32单片机的八种IO口模式解析
STM32八种IO口模式区别
(1)GPIO_Mode_AIN模拟输入
(2)GPIO_Mode_IN_FLOATING浮空输入
(3)GPIO_Mode_IPD下拉输入
(4)GPIO_Mode_IPU上拉输入
(5)GPIO_Mode_Out_OD开漏输出
(6)GPIO_Mode_Out_PP推挽输出
(7)GPIO_Mode_AF_OD复用开漏输出
(8)GPIO_Mode_AF_PP复用推挽输出
以下是详细讲解
(1)GPIO_Mode_AIN模拟输入
即关闭施密特触发器,将电压信号传送到片上外设模块(不接上、下拉电阻)
(2)GPIO_Mode_IN_FLOATING浮空输入
浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的
(3)GPIO_Mode_IPD下拉输入GPIO_Mode_IPU上拉输入
一般来讲,上拉电阻为1K-10K,电阻越小,驱动能力越强
电阻的作用:防止输入端悬空,减少外部电流对芯片的干扰,限流;,增加高电平输出时的驱动能力。

上拉输入:在默认状态下(GPIO引脚无输入)为高电平
下拉输入:在默认状态下(GPIO引脚无输入)为低电平
(4)GPIO_Mode_Out_OD开漏输出
开漏输出:输出端相当于三极管的集电极。

要得到高电平状态需要上拉电阻才行。

适合于做电流型的驱动,。

推荐-第4章 stm32单片机通用输入输出GPIO 精品

软件重新映射复用功能
为了使不同器件封装的外设IO功能的数量达到最优,可以把一些复用 功能重新映射到其它一些引脚上,这可以通过软件配置相应的寄存器 来完成。
USART3_TX 的默认引出脚是 PB10, USART3_RX 的默认引出脚是 PB11;重映射 后,USART3_TX 的引出脚为 PD8,变更 USART3_RX 的引出脚为PD9
STM32 引脚
PC口 16脚 PD口 3脚
PA口 16脚
PB口 16脚
STM32F103RBT6 包含4个端口: PA口 、PB口、PC口、PD口,共有 51个I/O管脚: PA口 16脚+ PB口16脚+ PC口16脚+ PD口3脚。
4.1 STM32F10x的输入/输出基本结构
4.2 GPIO相关功能寄存器
STM32单片机 最多有7个16位的并行 I/O端口: PA、PB、PC、PD、PE、PF、PG。
STM32F103Cx、103Rx单片机 只有4个16位的 并行 I/O端口:PA、PB、PC、PD。
STM32 引脚
PC口 3脚 PD口 2脚
PA口 16脚
PB口 16脚
STM32F103CBT6 包含4个端口: PA口 、PB口、PC口、PD口,共有 37个I/O管脚: PA口 16脚+ PB口16脚+ PC口3脚+ PD口2脚。
STM32F10x处理器的每个GPIO端口都对应有: 2个32位配置寄存器(GPIOx-CRL,GPIOx-CRH) 2个32位数据寄存器(GPIOx-IDR,GPIOx-ODR) 1个32位置位/复位寄存器(GPIOx-BSRR) 1个16位复位寄存器(GPIOx-BRR) 1个32位锁定寄存器(GPIOx-LCKR)

STM32寄存器操作举例


那么很明显,只可能是 GPIOx_CRL GPIOx_CRH , GPIOx_ODR 三个寄存器会有想要 仔细阅读这几个寄存器的介绍后知道,GPIOx_CRL 是控制 PIN 0-7 的属性的,GPIOx_CRH 控制 PIN 8-15, ODR 寄存器 当然就是输出数据了,将数据送到这里就行了。
然后,这几个寄存器的地址是多少?首先看 stm32f103ve.pdf 这个是官方的 datasheet、,看第四章, Mmeory Mapping 为什么看这章?会英文都能猜到吧?,看 PORTB 的地址是 0x40010C00 - 0x40010FFF ,这个就是基地 址了。基地址 加上偏移量就能找到具体的寄存器。
typedef struct {
__IO uint32_t CRL; __IO uint32_t CRH; __IO uint32_t IDR; __IO uint32_t ODR; __IO uint32_t BSRR; __IO uint32_t BRR; __IO uint32_t LCKR; } GPIO_TypeDef;
以结构体指针的形式传递 IO 口 GPIO_TypeDef* GPIOx
访问 CRL 寄存器则用成员的形式 GPIOx->CRL;
不需要担心这样做的效率,因为都是地址,也就是指针,最终的效率是直接寄存器操作,效率是非常高的。
看不懂库函数,归根究底就是 C 语言功底不行。不要以为写过几行 51 就懂 C 语言了,远的很呢。
} } 如果将寄存器做一个定义,则程序变成如下
#define RCC_APB2ENR *(volatile unsigned long *)0x40021018 #define GPIOB_CRL *(volatile unsigned long *)0x40010C00 #define GPIOB_ODR *(volatile unsigned long *)0x40010C0C

STM32开发板例程讲解之二:GPIO的描述和配置,GPIOIOTG例程精讲ch...

(二)专门的寄存器(GPIOx_BSRR 和GPIOx_BRR) 实现对GPIO 口的原子操作,即回避了设置或清除I/O端口时的“读-修改-写”操作,使得设置或清 除I/O端口的操作不会被中断处理打断而造成误动作。 (三)每个GPIO 口都可以作为外部中断的输入,便于系统灵活设计。 (四)I/O口的输出模式下,有3种输出速度可选(2MHz 、10MHz 和50MHz) ,这有利于噪声控制。 (五)所有I/O口兼容CMOS和TTL,多数I/O口兼容5V电平。 (六)大电流驱动能力:GPIO 口在高低电平分别为0.4V和VDD-0.4V时,可以提供或吸收8mA电流;如果把输入输出电平分别放宽到1.3V和VDD1.3V时,可以提供或吸收20mA电流。 (七)具有独立的唤醒I/O口。 (八)很多I/O口的复用功能可以重新映射。 (九)GPIO口的配置具有上锁功能,当配置好GPIO口后,可以通过程序锁住配置组合,直到下次芯片复位才能解锁。此功能非常有利于在程序跑飞的 情况下保护系统中其他的设备,不会因为某些I/O口的配置被改变而损坏——如一个输入口变成输出口并输出电流。
#if 0 // 配置所有未使用GPIO引脚为输入模式(浮空输入),这样可以降低功耗,并且提高器件的抗EMI/EMC 的性能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE);
//armfly :注释掉的原因是当代码在外部存储器运行时,GPIOD,E,F,G部分IO用于FSMC,因此对这些IO不能重置,否则导致取指异常 // GPIO_Init(GPIOD, &GPIO_InitStructure); // GPIO_Init(GPIOE, &GPIO_InitStructure); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |

STM32GPIO相关寄存器

STM32 GPIO 相关寄存器每个GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH)分别控制每个端口的高八位和低八位,如果IO口是0-7号的话,则写CRL寄存器,如果IO口是8-15号的话,则写CRH寄存器,两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR)一个是只读作输入数据寄存器,一个是只写作输出寄存器,一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。

常用的IO端口寄存器只有四个:CRH,CRL,IDR,ODR.数据手册中列出的每个I/O端口的特定硬件特征, GPIO端口的每个位可以由软件分别配置成多种模式。

每个I/O端口位可以自由编程,然而I/0端口寄存器必须按32位字被访问(不允许半字或字节访问)。

另外,STM32的每个端口使用前都要将其时钟使能,STM32的GPIO的时钟统一挂接在APB2上,具体的使能寄存器为RCC_APB2ENR,该寄存器的第2位到第8位分别控制GPIOx(x=A,B,C,D,E,F,G)端口的时钟使能,当外设时钟没有启用时,程序不能读出外设寄存器的数值,如打开PORTA 时钟:RCC—>APB2ENR|=1〈<2; //使能PORTA时钟使能外设时钟后,GPIOA的十六位就可以按照设定的状态工作了,之后就是具体设置哪一位了以第八位为例即高位的首位,在GPIOx_CRH寄存器中进行设置,GPIOA的每一位都有该寄存器的四位来设定相应的参数,这四位中的高两位(CNF0,CNF1)设置GPIO的输入输出模式,低两位(MODE0,MODE1)是设置GPIO的输出频率,具体可以参考STM32参考手册。

GPIOA->CRH&=0XFFFFFFF0; //清掉PA8原来的设置,同时屏蔽其它端口,不影响其它端口的设置GPIOA—〉CRH|=0X00000003;//PA8 推挽输出十六进制中的3 换成二进制 00 11 前两位00表示推挽输出,11代表输出频率50Mhz,若CRH|=0x4,表示模拟输入模式(ADC用),0x3表示推挽输出模式(作输出口用,50M速率),0x8表示上/下拉输入模式(做输入口用),0xB表示复用输出(使用IO口的第二功能,50M速率). 这是对一位的操作,当然也可以多位操作,因为STM32对GPIO操作必须是32位全字操作,设置完成后GPIOA的第8位就可以使用了之后给GPIOA—>ODR=0x xxxx xxxx送数据就行了。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档