第4章ARM硬件结构应用.ppt_第1页
第4章ARM硬件结构应用.ppt_第2页
第4章ARM硬件结构应用.ppt_第3页
第4章ARM硬件结构应用.ppt_第4页
第4章ARM硬件结构应用.ppt_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

1 LPC和STM322 STM32固件库3 系统控制模块4 引脚连接模块5 GPIO操作6 向量中断控制器7 外中断输入 LPC和STM32系列ARM硬件结构与应用 8 定时器原理及应用9 SPI接口及应用10 UART接口及应用11 A D转换器及应用12 看门狗13 PWM原理与应用14 实时时钟 4引脚连接模块 概述 LPC2000系列微控制器的大部分管脚都具有多种功能 即管脚复用 但是同一引脚在同一时刻只能使用其中一个功能 通过配置相关寄存器控制多路开关来连接引脚与片内外设 01 10 11 P0 0默认为GPIO功能 P0 0选择TXD0功能 配置对应位为01 P0 0选择PWM1功能 配置对应位为10 P0 0选择保留功能 配置对应位为11 4引脚连接模块 LPC2000系列微控制器具有三个32位宽度PINSEL寄存器 其中PINSEL0和PINSEL1控制端口0 PINSEL2根据芯片的不同控制的端口数量也不同 寄存器描述 4引脚连接模块 应用示例 PINSEL0 0 x05 16 要求将P0 8 P0 9设置为TxD1 RxD1通过查阅PINSE0寄存器设置表 得到P0 9和P0 8的控制位为PINSEL0 19 16 当该域设置为 0101 0 x05 时选择RxD1和TxD1 为了不影响别的管脚连接设置 通常选择下面的设置方法 PINSEL0 PINSEL0 5GPIO 引脚描述 LPC2114 2124微控制器具有两个端口 P0和P1 可以作为GPIO使用的引脚数为46个 LPC2210 2212 2214微控制器还包含另外两个端口 P2和P3 这个两个端口与外部存储器总线复用 当它们全部作为GPIO使用时 GPIO引脚数多达112个 GPIO与控制寄存器的关系 引脚 GPIO相关寄存器描述 PINSELx IOxDIR IOxCLR IOxPIN IOxSET in out 1 0 GPIO相关寄存器描述 IOxPIN 该寄存器反映了当前引脚的状态 IOxPIN中的x对应于某一个端口 如P1口对应于IO1PIN 所以芯片存在多少个端口 就有多少个IOxPIN分别与之对应 写该寄存器会将值保存到输出寄存器 具体使用稍后介绍 注意 无论引脚被设置为输入还是输出模式 都不影响引脚状态的读出 PINSELx IOxDIR IOxCLR IOxPIN IOxSET in out 1 0 GPIO相关寄存器描述 IOxDIR 当引脚设置为GPIO输出模式时 可使用该寄存器控制引脚的方向 向某位写入1使对应引脚作为输出功能 写入0时作为输入功能 作为输入功能时 引脚处于高阻态 PINSELx IOxDIR IOxCLR IOxPIN IOxSET in out 1 0 GPIO相关寄存器描述 IOxSET 当引脚设置为GPIO输出模式时 可使用该寄存器从引脚输出高电平 向某位写入1使对应引脚输出高电平 写入0无效 从该寄存器读回的数据为GPIO输出寄存器的值 该值不反映外部环境对引脚的影响 PINSELx IOxDIR IOxCLR IOxPIN IOxSET in out 1 0 GPIO相关寄存器描述 IOxCLR 当引脚设置为GPIO输出模式时 可使用该寄存器从引脚输出低电平 向某位写入1使对应引脚输出低电平 写入0无效 注意 读取该寄存器无效 不能读回输出寄存器的值 5GPIO 使用GPIO注意要点 引脚设置为输出方式时 输出状态由IOxSET和IOxCLR中最后操作的寄存器决定 大部分GPIO输出为推挽方式 个别引脚为开漏输出 正常拉出 灌入电流均为4mA 短时间极限值40mA 复位后默认所有GPIO为输入模式 PINSEL0 C代码 PINSEL0 IO0DIR IO0CLR IO0PIN IO0SET in out 1 0 GPIO应用示例 设置P0 0输出高电平 P0 0 uint32PinStat PINSEL0 C代码 PINSEL0 IO0DIR IO0CLR IO0PIN IO0SET in out 1 0 GPIO应用示例 读取P0 0引脚状态 P0 0 IO0PIN defineDataBus0 xFFPINSEL0 使用IOxSET和IOxCLR实现 GPIO应用示例 输出多位数据至IO口 在需要将多位数据同时输出到某几个IO口线时 通常使用IOxSET和IOxCLR来实现 在某些情况下也可以使用IOxPIN寄存器实现 后者可以在多个IO口上直接输出0和1电平 本例将8位无符号整形变量Data的值输出到P0 0 P0 7 数据输出线 defineDataBus0 xFFPINSEL0 GPIO应用示例 输出多位数据至IO口 在需要将多位数据同时输出到某几个IO口线时 通常使用IOxSET和IOxCLR来实现 在某些情况下也可以使用IOxPIN寄存器实现 后者可以在多个IO口上直接输出0和1电平 本例将8位无符号整数变量Data的值输出到P0 0 P0 7 使用IOxPIN实现 数据输出线 STM32GPIO操作 主要功能 通用I O GPIO 用 输入输出 单独的位设置或位清除 外部中断 唤醒线 端口必须配置成输入模式时 所有端口都有外部中断能力 复用功能 AF 并且软件能重新映射I O复用功能 GPIO锁定机制 主要针对复位设定的 当某端口位lock后 复位后将不改变的此端口的位配置 STM32GPIO操作 强大的GPIO功能 可设置 GPIOMode TypeDefGPIOmode定义及偏移地址GPIOmode GPIO Mode AIN0 x00模拟输入GPIO Mode IN FLOATING0 x04悬空输入GPIO Mode IPD0 x28下拉输入GPIO Mode IPU0 x48上拉输入GPIO Mode Out OD0 x14开漏输出GPIO Mode Out PP0 x10推挽输出GPIO Mode AF OD0 x1c开漏复用GPIO Mode AF PP0 x18推挽复用 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 stm32f10 x h include stm32f10 x conf h GPIO InitTypeDefPAInit voidLED 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 main LED Init while 1 GPIO SetBits GPIOA GPIO Pin 11 GPIOA 11 1Delay 0 x8ffff GPIO ResetBits GPIOA GPIO Pin 11 GPIOA 11 0Delay 0 x8ffff GPIO SetBits GPIOA GPIO Pin 12 Delay 0 x8ffff GPIO ResetBits GPIOA GPIO Pin 12 Delay 0 x8ffff GPIO SetBits GPIOA GPIO Pin 13 Delay 0 x8ffff GPIO ResetBits GPIOA GPIO Pin 13 Delay 0 x8ffff GPIO SetBits GPIOA GPIO Pin 14 Delay 0 x8ffff GPIO ResetBits GPIOA GPIO Pin 14 Delay 0 x8ffff 6向量中断控制器 概述 ARM7TDMI内核具有两个中断输入 分别为IRQ中断和FIQ中断 向量中断控制器 VIC 负责管理芯片的中断源 最多可以管理32个中断输入请求 CPU内核ARM7TDMI S 6 向量中断控制器 程序状态寄存器CPSR与VIC的关系 ARM内核通过CPSR来监视和控制内部的操作 CPSR中的 I 位和 F 位分别用来控制IRQ模式和FIQ模式的使能 CPU ARM7TDMI S VIC IRQ FIQ CPSR 7 I CPSR 6 F 6 向量中断控制器 程序状态寄存器CPSR与VIC的关系 当I 1时 禁止IRQ中断 当I 0时 使能IRQ中断 6 向量中断控制器 程序状态寄存器CPSR与VIC的关系 当F 1时 禁止FIQ中断 当F 0时 使能FIQ中断 6 向量中断控制器 中断分类 中断输入请求可以在VIC中被设置为以下三类 FIQ中断 具有最高优先级 向量IRQ中断 具有中等优先级 非向量IRQ中断 具有最低优先级 6 向量中断控制器 FIQ中断硬件处理流程 将当前的程序状态寄存器的内容备份即 SPSR fiq CPSR 处理器切换到FIQ模式 禁止IRQ和FIQ中断 即 I F 1 保存返回地址LR fiq PC 设置FIQ异常入口地址PC 0 x1C 发生FIQ异常事件 说明 ARM7不支持FIQ中断嵌套 6 向量中断控制器 IRQ中断相应流程 将当前的程序状态寄存器的内容备份即 SPSR irq CPSR 处理器切换到IRQ模式 禁止IRQ中断 即 I 1 保存返回地址LR irq PC 设置IRQ异常入口地址PC 0 x18 发生IRQ异常事件 说明 ARM7不支持IRQ中断嵌套 寄存器描述 控制寄存器 控制寄存器功能描述 6 向量中断控制器 寄存器描述 参数设置寄存器 IRQ中断特点 6 向量中断控制器 IRQ中断相关寄存器 6 向量中断控制器 注意 如果将同一个中断源分配给多个使能的向量IRQ中断 那么该中断源发生中断时 会使用最高优先级 最低编号 的寄存器设置 产生中断后的服务程序地址 6 向量中断控制器 寄存器描述 状态寄存器 注意 读取VICRawIntr寄存器将得到所有32个中断请求和软件中断的状态 它不管中断是否使能或分类 保护使能寄存器 6 向量中断控制器 保护使能寄存器 VICProtection 在某些场合可能需要禁止在用户模式下访问VIC寄存器 以提高软件的安全等级 FIQ中断处理 6 向量中断控制器 SUBSPC LR 4 IRQ中断处理 6 向量中断控制器 硬件处理 软件处理 IRQ中断处理 6 向量中断控制器 软件处理 IRQ中断处理 6 向量中断控制器 SUBSPC LR 4 IRQ中断的设计实例 将定时器0中断分配为向量IRQ通道0 中断服务程序地址设置为Timer0 ISR C代码 步骤 IRQ通道0控制寄存器VICVectCntl0 向量IRQ通道0控制寄存器位分配 位 数值 图示IRQ中断的发生过程 1 正在执行用户程序 2 外部中断0发生中断 3 VIC硬件将中断服务程序地址装入VICVectAddr寄存器 4 程序跳转至异常向量表中IRQ入口0 x0018处 5 执行指令跳转至VICVectAddr寄存器中的中断服务地址 6 中断服务程序执行完毕 返回被中断的用户程序继续执行被中断的代码 图示IRQ中断的发生过程 IRQ Eint0 注意 任何IRQ中断产生之后 微控制器跳转到地址0 x18执行代码 该地址处的指令为 LDRPC PC 0 xff0 在执行该指令时 PC指向当前指令后的第2条指令 即地址0 x20 该指令将内存地址 0 x20 0 xFF0 0 xFFFFF030处的内容存入PC 该地址正是VICVectAddr寄存器的地址 所以一条ARM指令即可实现程序向中断服务程序的跳转 STM32目前支持的中断共为 84个其中 16个内核 68个外部 和16级可编程中断优先级的设置 仅使用中断优先级设置8bit中的高4位 见后面解释 6 STM32中断控制 STM32可以支持的68个外部中断通道 已经固定的分配给相应的外部设备 每个中断通道都具备自己的中断优先级控制字节PRI n 8位 但在STM32中只使用4位 高4位有效 对于这4bit的中断优先级控制位还必须分成2组看 从高位开始 前面是定义抢先式优先级的位 后面用于定义子优先级 6 STM32中断控制 4bit的分组组合可以有以下几种形式 第0组 所有4bit用于指定响应优先级 第1组 最高1位用于指定抢占式优先级 后面3位用于指定响应优先级 第2组 最高2位用于指定抢占式优先级 后面2位用于指定响应优先级 第3组 最高3位用于指定抢占式优先级 后面1位用于指定响应优先级 第4组 所有4位用于指定抢占式优先级 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应 即中断嵌套 6 STM32中断控制 6 STM32中断控制 设置相应的中断实际上就是设置NVIC 在STM32的固件库中有一个结构体NVIC InitTypeDef 里面有相应的标志位设置 然后再用NVIC Init 函数进行初始化 详细代码如下 6 ST

温馨提示

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

评论

0/150

提交评论