STM32学习笔记05_操作I/O口总共分3步

目录

框图很重要

I/O口寄存器操作,分三步:

1,打开时钟

 2,配置输入/输出模式

 3,设置高/低电平


框图很重要

STM32单片机是通过寄存器,来操作I/O口的。这篇来讲一下,如何操作STM32F103C8的I/O口:

先看一个来自Datasheet中的Block Diagram。

这个图很重要,我们拿到任何一款芯片,都需要先仔细阅读这个框图的内容。

框图中显示,GPIO是作为外设,挂在APB2这个总线上的。

APB2和AHB2之间是桥接关系,这里先不需要懂,知道即可。

可能有人会有疑问:这些I/O口都在单片机内部,为什么叫“外设”?

这里有必要解释一下:我的理解是,外设的“外”,只是相对单片机的CPU而言的。就像MCU内部还有其它模块,比如:SPI,I2C,这些模块同样也被称作外设。它们都是通过总线,连接到单片机CPU的。

图1

知道了GPIOC是连接到APB2总线的,接下来就去操作APB2相关的寄存器。

I/O口寄存器操作,分三步:

1,打开时钟

在Reference Manual中找到APB2外设时钟使能寄存器

图2

图3可以看到,这是一个 32位的寄存器。

其中Bit4叫做IOPCEN,该位为可读可写。

图3

该Bit详细定义如下:

IO口C时钟使能,可通过软件置位或清零。写“0”表示Port口C时钟禁止,写“1”表示Port口C时钟使能。所以说,每个Port口16个位,它们的时钟都是统一开关的。

图4

程序代码里需要做的就是:

将RCC_APB2ENR这个寄存器赋值为0x00000010

(32位2进制数0B00000000000000000000000000010000转换为16进制就是0x00000010)

这样说更加容易理解,实际操作中为了方便,略有不同。

 2,配置输入/输出模式

看一下图5,图6两个端口配置寄存器,它们都是32位的寄存器。

其中第一个寄存器GPIOx_CRL,用来控制低8位IO口的输入输出模式,第二个寄存器GPIOx_CRH,则用来控制高8位IO口的输入输出模式。

我们需要知道的是,这款单片机的IO口是16位的,即Port0~Port15。这里低8位和高8位分别由这两个寄存器来控制。

图5

 

图6

举例说明:

假如我需要将PA1口设置为通用开漏极输出,速度2MHz。那我们就需要用到GPIOA_CRL这个寄存器,将GPIOA_CRL的Bit7-4设置为0110;

假如我需要将PB15口设置为浮空输入。那我们就需要将GPIOB_CRH的Bit31-28设置为0100。 

 3,设置高/低电平

前面我们介绍了将端口配置为输入或输出模式。如果是输出模式,那我们需要再明确到底是要让端口输出高,还是输出低。如果是输入模式,我们希望能知道输入的是高还是低。

这就需要用到图7,图8所示的端口输入/输出数据寄存器。

图7
图8

需要注意的是:端口输入数据寄存器为只读模式,不能写。而端口输出数据寄存器,既能读,又能写。

图9红框内为输入/输出数据寄存器的示意图

图9

I/O口直接与PCBA上的外围电路相连接,涉及到一些硬件相关的知识,后续我会单独用一篇来讲。这里姑且先挖个坑。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值