第4章ARM硬件结构应用(4~6)

上传人:种**** 文档编号:260546330 上传时间:2022-02-28 格式:PPTX 页数:57 大小:728KB
返回 下载 相关 举报
第4章ARM硬件结构应用(4~6)_第1页
第1页 / 共57页
第4章ARM硬件结构应用(4~6)_第2页
第2页 / 共57页
第4章ARM硬件结构应用(4~6)_第3页
第3页 / 共57页
第4章ARM硬件结构应用(4~6)_第4页
第4页 / 共57页
第4章ARM硬件结构应用(4~6)_第5页
第5页 / 共57页
亲,该文档总共57页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第4章ARM硬件结构应用(4~6)》由会员分享,可在线阅读,更多相关《第4章ARM硬件结构应用(4~6)(57页珍藏版)》请在金锄头文库上搜索。

1、 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引脚连接寄存器PINS

2、ELx1 : 000011011P0.0默认为GPIO功能P0.0选择TXD0功能,配置对应位为01P0.0选择PWM1功能,配置对应位为10P0.0选择保留功能,配置对应位为114 引脚连接模块 LPC2000系列微控制器具有三个32位宽度PINSEL寄存器,其中PINSEL0和PINSEL1控制端口0,PINSEL2根据芯片的不同控制的端口数量也不同 。 寄存器描述寄存器LPC2100LPC2200PINSEL0P00:15PINSEL1P016:31PINSEL2P116:31P10:1、 P116:31、P20:31、P30:314 引脚连接模块 应用示例PINSEL0 = 0 x05

3、 16; 要求将P0.8、P0.9设置为TxD1、RxD1 通过查阅PINSE0寄存器设置表,得到P0.9和P0.8的控制位为PINSEL019:16,当该域设置为0101 (0 x05)时选择 RxD1和 TxD1。 为了不影响别的管脚连接设置,通常选择下面的设置方法。PINSEL0 = (PINSEL0 & 0 xFFF0FFFF) | (0 x05 16);5 GPIO 引脚描述 LPC2114/2124微控制器具有两个端口P0和P1,可以作为GPIO使用的引脚数为46个。 LPC2210/2212/2214微控制器还包含另外两个端口P2和P3,这个两个端口与外部存储器总线复用,当它们全

4、部作为GPIO使用时,GPIO引脚数多达112个。GPIO与控制寄存器的关系PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10引脚PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10通用名称描述访问类型复位值IOPINGPIO引脚值寄存器,不管方向模式如何,引脚的当前状态都可以从该寄存器中读出只读NAIOSETGPIO输出置位寄存器。该寄存器控制引脚输出高电平读/置位0 x00000000IOCLRGPIO输出置位寄存器。该寄存器控制引脚输出低电平只清零0 x00000

5、000IODIRGPIO方向控制寄存器。该寄存器单独控制每个IO口的方向读/写0 x00000000 GPIO相关寄存器描述PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10 GPIO相关寄存器描述IOxPINIOxPIN描述复位值31 : 0GPIO引脚值。IOxPIN0对应于Px.0 IOxPIN31对应于Px.31引脚未定义 该寄存器反映了当前引脚的状态。IOxPIN中的x对应于某一个端口,如P1口对应于IO1PIN。所以芯片存在多少个端口,就有多少个IOxPIN分别与之对应。 写该寄存器会将值保存到输出寄存器,具体使用稍后介绍。注意:无论引脚被设置为输入还是输

6、出模式,都不影响引脚状态的读出。PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10 GPIO相关寄存器描述IOxDIRIOxDIR描述复位值31 : 0方向控制位。IOxDIR0对应于Px.0 IOxDIR31对应于Px.31引脚0 当引脚设置为GPIO输出模式时,可使用该寄存器控制引脚的方向。向某位写入1使对应引脚作为输出功能,写入0时作为输入功能。 作为输入功能时,引脚处于高阻态。PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10 GPIO相关寄存器描述IOxSETIOxSET描述复位值31 : 0输出置位。IOxSET0对应于Px.0

7、IOxPIN31对应于Px.31引脚0 当引脚设置为GPIO输出模式时,可使用该寄存器从引脚输出高电平。向某位写入1使对应引脚输出高电平。写入0无效。 从该寄存器读回的数据为GPIO输出寄存器的值。该值不反映外部环境对引脚的影响。PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10 GPIO相关寄存器描述IOxCLRIOxCLR描述复位值31 : 0输出清零。IOxCLR0对应于Px.0 IOxCLR31对应于Px.31引脚0 当引脚设置为GPIO输出模式时,可使用该寄存器从引脚输出低电平。向某位写入1使对应引脚输出低电平。写入0无效。注意:读取该寄存器无效,不能读回输

8、出寄存器的值。5 GPIO 使用GPIO注意要点引脚设置为输出方式时,输出状态由IOxSET和IOxCLR中最后操作的寄存器决定;大部分GPIO输出为推挽方式(个别引脚为开漏输出),正常拉出/灌入电流均为4mA(短时间极限值40mA);复位后默认所有GPIO为输入模式。 . PINSEL0 &= 0 xFFFFFFFC; IO0DIR |= 0 x00000001; IO0SET = 0 x00000001; .C代码:PINSEL0IO0DIRIO0CLRIO0PINIO0SETinout10 GPIO应用示例设置P0.0输出高电平P0.0(1) 设置引脚连接模块,P0.0为GPIO(2)

9、设置P0.0口方向,设置为输出(3) 设置P0.0口状态,输出高电平1 . uint32 PinStat; PINSEL0 &= 0 xFFFFFFFC; IO0DIR &= 0 xFFFFFFFE; PinStat = IO0PIN; .C代码:PINSEL0IO0DIRIO0CLRIO0PINIO0SETinout10 GPIO应用示例读取P0.0引脚状态P0.0(1) 设置引脚连接模块,P0.0为GPIO(2) 设置P0.0口方向,设置为输入(3) 从IO0PIN读取引脚状态IO0PIN#define DataBus 0 xFF PINSEL0 &= 0 xFFFF0000; IO0DI

10、R |= DataBus; IO0CLR = DataBus; IO0SET = Data; .使用IOxSET和IOxCLR实现: GPIO应用示例输出多位数据至IO口(1) 设置引脚连接模块,P0.07为GPIO(2) 设置P0.0口方向,设置为输出(3) 清零8位IO口的输出状态 在需要将多位数据同时输出到某几个IO口线时,通常使用IOxSET和IOxCLR来实现,在某些情况下也可以使用IOxPIN寄存器实现。后者可以在多个IO口上直接输出0和1电平。 本例将8位无符号整形变量Data的值输出到P0.0P0.7。(4) Data变量中为1的位将输出高电平0 x?0 x00Data数据输出

11、线:#define DataBus 0 xFF PINSEL0 &= 0 xFFFF0000; IO0DIR |= DataBus; IO0PIN = (IO0SET & 0 xFFFFFF00) | Data; . GPIO应用示例输出多位数据至IO口(1) 设置引脚连接模块,P0.0为GPIO(2) 设置P0.0口方向,设置为输出(3) 写IO0PIN,输出数据 在需要将多位数据同时输出到某几个IO口线时,通常使用IOxSET和IOxCLR来实现,在某些情况下也可以使用IOxPIN寄存器实现。后者可以在多个IO口上直接输出0和1电平。 本例将8位无符号整数变量Data的值输出到P0.0P0

12、.7。使用IOxPIN实现:0 x?Data数据输出线:0 x?0 x00Data与前者对比:STM32 GPIO操作主要功能:通用I/O(GPIO)用,输入输出;单独的位设置或位清除;外部中断/唤醒线:端口必须配置成输入模式时,所有端口都有外部中断能力;复用功能(AF),并且软件能重新映射I/O复用功能;GPIO锁定机制:主要针对复位设定的,当某端口位lock后,复位后将不改变的此端口的位配置。 STM32 GPIO操作 强大的GPIO功能,可设置:GPIOMode_TypeDef GPIO mode 定义及偏移地址 GPIO mode : GPIO_Mode_AIN 0 x00 模拟输入

13、GPIO_Mode_IN_FLOATING 0 x04 悬空输入 GPIO_Mode_IPD 0 x28 下拉输入 GPIO_Mode_IPU 0 x48 上拉输入 GPIO_Mode_Out_OD 0 x14 开漏输出 GPIO_Mode_Out_PP 0 x10 推挽输出 GPIO_Mode_AF_OD 0 x1c 开漏复用 GPIO_Mode_AF_PP 0 x18 推挽复用 STM32 GPIO操作输出速度通过GPIOSpeed_TypeDef结构体可选择: 2MHz,10MHz,50MHz。 typedef enum GPIO_Speed_10MHz, GPIO_Speed_2MHz

14、, GPIO_Speed_50MHzGPIOSpeed_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* GPI

15、Ox, uint16_t GPIO_Pin):某排引脚某个引脚输出1 固件库里面的GPIO库文件已经为我们准备好了很多的操作函数,可以直接使用。 4. GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin):某排引脚某个引脚输出0 5. GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal):设置某排引脚输出值 6. GPIO_ReadInputData(GPIO_TypeDef* GPIOx):读整排引脚的值 7. GPIO_ReadOutputDataBit(GPIO_TypeDef* GPI

16、Ox, uint16_t GPIO_Pin):读某排引脚里面的输出寄存器的某个引脚值 操作实例 做个跑马灯程序,PA.11PA.14口分别4个LED灯,当I/O为高电平时LED灯点亮。 #include “stm32f10 x.h”#include “stm32f10 x_conf.h” GPIO_InitTypeDef PAInit; void LED_Init(void)RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);/开GPIOC时钟PAInit.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14;PAInit.GPIO_Mode = GPIO_Mode_Out_PP;PAInit.GPIO_Speed = GPIO_Speed_2MHz;GPIO_Init(GPIOA, &PAInit); main() LED_Init(); while(1) GPIO_SetBits(GPIOA, GPIO_Pin_11);/GPIOA.11=1 Delay

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号