课件-205年07stm32通用io端口_第1页
课件-205年07stm32通用io端口_第2页
课件-205年07stm32通用io端口_第3页
课件-205年07stm32通用io端口_第4页
课件-205年07stm32通用io端口_第5页
免费预览已结束,剩余25页可下载查看

付费下载

下载本文档

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

文档简介

概述STM32处理器总线结构和通用I/O端口(GPIO)器复位和系统时钟外部中断和中断控制器USART串口看门狗通用输入/输出接口GPIO也称为并行I/O,是最基本的I/O形式STM32F系列微控制器根据型号不同有不同个数的

I/O口(26、37、51、80、112个)每位可以由

分别配置成以下多种工作模式:输入浮空(输入)输入上拉(输入)输入下拉(输入)模拟输入(输入)开漏输出(通用输出)推挽式输出(通用输出)推挽式复用(复用输出)开漏复用(复用输出)输入数据寄存器输出数据寄存器置位/复位寄存器输出控制开/关开/关开/关TTL触发输入驱动输出驱动VDDVSSVDDVSS模拟输入复用功能输入到片上外设读写读/写从片上外设复用功能输入推挽、开漏或VDDVSSP-MOSN-MOS保护二极管保护二极管I/O引脚每个GPIO端口都有如下特殊功能寄存器:两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH)两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR)一个32位置位/复位寄存器(GPIOx_BSRR)一个16位复位寄存器(GPIOx_BRR)一个32位锁定寄存器(GPIOx_LCKR)注意:上面的x代表:A,B,C,D,E,F,G中的任意一个。每个口(如A)的宽度为16位I/O口,0~15表示。这些特殊功能寄存器的相关定义在stm32f10x.h文件中。起始地址 外设 总线0x40012000-0x400123FFGPIO端口GAPB20x40011C00-0x40011FFFGPIO端口FAPB2寄存器名称 偏移地址0x40011800-0x40011BFFGPIO端口EAPB2GPIOA_LCKR18HGPIOA_BRR14H0x40011400-0x400117FFGPIO端口DAPB2GPIOA_BSRR10H0x40011100-0x400113FFGPIO端口CAPB2GPIOA_ODR0CHGPIOA_IDR08H0x40010C00-0x40010FFFGPIO端口BAPB2GPIOA_CRH04H0x40010800-0x40010BFFGPIO端口AAPB2GPIOA_CRL00H[]00:输入模式(复位后的状态)10:输出模式,最大速度2MHz01:输出模式,最大速度10MHz11:输出模式,最大速度50MHzCNFx[1:0]:配置输入或输出的具体模式MODEx[1:0]=00:00:模拟输入模式

10:上拉/下拉输入模式01:浮空输入模式(复位)11:保留MODEx[1:0]>00:00:通用推挽输出01:通用开漏输出10:复用功能推挽输出11:复用功能开漏输出3130292827262524232221

20191817

16CNF7[1:0]MODE7[1:0]CNF6[1:0]MODE6CNF5[1:0]MODE5CNF4[1:0]MODE4CNF3[1:0]MODE3CNF2[1:0]MODE2CNF1[1:0]MODE1CNF0[1:0]MODE0与低位类似,配置的是8~15位的工作模式。与低位端口配置寄存器一样,该寄存器都是可读/写的,复位时的值都是44444444H,即各个位都是输入模式且为浮空的输入模式。端口配置为输入端口,从该寄存器的相应位读数据。复位值为00000000H该寄存器只能以字(4字节)的形式

。4.端口数据输出寄存器(GPIOA_ODR)端口配置为输出端口,可以向寄存器的相应位读或写数据。低16位对应每个引脚,高16位保留.31302928272625242322212019181716保留IDR15IDR14IDR13IDR12IDR11IDR10IDR9IDR8IDR7IDR6IDR5IDR4IDR3IDR2IDR1IDR0该寄存器只能写。复位值为00000000H该寄存器只能以字(4字节)的形式写入。BRx:清除位x,1有效BSx:设置位x,1有效如果同时设置了BSx和BRx的对应位,BSx位起作用。6.端口复位寄存器(GPIOA_BRR)对端口的每一位进行复位操作。与GPIOA_BSRR相比,低16位为BRx位,高16位保留.31302928272625242322212019181716BR15BR14BR13BR12BR11BR10BR9BR8BR7BR6BR5BR4BR3BR2BR1BR0BS15BS14BS13BS12BS11BS10BS9BS8BS7BS6BS5BS4BS3BS2BS1BS0其中的每一位用来锁定控制寄存器(CRL,CRH)相应的4位。LCKx:锁位x,这些位可读写,只能实在LCKK位为

0时写入。0:不锁定;1:锁定端口配置LCKK:可通过锁键写入序列修改0:端口配置锁键位激活1:端口配置锁键位被激活,下次系统复位前寄存器被锁锁键写入序列:写1->写0->写1->读0->读2625242322212019181716保留LCKKLCK15LCK14LCK13LCK12LCK11LCK10LCK9LCK8LCK7LCK6LCK5LCK4LCK3LCK2LCK1LCK0#define

PERIPH_BASEPeripheral

base

*/#define

APB1PERIPH_BASE#define

APB2PERIPH_BASE#define

GPIOA_BASE#define

GPIOB_BASE#define

GPIOC_BASE#define

GPIOD_BASE#define

GPIOE_BASE#define

GPIOF_BASE#define

GPIOG_BASE((uint32_t)0x40000000)

/*!<PERIPH_BASE(PERIPH_BASE

+

0x10000)(APB2PERIPH_BASE+0x0800)(APB2PERIPH_BASE

+

0x0C00)(APB2PERIPH_BASE

+

0x1000)(APB2PERIPH_BASE

+

0x1400)(APB2PERIPH_BASE

+

0x1800)(APB2PERIPH_BASE

+

0x1C00)(APB2PERIPH_BASE

+

0x2000)起始地址外设总线0x40000000~0x400003FFTIM2定时器APB10x40000400~0x400007FFTIM3定时器0x40002C00~0x40002FFF窗口看门狗(WWDG)0x40003000~0x400033FF独立看门狗(IWDG)0x40004400~0x400047FFUSART20x40005400~0x400057FFI2C10x40010000~0x400103FFAFIOAPB20x40010400~0x400107FFEXTI0x40010800~0x40010BFFGPIO端口A0x40012400~0x400127FFADC10x40012C00~0x40012FFFTIM1时钟0x40021000~0x400213FF复位和时钟控制AHB0x40022000~0x400223FFFlash

器接口起始地址 外设 总线0x40012000-0x400123FFGPIO端口GAPB20x40011C00-0x40011FFFGPIO端口FAPB2寄存器名称 偏移地址0x40011800-0x40011BFFGPIO端口EAPB2GPIOA_LCKR18H0x40011400-0x400117FFGPIO端口DAPB2GPIOA_BRR14HGPIOA_BSRR10H0x40011100-0x400113FFGPIO端口CAPB2GPIOA_ODR0CH0x40010C00-0x40010FFFGPIO端口BAPB2GPIOA_IDR08HGPIOA_CRH04H0x40010800-0x40010BFFGPIO端口AAPB2GPIOA_CRL00Htypedef

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;#define

GPIOA#define

GPIOB#define

GPIOC#define

GPIOD#define

GPIOE#define

GPIOF#define

GPIOG((GPIO_TypeDef

*)

GPIOA_BASE)((GPIO_TypeDef

*)

GPIOB_BASE)((GPIO_TypeDef

*)

GPIOC_BASE)((GPIO_TypeDef

*)

GPIOD_BASE)((GPIO_TypeDef

*)

GPIOE_BASE)((GPIO_TypeDef

*)

GPIOF_BASE)((GPIO_TypeDef

*)

GPIOG_BASE)寄存器中关于各个位的定义,如:#define

GPIO_IDR_IDR0((uint16_t)0x0001)/*!<

Port

input

data,

bit

0*/#define

GPIO_ODR_ODR7

((uint16_t)0x0080)/*!<

Port

output

data,

bit

7

*/不同版本的“固件函数库”略有不同只要清楚“固件函数库是要做什么”,版本不同不是问题需要清楚的问题:固件函数库是怎么得到的?固件函数库在哪里存放?固件函数库的内容都有哪些?固件函数库怎么用?实际使用时,

不关心特殊功能寄存器,只关心如何正确调用固件函数库。写程序,实际是在已经有的程序实例上进行修改。固件函数库是生产商提供的,目的是为了用户更好的使用其制造的产品()。和安装EWARM

kickstart版本,进行相应的安(1)装。h/Download/sw/?item=EWARM-KS32安装工作完成后,就可以得到大部分的固件函数库。找到相应公司的相应例子,能看到固件函数库。(2)ST公司的官网固件函数库

网页中进行

/web/catalog/tools/FM147/CL1

794/SC961/SS1743/PF257890,完成,解压后即可得到固件函数库。有很多地方存放固件函数库在已经安装的EWARM

下:C:\Program

Files

(x86)\IAR

Systems\EmbeddedWorkbench6.5\arm\examples\ST\STM32F10x\IAR-STM32F103ZE-SK该文件夹下的所有文件。从ST官网

完成的固件库,可以放在任何计算机的硬盘的任何位置,解压缩后的固件函数库,不仅库函数还有大量的例子可以参考。函数库是一个固件函数包:由程序、数据结构和宏组成。包括微控制器所有外设的性能特征,还包括每一个外设的驱动描述和应用实例。给出的固件函数库内容很多,有2个主要文件夹:Libraries文件夹CMSIS子文件夹STM32F10x_StdPeriph_Driver

子文件夹inc子文件夹:固件函数库所需的头文件src子文件夹:固件函数库所需的源文件Project文件夹里面给出了一个标准的程序项目模版相关Example的子文件夹也包含在内CMSIS文件夹下的文件:一般不必改动

Inc和src文件夹下的文件:不必改动stm32f10x_conf.h:需要进行改动,打开用户自己用到的外设stm32ff10x_it.c:外设中断函数文件,用户需自己添加中断服务程序代码。,可根据自stm32ff10x_it.h:中断处理程序的己需要进行改动。Application.C:用户自行编写的程序。1.

stm32f10x_gpio.h //

version

V3.5.0GPIO_InitTypeDef

结构体的

;typedef

struct{uint16_t

GPIO_Pin;GPIOSpeed_TypeDef

GPIO_Speed;GPIOMode_TypeDef

GPIO_Mode;}GPIO_InitTypeDef;一些枚举数据GPIO_Speed,GPIO_Mode的定义;管脚名称的定义;复用I/O的相关地址定义;在stm32f10x_gpio.c所有18个函数的

。2.

stm32f10x_gpio.c //

version

V3.5.0其中有18个函数有几个与通用I/O相关,还有跟复用I/O相关的函数,在此不做介绍。仅介绍以下几个函数。void

GPIO_Init(GPIO_TypeDef*

GPIOx,GPIO_InitTypeDef*

GPIO_InitStruct);uint8_t

GPIO_ReadInputDataBit(GPIO_TypeDef*

GPIOx,

uint16_t

GPIO_Pin);uint16_t

GPIO_ReadInputData(GPIO_TypeDef*

GPIOx);uint8_t

GPIO_ReadOutputDataBit(GPIO_TypeDef*GPIOx,

uint16_t

GPIO_Pin);uint16_t

GPIO_ReadOutputData(GPIO_TypeDef*

GPIOx);void

GPIO_SetBits(GPIO_TypeDef*

GPIOx,

uint16_tGPIO_Pin);void

GPIO_ResetBits(GPIO_TypeDef*

GPIOx,

uint16_t

GPIO_Pin);void

GPIO_WriteBit(GPIO_TypeDef*

GPIOx,

uint16_t

GPIO_Pin,

BitAction

BitVal);void

GPIO_Write(GPIO_TypeDef*

GPIOx,

uint16_t

PortVal);详细的说明参看:ST公司提供的UM0427 User

manual32-bit

MCU

STM32F101xx

and

STM32F103xx

firmware

library配置信该函数功能是设定GPIOx口的息。void

GPIO_Init(GPIO_TypeDef*

GPIOx,GPIO_InitTypeDef*

GPIO_InitStruct)GPIOx:制定某个GPIO外设,x可以是A~GGPIO_InitStruct:指向结构GPIO_InitTypeDef的指针,包含了外设GPIO的配置信息。使用方法:设置A口的配置情况GPIO_Init(GPIOB,

&GPIO_InitStructure);该函数功能是设置GPIOx口的某一位置1void

GPIO_SetBits(GPIO_TypeDef*

GPIOx,

uint16_t

GPIO_Pin){/*

Check

the

parameters

*/assert_param(IS_GPIO_ALL_PERIPH(GPIOx));assert_param(IS_GPIO_

PIO_Pin));GPIOx->BSRR

=

GPIO_Pin;}使用方法://设定GPIOA口的13脚为1(高电平)GPIO_SetBits(GPIOA,GPIO_Pin_13);该函数功能给GPIOx写入输出数据PortValvoid

GPIO_Write(GPIO_TypeDef*

GPIOx,

uint16_tPortVal){/*

Check

the

parameters

*/assert_param(IS_GPIO_ALL_PERIPH(GPIOx));GPIOx->ODR

=

PortVal;}使用方法://设定GPIOA口的13脚为1(高电平)其余脚为0(低电平)GPIO_Write

(GPIOA,0x2000);该函数功能是读输入端口数据的值uint16_t

GPIO_ReadInputData(GPIO_TypeDef*GPIOx){/*

Check

the

parameters

*/assert_param(IS_GPIO_ALL_PERIPH(GPIOx));return

((uint16_t)GPIOx->IDR);}使用方法:

C口(设置为输入端口)的数据u16 temp;

temp=GPIO_ReadInputData(GPIOC);例1.D口的8脚接一个发光二极管,令发光二极管闪烁。int

main(void){GPIO_InitTypeDef

GPIO_InitStructure;RCC_Configuration();

//配置系统时钟,设置系统时钟为72MHzRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD

,

ENABLE);/*打开外设D的时钟*///配置LED所在外设的8引脚为输出GPIO_InitStructure.GPIO_Pin

=

GPIO_Pin_8;GPIO_InitStructure.GPIO_Speed

=

GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode

=

GPIO_Mode_Out_PP;GPIO_Init(GPIOD,

&GPIO_InitStructure);while

(1){GPIO_SetBits(GPIOD,GPIO_Pin_8);Delay(0x5FFFF);GPIO_ResetBits(GPIOD,GPIO_Pin_8);Delay(0x5FFFF);//PD8脚置1,灯熄灭//延时//PD8脚清0,点亮灯//延时}#include”stm32f10x_conf.h”const

unsigned

charledchange1[10]={0x00,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x

温馨提示

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

评论

0/150

提交评论