流水灯一直是入门学习微控制器最简单、最经典的例子(如同编程语言的“Hello World!”), 体现了微控制器最基本的功能:控制引脚输出高低电平。 1.GPIO 介绍 GPIO(General PurposeInput Output)通用输入输出,是 STM32 的一种外设,与大部分芯片引脚直接挂钩,STM32F103芯片总共有 7 个 GPIO 外设,定义为 GPIOA、 GPIOB、 GPIOC、 GPIOD、 GPIOE、 GPIOF 以及GPIOG, 每个 GPIO 外设有 16 个引脚,定义为 PA0..PA15、 PB0..PB15 等等。GPIO 最简单的功能是输出高低电平, GPIO 还可以被设置为输入功能, 用于读取按键等输入信号。之前也介绍到,很多高级外设也有功能引脚,并且是与GPIO 共用的, 具体引脚功能可以通过软件编程设置对应的寄存器内容实现的,STM32F10x 芯片 GPIO 的基本结构见图:
其中: 保护二极管用于防止因为引脚外部输入电压过高或过低烧坏芯片,但这种保护也是有限的。
上半部分属于引脚输入功能,通过一个电阻和一个开关(可以通过寄存器控制开关状态)可以把输入线拉高或者拉低。
下半部分是引脚输出功能,通过一个PMOS 管和一个NMOS管组合而成一个反相器驱动输出。对于普通的引脚电平控制,根据需要设置置位或者复位寄存器的值,这两个寄存器的值会改变输出数据寄存器值,通过输出控制电路驱动反相器从而改变引脚的状态。
每个GPIO外设都有7个独立的寄存器,为实现不同工作条件要求,GPIO有8种工作模式,通过配置GPIOx_CRL或GPIOx_CRH 寄存器可以控制,常用的几种模式如下: 输入浮空:该模式也是 STM32 复位之后默认模式。 浮空输入模式是相对与上拉或者下拉输入模式,浮空就是不上拉也不下拉。 输入上拉:输入上拉模式就是在浮空输入模式基础上使能输入电路中的上拉开关,该开关由输出数据寄存器(GPIOx_ODR)引脚对应位设置为 1 来使能。 输入下拉:输入下拉模式也是在浮空输入模式基础上使能了输入电路中的下拉开关,该开关由输出数据寄存器(GPIOx_ODR)引脚对应位设置为 0 来使能。 模拟输入:当 STM32 需要进行 AD(模数)转换时,需要把引脚设置为模拟输入模式,该模式需要配合ADC外设使用,GPIO完全只是一个通路,最后信号流入到 AD 转换电路中。 开漏通用输出:通用输出模式就是做为普通用途的输出模式,比如简单地控制引脚输出高低电平。 推挽通用输出:推挽输出与开漏输出原理理解都是差不多。
推挽复用功能输出:一个 I/O 引脚可以做为普通的 IO 接口,还可以做为其他设的特殊功能引脚,有些引脚可能有 4、5种不同功能,这种现象就叫做复用,引脚复用为特殊功能引脚,那引脚状态就由该外设决定。 2.STM32CubeMX 生成工程
STM32CubeMX 可以为我们提供很大的便利,配合 HAL 库使用可以提高工作效率。根据STM32底板 GokitV2.1原理图,4个LED分别连接到了STM32的引脚PB1、PB11、P14、PB15。我们将GPIO配置成推免输出模式,GPIO输出高电平点亮LED,低电平则LED熄灭。 STM32CubeMX具体配置如下:
有视频有真相:
STM32CubeMX生成的报告: GokitDemo1_LED.pdf
原贴转自:http://club.gizwits.com/thread-3859-1-1.html
|