经过本节的学习,你将了解到STM32的IO口作为输出运用的办法。本节分为如下几个末节:
3.1.1 STM32 IO口简介
3.1.2硬件规划
3.1.3软件规划
3.1.4仿真与下载
3.1.1STM32 IO简介
作为一切开发板的经典入门试验,莫过于跑马灯了。ALIENTEKMiniSTM32开发板板载了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/OLevel标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.1STM32的IO口位装备表
STM32输出方式装备如表3.1.1.2所示:
表3.1.1.2STM32输出方式装备表
接下来咱们看看端口低装备寄存器CRL的描绘,如下图所示:
图3.1.1.1端口低装备寄存器CRL各位描绘
该寄存器的复位值为0X4444 4444,从上图能够看到,复位值其实便是装备端口为浮空输入方式。从上图还能够得出:STM32的CRL操控着每个IO端口(A~G)的低8位的方式。每个IO端口的位占用CRL的4个位,高两位为CNF,低两位为MODE。这儿咱们能够记住几个常用的装备,比方0X4表明模仿输入方式(ADC用)、0X3表明推挽输出方式(做输出口用,50M速率)、0X8表明上/下拉输入方式(做输进口用)、0XB表明复用输出(运用IO口的第二功用,50M速率)。
CRH的效果和CRL彻底相同,仅仅CRL操控的是低8位输出口,而CRH操控的是高8位输出口。这儿咱们对CRH就不做具体介绍了。
给个实例,比方咱们要设置PORTC的11位为上拉输入,12位为推挽输出。代码如下:
GPIOC->CRH&=0XFFF00FFF;//清掉这2个位本来的设置,一起也不影响其他位的设置
GPIOC->CRH|=0X00038000;//PC11输入,PC12输出
GPIOC->ODR=1<<11;//PC11上拉
经过这3句话的装备,咱们就设置了PC11为上拉输入,PC12为推挽输出。
IDR是一个端口输入数据寄存器,只用了低16位。该寄存器为只读寄存器,而且只能以16位的方式读出。该寄存器各位的描绘如下图所示:
图3.1.1.2端口输入数据寄存器IDR各位描绘
要想知道某个IO口的状况,你只需读这个寄存器,再看某个位的状况就能够了。运用起来是比较简单的。
ODR是一个端口输出数据寄存器,也只用了低16位。该寄存器尽管为可读写,可是从该寄存器读出来的数据都是0。只需写是有用的。其效果便是操控端口的输出。该寄存器的各位描绘如下图所示:
图3.1.1.3端口输出数据寄存器ODR各位描绘
了解了这几个寄存器,咱们就能够开端跑马灯试验的真实规划了。关于IO口更具体的介绍,请参阅《STM32参阅手册》第69页7.1节。
在此,咱们能够总结一下,关于学过AVR的人来说,咱们都知道AVR的IO口由3个寄存器操控:DDR、PORT、PIN。这儿咱们能够拿STM32的IO操控寄存器和AVR的来个类比:
1,STM32的CRL和CRH就相当于AVR的DDR寄存器,用来操控IO口的方向,只不过STM32的CRL和CRH功用更强大一点算了。
2,STM32的ODR就相当于AVR的PORT,都是用来操控IO口的输出电平或许上下拉电阻的。
3,STM32的IDR就相当于AVR的PIN,都是用来存储IO口当时的输入状况(凹凸电平)的。
除此之外,STM32还有BSRR、BRR、LCKR等几个寄存器用于操控IO口,这点是AVR所没有的。
3.1.2硬件规划
该试验的硬件电路在ALIENTEM Mini STM32开发板上现已衔接好了。DS0接PA8,DS1接PD2。所以在硬件上不需要动任何东西。其衔接原理图如下:
图3.1.2.1LED与STM32衔接原理图
3.1.3软件规划
首要,找到之前新建的TEST工程,在该文件夹下面新建一个HARDWARE的文件夹,用来存储今后与硬件相关的代码。然后在HARDWARE文件夹下新建一个LED文件夹,用来寄存与LED相关的代码。