第2章 STM32单片机IO端口编程
stm32 汇编语言 gpio读写
stm32 汇编语言gpio读写在STM32微控制器上使用汇编语言进行GPIO(General Purpose Input/Output)的读写涉及到寄存器的操作。
以下是一个简单的例子,演示如何使用汇编语言在STM32上进行GPIO读写。
请注意,具体的寄存器和位定义可能会因不同的STM32型号而有所不同,下面的示例基于Cortex-M系列的STM32微控制器。
首先,假设我们要配置一个GPIO引脚为输出,并将其电平设置为高。
我们使用的是ARM汇编语言(GNU汇编语法),这是通用的语法,但具体的寄存器和位定义可能需要根据你的芯片手册进行调整。
```assembly.global _start.section .text_start:// 设置RCC_AHB1ENR 寄存器的GPIOA 位,使能GPIOA 时钟LDR R1, =0x40023830 // RCC_AHB1ENR 地址LDR R0, [R1] // 读取RCC_AHB1ENR 的当前值ORR R0, R0, #(1 << 0) // 设置GPIOA 位STR R0, [R1] // 将修改后的值写回RCC_AHB1ENR// 设置GPIOA_MODER 寄存器的MODER5 位,将GPIOA Pin 5 配置为输出LDR R1, =0x40020000 // GPIOA 地址LDR R0, [R1, #0x00] // 读取当前GPIOA_MODER 的值ORR R0, R0, #(1 << 10) // 设置MODER5 为01 (输出模式)STR R0, [R1, #0x00] // 将修改后的值写回GPIOA_MODER// 设置GPIOA_ODR 寄存器的ODR5 位,将GPIOA Pin 5 输出电平设置为高LDR R0, [R1, #0x14] // 读取当前GPIOA_ODR 的值ORR R0, R0, #(1 << 5) // 设置ODR5 为1 (高电平)STR R0, [R1, #0x14] // 将修改后的值写回GPIOA_ODR// 无限循环loop:B loop```上述代码的作用是配置GPIOA Pin 5 为输出,并将其电平设置为高。
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口高电平范围的分析,希望对您有所帮助。
如有任何问题,欢迎交流讨论。
第2章-STM32单片机应用基础与项目实践-微课版-屈微-清华大学出版社
2.3 STM32系列芯片
• 2004年ARM公司推出了Cortex-M3 MCU 内核。紧随其后,ST(意 法半导体)公司就推出了基于Cortex-M3内核的MCU,就是STM32。 STM32凭借其产品线的多样化、极高的性价比、简单易用的开发 方式,迅速在众多Cortex-M3 MCU中脱颖而出。
图 2.1 Cortex-M3 的内核架构简化框图
2.2.2 ARM Cortex-M3应用与编程
• Cortex-M3处理器是一个32位的处理器。内部的数据路径是32位的, 寄存器是32位的,寄存器接口也是32位的;Cortex-M3的指令和数 据各使用一条总线,所以Cortex-M3处理器对多个操作可以并行执 行,加快了应用程序的执行速度;Cortex-M3处理器使用Thumb-2 指令集,它允许32位指令和16位指令同时使用,代码密度与处理 性能大幅RM微处理器包括:ARM7系列、ARM9系列、ARM9E系列、 ARM10E系列、ARM11系列、SecurCore系列、Inter的XScale、ARM Cortex系列等。
• 1. ARM7系列
• 适用于对价位和功耗要求较高的消费类应用,应用领域:工业控 制、Intenet设备、网络和调制解调器、移动电话等。
• Cortex-M3内核的架构如图2.1图所示,下面主要关注架构图中标 了序号的模块:寄存器组、NVIC、中断和异常、储存器映射、总 线接口、调试支持。
• Cortex-M3中央内核基于哈佛架构,指令和数据各使用一条总线, 所以Cortex-M3处理器对多个操作可以并行执行,加快了应用程序 的执行速度。内核流水线分3个阶段:取指、译码和执行。
• 7.StrongARM和XScale系列 • Inter StrongARM SA - 1100处理器是32位RISC微处理器; • 采用ARM体系结构高度集成,融合Inter的设计和处理技术及ARM体系结构的
stm32单片机 io口对地电阻
一、概述在嵌入式系统开发中,常常需要对STM32单片机的IO口进行操作。
其中,IO口对地电阻的问题是一个重要的话题。
本文将详细介绍STM32单片机IO口对地电阻的相关知识,包括其原理、计算方法和在实际开发中的应用。
二、STM32单片机IO口对地电阻的原理1. STM32单片机IO口STM32单片机拥有丰富的外设资源,其中IO口是其中最基本的一个。
IO口可以设置为输入或者输出模式,用于连接外部设备或者作为数据输入输出的通道。
2. IO口对地电阻的概念在使用IO口时,会涉及到与地之间的电阻。
当IO口处于输出模式时,如果外部设备与IO口相连,就会形成一个电路。
而在该电路中,IO口与地之间的电阻就称为IO口对地电阻。
IO口对地电阻的大小会影响IO口的输出电平和稳定性,因此需要合理设置。
三、STM32单片机IO口对地电阻的计算方法1. IO口对地电阻的计算公式IO口对地电阻的大小可以通过计算得出。
假设STM32单片机输出高电平时的输出电流为I,输出低电平时的输出电流为I_L,从而可以得到IO口对地电阻的计算公式如下:R = V / I其中R为IO口对地电阻,V为IO口输出高电平时的电压。
2. 实际计算方法在实际计算中,需要先确定IO口的输出电压和输出电流大小,然后通过上述公式即可计算得出IO口对地电阻的大小。
在计算时需要考虑实际电路中的影响因素,如外部电阻等。
四、STM32单片机IO口对地电阻的应用1. IO口对地电阻的影响IO口对地电阻的大小直接影响了IO口输出电平的稳定性和可靠性。
较大的IO口对地电阻会导致输出电平波动较大,甚至无法正常输出高电平。
合理设置IO口对地电阻对于保证IO口正常工作至关重要。
2. 设置IO口对地电阻的方法在实际开发中,可以采取一定的措施来设置IO口对地电阻。
可以通过外部电路方式对IO口进行负载补偿,从而降低IO口对地电阻的大小,提高输出稳定性。
五、结论本文从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开漏输出
开漏输出:输出端相当于三极管的集电极。
要得到高电平状态需要上拉电阻才行。
适合于做电流型的驱动,。
第2章-STM32单片机结构和最小系统
可选项
工作温度范围
芯片类型:F——通封用装快信闪,息L——低电压(1.65~
3.6V),WFL—AS—H无容线量系统芯片。
引脚数目
芯片子系列 引脚数目:R——B6— —43—P2I1KN2B8,KFBlFas—Fhla(—sh小2(容0中P量容I)N量,,芯)8G,—片—4——类—64—型K1B6KFBlasFhla(sh中(容小量容)量,)C,——6—
ADC2 GPIOD PWR SPI2/I2S
USART1 GPIOE BKP IWDG
SPI1 EXT1 CAN1 WWDG
TIM1 AFIO CAN2 RTC
GPIOA
I2C2 TIM7
GPIOB
I2C1 TIM6
UART5 TIM5
UART4 TIM4
USART3 TIM3
USART2 TIM2
APB2 预分频
/1,2,4,8,16
最大72MHz 外设时钟使能
PCLK2 APB2外设
TIM1,8 APB预分频=1乘
1,否则乘2
ADC预分频 /2,4,6,8
TIMxCLK TIM1,8 外设时钟使能 ADCCLK,最大14MHz ADC1,2,3
/2 时钟输出 MCO
MCO
PLLCLK HIS HSE SYSCLK
System 总线:将Cortex-M3 内核的 System 总线(外设总线)连接到总线矩阵;
总线结构中各单元的功能
DMA 总线:将DMA 的 AHB 主控接口与总线 矩阵相连; 总线矩阵:用于连接三个主动单元部件和三个 被动单元,负责协调和仲裁Cortex-M3 内核和 DMA 对 SRAM 的访问,仲裁采用轮换算法。 AHB/APB 桥:两个 AHB/APB 桥在 AHB 和 2 个 APB 总线之间提供完全同步连接。
stm32单片机开关代码
stm32单片机开关代码针对STM32单片机的开关控制代码,可以通过GPIO(通用输入/输出)模块来实现。
以下是一个简单的示例代码,用于控制单片机上的一个开关:c.#include "stm32f4xx.h"#define SWITCH_PIN GPIO_PIN_0。
#define SWITCH_PORT GPIOA.int main(void)。
{。
// 初始化时钟。
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;// 配置GPIOA的PIN0为输入。
SWITCH_PORT->MODER &= ~(GPIO_MODER_MODE0); while (1)。
{。
// 读取开关状态。
if (SWITCH_PORT->IDR & SWITCH_PIN)。
{。
// 开关处于打开状态。
// 执行相应操作。
}。
else.{。
// 开关处于关闭状态。
// 执行相应操作。
}。
}。
}。
在这个示例代码中,我们首先包含了STM32F4系列的头文件,然后定义了开关所连接的引脚和端口。
在主函数中,我们启用了GPIOA的时钟,并将其PIN0配置为输入。
然后在一个无限循环中,我们不断地读取开关的状态,根据开关状态执行相应的操作。
需要注意的是,以上代码是一个简单的示例,实际的应用中可能需要考虑消抖、中断处理等更多的细节。
另外,具体的代码可能会因为使用的STM32型号和开发环境的不同而有所差异,需要根据具体情况进行调整。
希望以上信息能够帮助到你。
如果你需要更详细的代码或者其他方面的帮助,请随时告诉我。
STM32的IO端口高8位或低8位单独操作方法
举例说下怎幺对IO端口赋值:
1.对高8位/低8位/全部清零
很明显,这个只需要操作BRR寄存器即可:
对高8位清零:GPIOA->BRR=0xFF00
对低8位清零:GPIOA->BRR=0x00FF
全部清零:GPIOA->BRR=0xFFFF或GPIOA->ODR=0x0000
1,置0的位不影响原来的值
高16位应该置为0000000010101010,这个就等于~0x55(即取反)的结
果,置1使某位为ห้องสมุดไป่ตู้,置0不影响原来的值
这样,BSRR寄存器的值就是00000000101010100000000001010101,
两部分的高8位均为0,所以不会影响到IO口的高8位
总结,以下的宏实现对某端口的低8位置数,不影响高8位:
STM32的IO端口高8位或低8位单独操作方法
几天前刚接触stm32的时候,被单独操作IO口给弄糊涂了,现记录下,现
在发现其实蛮简单的,只是刚开始的时候~~~
stm32的IO端口都是16位的,如果要单独操作某高8位或低8位,则不
是那幺简单,先看两张BSRR/BRR寄存器的图:
据官方数据手册上面说,这两个寄存器用于专门对ODR进行原子操作的
#defineGPIO_WriteLow(GPIOx,a)GPIOx-
>BSRR=(((uint32_t)(uint8_t)~(a))BSRR=(((uint8_t)(uint8_t)~(a))BSRR=value的
形式,所以担心是多余的
当然了,使用下面2,3的两个宏也可以完全该清零操作~stm32固件库是不
是应该加上这两个宏/函数?
单片机数字输入输出与IO口编程实践指南
单片机数字输入输出与IO口编程实践指南引言:单片机是一种集成电路芯片,具有微处理器、内存和输入输出设备等功能模块。
在现代电子设备和嵌入式系统中,单片机广泛应用于各种领域。
在单片机编程中,数字输入输出(Digital Input Output,简称DIO)和IO口编程是基础而重要的部分。
本文将介绍单片机数字输入输出基础知识和IO口编程的实践指南。
一、数字输入输出的基本概念1.1 数字输入输出(DIO)的定义数字输入输出(DIO)是单片机进行与外部世界的交互的方式。
通过DIO,单片机可以从外部接收数据(输入)和向外部发送数据(输出)。
1.2 二进制表示在单片机中,数字信号被表示为二进制数值。
通常,0表示低电平(或逻辑低),1表示高电平(或逻辑高)。
1.3 IO口的分类单片机的IO口可分为输入口和输出口。
输入口用于接收外部信号,输出口用于向外部发送信号。
1.4 IO口的引脚编号单片机上的每个IO口都有一个引脚编号,通过这个编号可以确定特定的IO口。
二、数字输入输出的实现方式2.1 接口标准单片机的数字输入输出通常与外部设备通过特定的接口标准连接,如GPIO、UART、SPI、I2C等。
2.2 GPIO(通用输入输出)接口通用输入输出(GPIO)接口是最常见和基础的IO接口。
它提供了通用的数字输入输出能力,并且可以配置为输入口或输出口。
2.3 IO口的配置在单片机的程序中,需要对IO口进行相应的配置,包括输入模式、输出模式、输入电平触发方式、输出电平和驱动能力等。
三、IO口编程实践指南3.1 IO口初始化在进行IO口编程之前,首先需要进行IO口的初始化。
初始化包括设置IO口为输入还是输出、设置输入口的电平触发方式、设置输出口的初始电平等。
3.2 数字输入实践数字输入是指单片机通过IO口接收来自外部的数字信号。
为了正确读取到外部信号,需要配置IO口为输入模式,并设置电平触发方式。
3.3 数字输出实践数字输出是指单片机通过IO口向外部发送数字信号。
STM32微处理器 GPIO接口定义
例如:读取GPIOE.5引脚输出值 GPIO_ReadOutputDataBit(GPIOE, GPIO_Pin_5);
GPIO_ReadOutputData()函数是读取指定IO口16个引脚的输出值, 也就是读取寄存器ODR的值
IO端口低配置寄存器CRL描述,如下图1所示。 该寄存器的复位值为:
0X4444 4444 既配置端口为浮空输入模式
STM32
认识STM32的IO口
2. STM32的IO端口寄存器
② 端口高配置寄存器CRH
CRH的作用和CRL完全一样,CRH控制的是高8位输出口。 例如:设置GPIOC的11位为上拉输入,12位为推挽输出,输出速率为
GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
通过这3个语句,设置了PC11为上拉输入,PC12为推挽输出、速率为50MHz。
STM32
认识STM32的IO口
2. STM32的IO端口寄存器
例如:设置GPIOC的11位为上拉输入,12位为推挽输出,输出速率为50MHz
。若采用stm32f10x_gpio.c文件中的GPIO_Init函数设置,代码如下:
设连接的时候很有优势,具体哪些IO口是5V兼容的,可从数据 手册引脚描述查到(I/O Level标FT的就是5V电平兼容的)。
STM32开发板例程讲解之二:GPIO的描述和配置,GPIOIOTG例程精讲ch...
#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 |
STM32之IO口模拟SPI
STM32之IO⼝模拟SPI本⽂介绍如何使⽤STM32标准外设库的GPIO端⼝模拟SPI,本例程使⽤PA5、PA6和PA7模拟⼀路SPI。
SPI有4种⼯作模式,模拟SPI使⽤模式0,即空闲时SCK为低电平,在奇数边沿采样。
本⽂适合对单⽚机及C语⾔有⼀定基础的开发⼈员阅读,MCU使⽤STM32F103VE系列。
1. 简介SPI 协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串⾏外围设备接⼝,是⼀种⾼速全双⼯的通信总线。
它被⼴泛地使⽤在要求通讯速率较⾼的场合。
SPI⽤于多设备之间通讯,分为主机Master和从机Slave,主机只有⼀个,从机可以有多个,通过⽚选信号对从机进⾏选择,⼀次只能选择⼀个从机。
通讯只能由主机发起,⽀持的操作分为读取和写⼊,即主机读取从机的数据,以及向从机写⼊数据。
SPI⼀般有4根线,分别是⽚选线SS、时钟线SCK、主设备输出\从设备输⼊MOSI、主设备输⼊\从设备输出MISO,其中除MISO对于主机为输⼊引脚外,其他引脚对于主机均为输出引脚。
因为有独⽴的输⼊和输出引脚,因此SPI⽀持全双⼯⼯作模式,即可以同时接收和发送。
2. 总线传输信号空闲状态:⽚选信号SS低电平有效,那么空闲状态⽚选信号SS为⾼。
开始信号及结束信号:开始信号需要将⽚选信号SS拉低,结束信号需要将⽚选信号SS拉⾼。
通讯模式:SPI有4种通讯模式,分别为0、1、2、3,根据时钟极性和时钟相位确定,时钟极性分别为空闲低电平和空闲⾼电平,时钟相位分别为SCK奇数边沿采样和偶数边沿采样。
常⽤的模式为模式0和模式3。
SPI模式时钟极性(空闲时SCK时钟)时钟相位(采样时刻)0低电平奇数边沿1低电平偶数边沿2⾼电平奇数边沿3⾼电平偶数边沿3. 时序说明以模式0举例说明:空闲状态:⽚选信号SS为⾼,SCK输出低电平。
开始信号:⽚选信号SS变低,SCK输出低电平。
结束信号:⽚选信号SS变⾼,SCK输出低电平。
STM32IO口函数GPIO使用说明
STM32IO口函数GPIO使用说明STM32是一款广泛使用的32位单片机,具有丰富的外设资源,其中之一就是IO(Input/Output)口。
IO口是STM32与外部世界进行通信的接口,本文将对如何使用STM32IO口函数GPIO进行详细说明。
GPIO是通用输入输出口,可以配置为输入或输出,可以连接到各种外部设备如按钮、开关、LED等。
STM32提供了一系列GPIO口,如GPIOA、GPIOB等。
每个GPIO口有多个引脚可供选择,如GPIOA口有GPIO_Pin_0到GPIO_Pin_15共16个引脚。
在使用IO口之前,需要初始化IO口的设置,包括如下步骤:1.选择GPIO口:选择需要操作的GPIO口,如GPIOA或GPIOB。
2.配置引脚模式:确定所需的引脚模式,如输入、输出或复用模式。
3.配置引脚输出类型:如果选择输出模式,需要确定输出类型,如推挽输出或开漏输出。
4.配置引脚速度:确定引脚的传输速度。
5.配置引脚上拉/下拉:确定引脚是否需要上拉或下拉电阻。
6.配置引脚复用功能:如果选择复用模式,配置引脚使用的功能。
以下为具体的GPIO函数说明:1. GPIO_InitTypeDef:GPIO初始化结构体,包含需要配置的GPIO口、引脚模式、输出类型、速度、上拉/下拉等信息。
- 参数:GPIO_TypeDef* GPIOx:需要初始化的GPIO口;uint16_t GPIO_Pin: 需要初始化的引脚。
2. GPIO_Pin_0到GPIO_Pin_15:宏定义,用于选择要配置的引脚。
3. GPIO_Mode:引脚模式枚举类型,包括输入模式(GPIO_Mode_IN)、输出模式(GPIO_Mode_OUT)和复用功能模式(GPIO_Mode_AF)。
4. GPIO_Speed:引脚速度枚举类型,包括低速(GPIO_Speed_2MHz)、中速(GPIO_Speed_10MHz)和高速(GPIO_Speed_50MHz)。
最全的STM32八种IO口模式讲解
最全的STM32八种IO口模式讲解STM32是一种基于ARM Cortex-M处理器的微控制器系列,具有强大的性能和广泛的应用领域。
而IO口是STM32微控制器中常见的功能之一,它允许我们与外部设备进行通信和数据交换。
在STM32中,IO口有八种不同的模式,本文将逐一进行讲解。
1. 输入浮空模式(Floating Input)输入浮空模式是IO口的默认模式。
在这种模式下,IO口既不输出也不输入电平信号,它的电平状态由外部电路决定。
这种模式非常适用于连接外部传感器或其他输入设备。
2. 模拟输入模式(Analog Input)模拟输入模式是用于连接模拟传感器的模式。
在这种模式下,IO口被配置为模拟输入引脚,可以读取来自传感器的模拟电压值。
3. 输出推挽模式(Push-pull Output)输出推挽模式是最常用的IO口模式之一、在这种模式下,IO口既能输出高电平,也能输出低电平。
它能够驱动较大负载,并且在输出状态下具有较低的电平谐波失真。
推挽输出模式常用于控制LED灯、继电器和其他外部设备。
4. 输出开漏模式(Open-drain Output)输出开漏模式也被称为开漏输出模式。
在这种模式下,IO口只能输出低电平,而不能输出高电平。
当IO口输出低电平时,它会与外部上拉电阻连接,使得整个电路可以实现低电平输出。
开漏输出模式常用于I2C总线和其他需要共享信号线的应用。
5. 复用推挽模式(Push-pull Alternate Function)复用推挽模式是IO口的特殊模式之一、在这种模式下,IO口既可以用于通用IO功能,也可以用作一些外设的引脚。
复用推挽模式常用于USART、SPI和I2C等串行通信接口。
6. 复用开漏模式(Open-drain Alternate Function)复用开漏模式也是IO口的特殊模式之一、在这种模式下,IO口可以用作一些外设的引脚,并且只能输出低电平。
复用开漏模式常用于I2C总线和其他需要共享信号线的应用。
STM32系列单片机原理及应用-C语言案例教程 第2章 STM32的内部结构及接口特点
WK_UP
STM_ADC USART2_TX USART2_RX GBC_KEY STMDAC
GBC_LED
OV_VSYNC USART1_TX USART1_RX
USB_DUSB_D+ JIMS JICK JIDI
的 存 储
的 时 钟
单 片 机
狗定 时器 的功
中 断
综 器 系 复 能与
述
统
位
操作
2.1 STM32单片机综述
STM32系列专为要求高性能、低成本、低功耗的嵌入式应用 设计的ARM Cortex®-M0,M0+,M3, M4和M7内核。 • 主流产品(STM32F0、STM32F1、STM32F3); • 超低功耗产品(STM32L0、STM32L1、STM32L4); • 高性能产品(STM32F2、STM32F4、STM32F7、STM32H7)等。
(1)浮空输入
(5)推挽输出
(2)带弱上拉输入 (6)开漏输出
(3)带弱下拉输入 (7)复用推挽输出
(4)模拟输入
(8)复用开漏输出
STM32基本上每个引脚都有以上8种配置模式
STM32内部 结构方框图
引脚配 置模式
2.1.3 STM32引脚功能描述
STM32F103拥有资源包括:
• 64KB SRAM、512KB FLASH、 • 2个基本定时器、4个通用定时器、2个高级定时器 • 2个 DMA 控制器 • 3个SPI、2个IIC、5个串口、1个USB、1个CAN • 3个12 位 ADC、1个12 位 DAC • 1个SDIO 接口、1个FSMC接口 • 112个通用IO口。
STM32IO口函数GPIO使用说明
6.GPIO 锁定机制:当在一个端口位上执行了所定(LOCK)程序,在下一 次复位之前,将不能再更改端口位的配置。
GPIO 基本设置
GPIOMode_TypeDef GPIO mode 定义及偏移地址 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 //推挽复用 GPIO 输入输出速度选择: typedef enum { GPIO_Speed_10MHz = 1, GPIO_Speed_2MHz, GPIO_Speed_50MHz } GPIOSpeed_TypeDef; #define IS_GPIO_SPEED(SPEED) ((SPEED == GPIO_Speed_10MHz) ||
1 STM32 的输入输出管脚有下面 8 种可能的配置:(4 输入+2 输出+2 复用输出)
① 浮空输入_IN_FLOATING
② 带上拉输入_IPU
③ 带下拉输入__OD
⑥ 推挽输出_OUT_PP
⑦ 复用功能的推挽输出_AF_PP
⑧ 复用功能的开漏输出_AF_OD
3.3 GPIO 初始化完成
==================================================== =================== 最近刚开始学习 STM32,所以从最基本的 GPIO 开始学起;首先看看 STM32 的 datasheet 上对 GPIO 口的简单介绍:每个 GPI/O 端口有两 个 32 位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个 32 位数据寄 存器(GPIOx_IDR,GPIOx_ODR),一个 32 位置位/复位寄存器 (GPIOx_BSRR),一个 16 位复位寄存器(GPIOx_BRR)和一个 32 位 锁定寄存器(GPIOx_LCKR)。
实验二单片机IO口的使用
实验二单片机IO口的使用实验目的:掌握单片机IO口的使用方法,了解IO口的输入输出功能。
一、实验介绍在单片机系统中,IO口是通过端口来实现与外部设备的通信。
IO口可以用来输入控制信号或者输出数据信号,是单片机与外部世界交互的重要接口。
二、实验器材与工具1.单片机开发板2.扁平灯泡3.蜂鸣器4.电阻、电容等元器件5.逻辑分析仪三、实验步骤1.简单的IO口输出实验将一个扁平灯泡连接到单片机的一个IO口上,并将该IO口配置为输出模式。
实验中,可以通过控制该IO口的高低电平来控制灯泡的亮灭。
2.IO口输入实验将一个开关连接到单片机的一个IO口上,并将该IO口配置为输入模式。
实验中,可以读取该IO口的电平状态,来判断开关的状态。
3.组合实验将多个扁平灯泡和开关连接到单片机的IO口上,并通过控制和读取IO口的电平状态来实现各种功能。
可以实现灯泡的闪烁、扁平灯泡的亮度调节、蜂鸣器的控制等功能。
四、实验原理1.IO口模式设置单片机内部有寄存器用于控制IO口的工作模式。
通过设置相应的寄存器来将指定的IO口配置为输入或者输出模式。
2.IO口输出控制IO口的输出控制是通过操作相应的寄存器来实现的。
输出操作可以将指定的IO口设置为高电平或者低电平。
3.IO口输入读取IO口的输入读取也是通过操作相应的寄存器来实现的。
读取操作可以获取指定IO口的电平状态,以判断外部设备的状态。
五、实验总结通过这次实验,我学会了单片机IO口的配置与使用方法。
IO口是单片机与外部设备交互的重要接口,掌握了IO口的使用方法后,可以实现各种功能,如灯光控制、开关检测等。
同时,我也了解到了IO口的原理和应用场景,为以后的电子设计打下了基础。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*设置高速PCLK2时钟(即APB2 clock)= = AHB时钟/2 = 24 MHz,PCLK2 = HCLK/2 */
RCC_PCLK2Config(RCC_HCLK_Div2);
/*设置低速PCLK1时钟(即APB1 clock)= AHB时钟/4=12 MHz ,PCLK1 = HCLK/4 */
/* Peripheral base address in the bit-band region */
#define PERIPH_BASE
((u32)0x40000000)
/* Peripheral memory map */ #define APB1PERIPH_BASE #define APB2PERIPH_BASE #define AHBPERIPH_BASE
APB2:用于高速外设 APB1:用于低速外设
连接在APB2(高速外设)上的设备:有 连接在APB1(低速外设)上的设备:有
连接在AHB(Advanced High performance Bus)上的设备:有 STM32系统结构图
1、使能 挂接在APB1总线上的外设 对应的时钟 命令:
RCC_APB1PeriphClockCmd( ) 函数
RCC_APB2Periph_GPIOB | RCC_APB2Periph_SPI1, ENABLE);
/* Enable GPIOC, GPIOD clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC| RCC_APB2Periph_GPIOD, ENABLE); }
2.2.2 RCC_Configuration( )函数
( Reset and Clock Configuration( ), 复位和时钟设置 函数 ) 1、RCC复位和时钟配置寄存器组 2、枚举类型ErrorStatus
3、RCC_Configuration ( ):(复位和时钟设置)函数
STM32单片机的复位和时钟设置 :共包括10个设置寄存器 ①一个32位的时钟控制寄存器(RCC_CR) ②一个32位的时钟配置寄存器(RCC_CFGR) ③一个32位的时钟中断寄存器 (RCC_CIR) ④一个32位的APB2外设复位寄存器 (RCC_APB2RSTR) ⑤一个32位的APB1外设复位寄存器 (RCC_APB1RSTR) ⑥一个32位的AHB外设时钟使能寄存器 (RCC_AHBENR) ⑦一个32位的APB2外设时钟使能寄存器(RCC_APB2ENR) ⑧一个32位的APB1外设时钟使能寄存器(RCC_APB1ENR) ⑨一个32位的备份域控制寄存器 (RCC_BDCR) ⑩一个32位的控制/状态寄存器 (RCC_CSR)
第2章 STM32单片机IO端口编程
2.1 STM32单片机管脚和命名规则 2.2 STM32单片机时钟 配置 2.3 STM32单片机I/O端口配置 2.4 STM32单片机I/O端编程步骤
2.1 STM32单片机管脚和命名规则 • STM32单片机管脚 • STM32系列单片机命名规则
• STM32单片机管脚:以STM32F103Cx为例,
在文件“stm32f10x_map.h”中,定义如下:
/*------------------------ Real-Time Clock -----------------------------------*/ typedef struct {
vu32 CR; vu32 CFGR; vu32 CIR; vu32 APB2RSTR; vu32 APB1RSTR; vu32 AHBENR; vu32 APB2ENR; vu32 APB1ENR; vu32 BDCR; vu32 CSR; } RCC_TypeDef;
2.2.1 STM32时钟系统
2.2.2 RCC_Configuration(复位和时钟设置)函数
2.2.1 STM32时钟系统
STM32系列微控制器中,有5个时钟源: HSI (High Speed Internal) :高速内部时钟、 HSE (High Speed External):高速外部时钟、 LSI (Low Speed Internal) :低速内部时钟、 LSE(Low Speed External) :低速外部时钟、 PLL(Phase Locked Loop) :锁相环倍频输出。 其中的HSI、HSE、 或PLL可被用来驱动系统时钟。 其中的LSI、LSE作为二级时钟源。
该宏定义的功能:在程序中,所有写RCC的地方,编译器的 预处理程序,都将它替换为:((RCC_TypeDef *) 0x40021000)
2、枚举类型ErrorStatus 在文件“stm32f10x_type.h”中,包含 typedef enum {ERROR=0, SUCCESS=! ERROR} ErrorStatus;
PERIPH_BASE (PERIPH_BASE + 0x1 0000) (PERIPH_BASE + 0x2 0000)
#define RCC_BASE
(AHBPERIPH_BASE + 0x1000)
#ifdef _RCC
#define RCC
#endif /*_RCC */
((RCC_TypeDef *) RCC_BASE)
RCC_PLLConfig ( RCC_PLLSource_HSE_Div1, RCC_PLLMul_6);
//此处不同于鸥鹏公司的程序:PLLCLK = 8MHz * 6 = 48 MHz
/* Enable PLL */ RCC_PLLCmd(ENABLE);
/* Wait till PLL is ready,等待 锁相环 输出稳定 */ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { }
3、使能 挂接在AHB总线上的外设 对应的时钟 命令:
RCC_AHBPeriphClockCmd( ) 函数
例如,使能DMA对应的时钟: RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA, ENABLE);
使用操作符“|”可以一次选中上表中的一个或多个取值的组合作为 该参数的值。
该语句,定义了新枚举类型名ErrorStatus,代表左侧定义的 枚举类型。
3、RCC_Configuration(复位和时钟设置)函数:在“HelloRobot.h”
中 枚举类型
变量
ErrorStatus HSEStartUpStatus;
void RCC_Configuration(void)
STM32时钟系统结构图(P56)
• AMBA片上总线:已成为一种流行的工业片上总线标准。 它包括AHB(Advanced High performance Bus)和 APB(Advanced Peripheral Bus ),前者作为系统总线, 后者作为外设总线。
• 外设总线:包括APB1(Advanced Peripheral Bus 1) 和APB2(Advanced Peripheral Bus 2)
STM32F103 xx增强型模 块框图
基于ARM Cortex内核的MCU 和 普通的8/16位单片机 在系统结构上 最大区别:
普通的8/16位单片机:只有1个系统时钟频率, 而基于ARM Cortex内核的MCU:具有多个时钟频率,分别供 给内核 和 不同外设模块使用。
本课程的学习难点之一:就是ARM时钟 比 单片机时钟 复杂得多。
以上所见的固件库函数: 详见“中文版:STM32F10xxx_固件库函数 V2.pdf P193”
固件库函数的具体实现:见文件“stm32f10x_rcc.h”
{ /*将外设RCC寄存器组重新设置为默认值,即复位 。 RCC system reset*/ RCC_DeInit();
/*打开外部高速时钟晶振HSE ,Enable HSE */ RCC_HSEConfig(RCC_HSE_ON);
/*等待HSE外部高速时钟晶振稳定,或者在超时的情况下退出,Wait till HSE is ready */
详见参考手册 V10_1 第P60
Backup domain control register (RCC_BDCR)
1、RCC复位和时钟配置寄存器组
编程时,时钟的具体配置是从RCC(Reset and Clock Configuration,复位和时钟配置)寄存器组开始。在固件库中,用结构体 RCC_TypeDef 定义 RCC寄存器组:
采用的封装形式LQFP48
PC口 3脚 PD口 2脚
PA口 16脚
PB口 16脚
STM32F103CBT6 共有37个I/O管脚: PA口 16脚+ PB口16脚+ PC口3脚+ PD口2脚。
2.2 STM32单片机时钟配置
一般而言,嵌入式系统在工作前,都要进行初始化工作,其中包括 调用RCC_Configuration(复位和时钟设置)函数。用于系统复位 和初始化STM32系列微控制器的时钟。
/* Enable peripheral clocks --------------------------------------------------*/ /* GPIOA, GPIOB and SPI1 clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2PeriphBuffer预取指令指令缓冲区,这2句与RCC没有关系 */ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/* 利用锁相环将HSE外部8MHz晶振6倍频到48 MHz,作为PLLCLK。 PLLCLK = 8MHz * 6 = 48 MHz */