STM32的IO口设置方法实例.doc_第1页
STM32的IO口设置方法实例.doc_第2页
STM32的IO口设置方法实例.doc_第3页
STM32的IO口设置方法实例.doc_第4页
STM32的IO口设置方法实例.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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,从上图可以看到,复位值其实就是配置端口为浮空输入模式。从上图还可以得出:STM32的CRL控制着每个IO端口(AG)的低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=1LED文件夹下面,保存为led.c。在该文件中输入如下代码:#include #include led.h/Mini STM32开发板/LED驱动代码 /正点原子ALIENTEK/2010/5/27/ V1.0/初始化PA8和PD2为输出口.并使能这两个口的时钟 /LED IO初始化void LED_Init(void) RCC-APB2ENR|=1APB2ENR|=1CRH&=0XFFFFFFF0; GPIOA-CRH|=0X00000003;/PA8推挽输出 GPIOA-ODR|=1CRL&=0XFFFFF0FF; GPIOD-CRL|=0X00000300;/PD.2推挽输出 GPIOD-ODR|=12; /PD.2输出高 该代码里面就包含了一个函数void LED_Init(void),该函数的功能就是用来实现配置PA8和PD2为推挽输出。在配置STM32外设的时候,任何时候都要先使能该外设的时钟!APB2ENR是APB2总线上的外设时钟使能寄存器,其各位的描述如下: 图3.1.3.2寄存器APB2ENR各位描述我们要使能的PORTA和PORTD的时钟使能位,分别在bit2和bit5,只要将这两位置1就可以使能PORTA和PORTD的时钟了。该寄存器还包括了很多其他外设的时钟使能。大家在以后会慢慢使用到的。关于这个寄存器的详细说明在STM32参考手册的第61页。在设置完时钟之后就是配置完时钟之后,LED_Init配置了PA8和PD2的模式为推挽输出,并且默认输出1。这样就完成了对这两个IO口的初始化。保存led.c代码,然后我们按同样的方法,新建一个led.h文件,也保存在LED文件夹下面。在led.h中输入如下代码:#ifndef _LED_H#define _LED_H #include sys.h/Mini STM32开发板/LED驱动代码 /正点原子ALIENTEK/2010/5/27/LED端口定义#define LED0 PAout(8)/ PA8#define LED1 PDout(2)/ PD2 void LED_Init(void);/初始化 #endif这段代码里面最关键就是2个宏定义:#define LED0 PAout(8)/ PA8#define LED1 PDout(2)/ PD2这里使用的是位带操作来实现操作某个IO口的1个位的,关于位带操作前面已经有介绍,这里不再多说。需要说明的是,这里可以使用另外一种操作方式实现。如下:#define LED0 (18) /led0 PA8#define LED1 (1ODR=(GPIOA-ODR&LED0)|(x ? LED0:0)#define LED1_SET(x) GPIOD-ODR=(GPIOD-ODR&LED1)|(x ? LED1:0) 后者通过LED0_SET(0)和LED0_SET(1)来控制PA8的输出0和1。而前者的类似操作为:LED0=0和LED0=1。显然前者简单很多,从而可以看出位带操作带来的好处。以后像这样的IO口操作,我们都使用位带操作来实现,而不使用第二种方法。将led.h也保存一下。接着,我们在Manage Components管理里面新建一个HARDWARE的组,并把led.c加入到这个组里面,如下图所示: 图3.1.3.3给工程新增HARDWARE组单击OK,回到工程,然后你会发现在Project Workspace里面多了一个HARDWARE的组,在改组下面有一个led.c的文件。如下图所示: 图3.1.3.4给工程新增HARDWARE组然后用之前介绍的方法将led.h头文件的路径加入到工程里面(参照本文第36页)。回到主界面,在main函数里面编写如下代码:#include #include sys.h#include usart.h #include delay.h #include led.h /Mini STM32开发板范例代码1/跑马灯实验/正点原子ALIENTEK/2010.5.27 int main(void) Stm32_Clock_Init(9); /系统时钟设置 delay_init(72); /延时初始化 LED_Init(); /初始化与LED连接的硬件接口 while(1) LED0=0; LED1=1; delay_ms(300); LED0=1; LED1=0; delay_ms(300); 代码先包含了#include led.h这句,使得LED0、LED1、LED_Init等能在main函数里被调用。接下来,main函数先配置系统时钟为72M,然后

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论