《嵌入式技术入门与实战(基于STM32)》 课件 3.1-功能IO模块及输出_第1页
《嵌入式技术入门与实战(基于STM32)》 课件 3.1-功能IO模块及输出_第2页
《嵌入式技术入门与实战(基于STM32)》 课件 3.1-功能IO模块及输出_第3页
《嵌入式技术入门与实战(基于STM32)》 课件 3.1-功能IO模块及输出_第4页
《嵌入式技术入门与实战(基于STM32)》 课件 3.1-功能IO模块及输出_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

第3章STM32I/O应用实战《嵌入式技术入门与实战(基于STM32)》第3章STM32I/O应用实战0102初识STM32的I/O口任务1GPIO实现跑马灯的控制21、初识STM32的I/O口第3章STM32I/O应用实战PartOneGPIO端口和引脚的概念,GPIO工作模式1、初识STM32的I/O口1.1STM32的I/0口定义1.2GPIO的工作模式和结构41.1STM32的I/0口定义STM32的I/0口,又叫做GPIO(General-PurposeInputs/Outputs),是STM32数字输入输出的基本模块,可以实现STM32与外部环境进行数字交换。GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能:借助GPIO,微控制器可以实现对外围设备(如LED和按键等)最简单、最直观的监控。当微控制器没有足够的I/O引脚或片内存储器时,GPIO还可用于串行和并行通信、存储器扩展等。通用I/O端口GPIO51系列单片机有1个8位双向并行I/O端口P0和3个8位准双向并行I/O端口P1~P3。✐51系列单片机的端口和引脚?STM32的GPIO的每个端口组有16个引脚,STM32不同型号的芯片,具有不同的端口组和不同的引脚数量STM32F407微控制器有9组通用I/O端口,端口号用GPIOx(x是A、B、C、D、E、F、G、H、I)表示,即GPIOA、GPIOB、……GPIOI每组端口有16个引脚(0~15),引脚号分别用Px0、Px1、……Px15(x是A~I)表示1.2GPIO的工作模式GPIO端口的每个位(引脚)可以由软件分别配置成多种模式。状态配置模式HAL库代码中宏定义名称通用输出开漏(Push-Pull)GPIO_MODE_OUTPUT_PP推挽式(Open-Drain)GPIO_MODE_OUTPUT_OD复用功能输出开漏(Push-Pull)GPIO_MODE_AF_PP推挽式(Open-Drain)GPIO_MODE_AF_OD输入上拉输入GPIO_MODE_INPUT,GPIO_PULLUP下拉输入GPIO_MODE_INPUT,GPIO_PULLDOWN浮空输入GPIO_MODE_INPUT,GPIO_NOPULL模拟输入GPIO_MODE_ANALOG1.2.2GPIO端口位的基本结构9GPIO不同工作模式下的电压标准非模拟输入模式端口能够读取当前电平的高低,读取电压高低的范围为5V/3.3V~0V。模拟输入模式端口能够读取当前电路的模拟电压值,分辨率为4096(12bit),采集范围为3.3V~0V。采集电压尽可能不要超过3.3V,否则可能会对芯片产生损坏。通用输出模式端口能够输出电平,控制输出口的电压范围为3.3V~0V。 复用模式端口复用到芯片内置的各种功能寄存器上,比如串口发送接收,SPI通信,Can总线等。这些寄存器没有直接的输出口,都是通过复用端口完成它们的功能。2、任务1GPIO实现跑马灯的控制第3章STM32I/O应用实战PartTwo了解应用实例功能,GPIO工作模式的选择,硬件设计2、任务1GPIO实现跑马灯的控制2.1软硬件设计2.2实现与代码分析11122.1软硬件设计基于嵌入式MCU设计并实现一个流水灯系统,具体要求:系统上电后,微控制器控制2个LED灯间隔200ms依次闪烁,并以此循环往复。13GPIO作为输出的应用芯片:STM32F407ZGT6实验板:正点原子探索开发套件实验板已实现了硬件电路,无需重新搭建。14硬件平台条件硬件设计原理图STM32芯片作为输出的引脚:PF9、PF10LED连接硬件电路输出状态下的GPIO内部配置推挽输出模式下:1:P导通,输出高0:N导通,输出低开漏输出模式下,0:N导通,输出低高阻状态:N不导通(P-MOS从不被激活)原理:输出寄存器上的0激活N-MOS,而输出寄存器上的1将激活P-MOS。推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务。电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。用途:可以输出高、低电平,连接数字器件;特点:推拉式输出级既提高电路的负载能力,又提高开关速度。17推挽输出原理输出寄存器上的0激活N-MOS,输出低电平,输出寄存器上的1将端口置于高阻状态用途适合做电流型的驱动特点:

利用外部电路的驱动能力,减少IC内部的驱动一般来说,开漏是用来连接不同电平的器件,匹配电平用的因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平,比如输出5V开漏输出功能:基于嵌入式MCU设计并实现一个流水灯系统。LED灯驱动需要输出高低电平,GPIO引脚的模式选择推挽输出模式GPIO作为输出的应用-模式选择思考与练习◎简述GPIO有哪几种工作模式。◎分析推挽输出和开漏输出的区别。212.2实现与代码分析掌握详细实现过程,分析具体实现代码第一步使用STM32CubeIDE新建工程第二步

使用STM32CubeMX完成时钟配置第三步使用STM32CubeMX完成GPIO端口引脚初始化配置第四步导出工程第五步LED流水灯功能代码编写第六步下载调试2.2.1实现过程2.2.2代码分析1)程序框架设计的程序可以采用“只执行一次初始化函数,重复执行功能函数”这种框架,如下所示:int

main(void)

{

//init()

while(1)

{

//test()

}

}

231)程序框架2)HAL库函数HAL库是ST推出的官方的固件库,它将这些寄存器底层操作都封装起来,提供一整套接口(API)供开发者调用,降低开发难度。用户在开发过程中不需要详细掌握寄存器的配置方法,只要知道调用哪些固件库函数即可,只要掌握了固件库开发思想,就大大降低了初学者入门的难度。寄存器标准库HAL库2)引脚控制的HAL库函数1、HAL_GPIO_Init功能:GPIO初始化,每个引脚可独立配置,也可同时传入多个引脚进行配置,包括GPIO工作模式、响应速度等相关寄存器的配置。无返回值。函数原型voidHAL_GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_Init)26GPIO_InitTypeDef结构体内容解析27成员含义配置选项Pin引脚号GPIO_PIN_0~GPIO_PIN_15(使用符号“|”进行或运算便可以合并)GPIO_PIN_All(一次初始化全部16个端口)Mode工作模式GPIO_MODE_INPUT(输入,需进一步配置)GPIO_MODE_OUTPUT_PP(推挽输出)GPIO_MODE_OUTPUT_OD(开漏输出)GPIO_MODE_AF_PP(复用推挽)GPIO_MODE_AF_OD(复用开漏)GPIO_MODE_ANALOG(模拟输入)Pull上下拉电阻的选择配置GPIO_NOPULL(无上下拉的浮空输入)GPIO_PULLUP(上拉输入)GPIO_PULLDOWN(下拉输入)SpeedI/O口驱动电路的响应速度,输出模式下有效GPIO_SPEED_FREQ_LOW(2MHz)GPIO_SPEED_FREQ_MEDIUM(25MHz)GPIO_SPEED_FREQ_HIGH(50MHz)GPIO_SPEED_FREQ_VERY_HIGH(100MHz)本任务中,配置PF9、PF10为推挽输出,无上下拉,速度2MHz2)引脚控制的HAL库函数2、HAL_GPIO_ReadPin功能:从输入数据寄存器(IDR)中读取引脚状态值,0或1,返回引脚状态值“0”或“1”。函数原型:GPIO_PinStateHAL_GPIO_ReadPin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin)282)引脚控制的HAL库函数3、HAL_GPIO_WritePin功能:向输出数据寄存器(ODR)中写入输出状态(0或1),无返回值函数原型:voidHAL_GPIO_WritePin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,GPIO_PinStatePinState)4、HAL_GPIO_TogglePin293)GPIO初始化的代码实现GPIO的初始化在STM32CubeMx中完成配置,会自动转化成初始化代码30开启外设时钟31

__HAL_RCC_GPIOF_CLK_ENABLE();4)流水灯功能的实现在while(1)中无限循环执行以下LED0/1交替亮灭,实现跑马灯效果。32思考与练习◎对于应用案例,修改跑马灯功能为全亮和全灭,调用HAL_GPIO_TogglePin函数实现3、GPIO的寄存器描述GPIO寄存器实现对GPIO端口初始化配置和数据输入输出控制每个寄存器只能以32位(字)进行访问,不允许16位(半字)或8位(字节)访问*GPIO配置寄存器GPIO端口模式寄存器GPIOx_MODERGPIO端口输出类型寄存器GPIOx_OTYPERGPIO端口输出速度寄存器GPIOx_OSPEEDRGPIO端口上拉/下拉寄存器GPIOx_PUPDR数据寄存器GPIO端口输入数据寄存器GPIOx_IDRGPIO端口输出数据寄存器GPIOx_ODR置位/复位寄存器GPIOx_BSRR锁定寄存器GPIOx_LCKR复用功能选择寄存器GPIO复用功能高位寄存器GPIOx_AFRHGPIO复用功能低位寄存器GPIOx_AFRLGPIO端口模式寄存器GPIOx_MODER36GPIO端口输出类型寄存器GPIOx_OTYPER37GPIO端口输出速度寄存器GPIOx_OSPEEDR38GPIO端口上拉/下拉寄存器GPIOx_PUPDR3940端口输入数据寄存器(GPIOx_IDR)GPIO_PinStateHAL_GPIO_ReadPin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin){GPIO_PinStatebitstatus;/*Checktheparameters*/assert_param(IS_GPIO_PIN(GPIO_Pin));if((GPIOx->IDR&GPIO_Pin)!=(uint32_t)GPIO_PIN_RESET){bitstatus=GPIO_PIN_SET;}else{bitstatus=GPIO_PIN_RESET;}returnbitstatus;}41端口输出数据寄存器(GPIOx_ODR)42端口位设置/复位寄存器(GPIOx_BSRR)voidHAL_GPIO_WritePin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,GPIO_PinStatePinState){/*Checktheparameters*/assert_param(IS_GPIO_PIN(GPIO_Pin));assert_param(IS_GPIO_PIN_ACTION(PinState));if(PinState!=GPIO_PIN_RESET){

GPIOx->BSRR=GPIO_Pin;}else{

GPIOx->BSRR=(uint32_t)GPIO_Pin<<16u;}}通用I/O(GPIO)说明事项复位

温馨提示

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

评论

0/150

提交评论