您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 第4章ARM硬件结构应用(4~6)
嵌入式系统及应用福州大学物信学院1.LPC和STM32简介2.STM32固件库3.系统控制模块4.引脚连接模块5.GPIO操作6.向量中断控制器7.外中断输入LPC和STM32系列ARM硬件结构与应用8.定时器原理及应用9.SPI接口及应用10.UART接口及应用11.A/D转换器及应用12.看门狗13.PWM原理与应用14.实时时钟嵌入式系统及应用福州大学物信学院4引脚连接模块•概述LPC2000系列微控制器的大部分管脚都具有多种功能,即管脚复用,但是同一引脚在同一时刻只能使用其中一个功能,通过配置相关寄存器控制多路开关来连接引脚与片内外设。引脚P0.0GPIOTXD0PWM1输出保留PINSELx引脚连接寄存器PINSELx1:000011011P0.0默认为GPIO功能P0.0选择TXD0功能,配置对应位为01P0.0选择PWM1功能,配置对应位为10P0.0选择保留功能,配置对应位为11嵌入式系统及应用福州大学物信学院4引脚连接模块LPC2000系列微控制器具有三个32位宽度PINSEL寄存器,其中PINSEL0和PINSEL1控制端口0,PINSEL2根据芯片的不同控制的端口数量也不同。•寄存器描述寄存器LPC2100LPC2200PINSEL0P0[0:15]PINSEL1P0[16:31]PINSEL2P1[16:31]P1[0:1]、P1[16:31]、P2[0:31]、P3[0:31]嵌入式系统及应用福州大学物信学院4引脚连接模块•应用示例PINSEL0=0x0516;要求将P0.8、P0.9设置为TxD1、RxD1通过查阅PINSE0寄存器设置表,得到P0.9和P0.8的控制位为PINSEL0[19:16],当该域设置为[0101](0x05)时选择RxD1和TxD1。为了不影响别的管脚连接设置,通常选择下面的设置方法。PINSEL0=(PINSEL0&0xFFF0FFFF)|(0x0516);嵌入式系统及应用福州大学物信学院5GPIO•引脚描述LPC2114/2124微控制器具有两个端口——P0和P1,可以作为GPIO使用的引脚数为46个。LPC2210/2212/2214微控制器还包含另外两个端口——P2和P3,这个两个端口与外部存储器总线复用,当它们全部作为GPIO使用时,GPIO引脚数多达112个。GPIO与控制寄存器的关系PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10引脚嵌入式系统及应用福州大学物信学院PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10通用名称描述访问类型复位值IOPINGPIO引脚值寄存器,不管方向模式如何,引脚的当前状态都可以从该寄存器中读出只读NAIOSETGPIO输出置位寄存器。该寄存器控制引脚输出高电平读/置位0x00000000IOCLRGPIO输出置位寄存器。该寄存器控制引脚输出低电平只清零0x00000000IODIRGPIO方向控制寄存器。该寄存器单独控制每个IO口的方向读/写0x00000000•GPIO相关寄存器描述嵌入式系统及应用福州大学物信学院PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10•GPIO相关寄存器描述——IOxPINIOxPIN描述复位值31:0GPIO引脚值。IOxPIN[0]对应于Px.0…IOxPIN[31]对应于Px.31引脚未定义该寄存器反映了当前引脚的状态。IOxPIN中的x对应于某一个端口,如P1口对应于IO1PIN。所以芯片存在多少个端口,就有多少个IOxPIN分别与之对应。写该寄存器会将值保存到输出寄存器,具体使用稍后介绍。注意:无论引脚被设置为输入还是输出模式,都不影响引脚状态的读出。嵌入式系统及应用福州大学物信学院PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10•GPIO相关寄存器描述——IOxDIRIOxDIR描述复位值31:0方向控制位。IOxDIR[0]对应于Px.0…IOxDIR[31]对应于Px.31引脚0当引脚设置为GPIO输出模式时,可使用该寄存器控制引脚的方向。向某位写入1使对应引脚作为输出功能,写入0时作为输入功能。作为输入功能时,引脚处于高阻态。嵌入式系统及应用福州大学物信学院PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10•GPIO相关寄存器描述——IOxSETIOxSET描述复位值31:0输出置位。IOxSET[0]对应于Px.0…IOxPIN[31]对应于Px.31引脚0当引脚设置为GPIO输出模式时,可使用该寄存器从引脚输出高电平。向某位写入1使对应引脚输出高电平。写入0无效。从该寄存器读回的数据为GPIO输出寄存器的值。该值不反映外部环境对引脚的影响。嵌入式系统及应用福州大学物信学院PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10•GPIO相关寄存器描述——IOxCLRIOxCLR描述复位值31:0输出清零。IOxCLR[0]对应于Px.0…IOxCLR[31]对应于Px.31引脚0当引脚设置为GPIO输出模式时,可使用该寄存器从引脚输出低电平。向某位写入1使对应引脚输出低电平。写入0无效。注意:读取该寄存器无效,不能读回输出寄存器的值。嵌入式系统及应用福州大学物信学院5GPIO•使用GPIO注意要点引脚设置为输出方式时,输出状态由IOxSET和IOxCLR中最后操作的寄存器决定;大部分GPIO输出为推挽方式(个别引脚为开漏输出),正常拉出/灌入电流均为4mA(短时间极限值40mA);复位后默认所有GPIO为输入模式。嵌入式系统及应用福州大学物信学院...PINSEL0&=0xFFFFFFFC;IO0DIR|=0x00000001;IO0SET=0x00000001;...C代码:PINSEL0IO0DIRIO0CLRIO0PINIO0SETinout10•GPIO应用示例——设置P0.0输出高电平P0.0(1)设置引脚连接模块,P0.0为GPIO(2)设置P0.0口方向,设置为输出(3)设置P0.0口状态,输出高电平1嵌入式系统及应用福州大学物信学院...uint32PinStat;PINSEL0&=0xFFFFFFFC;IO0DIR&=0xFFFFFFFE;PinStat=IO0PIN;...C代码:PINSEL0IO0DIRIO0CLRIO0PINIO0SETinout10•GPIO应用示例——读取P0.0引脚状态P0.0(1)设置引脚连接模块,P0.0为GPIO(2)设置P0.0口方向,设置为输入(3)从IO0PIN读取引脚状态IO0PIN嵌入式系统及应用福州大学物信学院#defineDataBus0xFFPINSEL0&=0xFFFF0000;IO0DIR|=DataBus;IO0CLR=DataBus;IO0SET=Data;...使用IOxSET和IOxCLR实现:•GPIO应用示例——输出多位数据至IO口(1)设置引脚连接模块,P0.0~7为GPIO(2)设置P0.0口方向,设置为输出(3)清零8位IO口的输出状态在需要将多位数据同时输出到某几个IO口线时,通常使用IOxSET和IOxCLR来实现,在某些情况下也可以使用IOxPIN寄存器实现。后者可以在多个IO口上直接输出0和1电平。本例将8位无符号整形变量Data的值输出到P0.0~P0.7。(4)Data变量中为1的位将输出高电平0x??0x00Data数据输出线:嵌入式系统及应用福州大学物信学院#defineDataBus0xFFPINSEL0&=0xFFFF0000;IO0DIR|=DataBus;IO0PIN=(IO0SET&0xFFFFFF00)|Data;...•GPIO应用示例——输出多位数据至IO口(1)设置引脚连接模块,P0.0为GPIO(2)设置P0.0口方向,设置为输出(3)写IO0PIN,输出数据在需要将多位数据同时输出到某几个IO口线时,通常使用IOxSET和IOxCLR来实现,在某些情况下也可以使用IOxPIN寄存器实现。后者可以在多个IO口上直接输出0和1电平。本例将8位无符号整数变量Data的值输出到P0.0~P0.7。使用IOxPIN实现:0x??Data数据输出线:0x??0x00Data与前者对比:嵌入式系统及应用福州大学物信学院STM32GPIO操作主要功能:通用I/O(GPIO)用,输入输出;单独的位设置或位清除;外部中断/唤醒线:端口必须配置成输入模式时,所有端口都有外部中断能力;复用功能(AF),并且软件能重新映射I/O复用功能;GPIO锁定机制:主要针对复位设定的,当某端口位lock后,复位后将不改变的此端口的位配置。嵌入式系统及应用福州大学物信学院STM32GPIO操作•强大的GPIO功能,可设置:GPIOMode_TypeDefGPIOmode定义及偏移地址GPIOmode:GPIO_Mode_AIN0x00模拟输入GPIO_Mode_IN_FLOATING0x04悬空输入GPIO_Mode_IPD0x28下拉输入GPIO_Mode_IPU0x48上拉输入GPIO_Mode_Out_OD0x14开漏输出GPIO_Mode_Out_PP0x10推挽输出GPIO_Mode_AF_OD0x1c开漏复用GPIO_Mode_AF_PP0x18推挽复用嵌入式系统及应用福州大学物信学院STM32GPIO操作•输出速度通过GPIOSpeed_TypeDef结构体可选择:2MHz,10MHz,50MHz。typedefenum{GPIO_Speed_10MHz,GPIO_Speed_2MHz,GPIO_Speed_50MHz}GPIOSpeed_TypeDef;嵌入式系统及应用福州大学物信学院•固件库里面的GPIO库文件已经为我们准备好了很多的操作函数,可以直接使用。1.GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct):根据GPIO_InitTypeDef里面的值,初始化某排里面的某些引脚的模式跟速度2.GPIO_StructInit(GPIO_InitTypeDef*GPIO_InitStruct):给GPIO_InitTypeDef里面的项目赋默认值3.GPIO_SetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin):某排引脚某个引脚输出1嵌入式系统及应用福州大学物信学院•固件库里面的GPIO库文件已经为我们准备好了很多的操作函数,可以直接使用。4.GPIO_ResetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin):某排引脚某个引脚输出05.GPIO_Write(GPIO_TypeDef*GPIOx,uint16_tPortVal):设置某排引脚输出值6.GPIO_ReadInputData(GPIO_TypeDef*GPIOx):读整排引脚的值7.GPIO_ReadOutputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin):读某排引脚里面的输出寄存器的某个引脚值……嵌入式系统及应用福州大学物信学院操作实例•做个跑马灯程序,PA.11—PA.14口分别4个LED灯,当I/O为高电平时LED灯点亮。嵌入式系统及应用福州大学物信学院•#include“stm32f10x.h”#include“stm32f10x_conf.h”GPIO_InitTypeDefPAInit;voidLED_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//开GPIOC时钟PAInit.GPIO_Pin=GPIO_Pin_11|GP
本文标题:第4章ARM硬件结构应用(4~6)
链接地址:https://www.777doc.com/doc-30113 .html