bigfanofloT 发表于 2016-10-25 18:52:06

STM32版Gokit零基础开发之GPIO

本帖最后由 bigfanofloT 于 2016-10-25 19:20 编辑

流水灯一直是入门学习微控制器最简单、最经典的例子(如同编程语言的“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具体配置如下:









工程文件:有视频有真相:http://player.youku.com/player.php/sid/XMTc3NDEzMzc0NA==/v.swfSTM32CubeMX生成的报告:





bigfanofloT 发表于 2017-4-8 16:54:15

Seasonic 发表于 2017-4-7 22:36
我的按教程一步步走完之后没有生成mxcontants.h文件,请问是怎么回事儿?

the new version of STM32CubeMX don't use mxcontants.h file anymore,it uses the " main.h " file instead.

tianzuoan 发表于 2016-11-9 19:46:50

bigfanofloT 发表于 2016-11-9 17:29
可以啊,用串口烧录固件也可以

谢谢!为什么版主您还不答复学渣我那个关于怎么定义机智云STM32F103C8T6板子全部IO设置为输出的问题?:(

bigfanofloT 发表于 2016-11-8 12:30:56

tianzuoan 发表于 2016-11-8 08:49
哦,对了,怎么知道板子上哪个usb借口是下载程序?因为有两个usb。。另外一个usb是不是电源借口 ...

丝印为USB TO UART的可以下载程序

郭庆帅 发表于 2016-10-25 20:45:45

前来学习

bigfanofloT 发表于 2016-10-25 22:35:39

郭庆帅 发表于 2016-10-25 20:45
前来学习

:handshake:handshake

创梦 发表于 2016-10-28 16:05:15

楼主加上和Gagent固件通信的例程就好啊?

bigfanofloT 发表于 2016-10-28 16:27:17

创梦 发表于 2016-10-28 16:05
楼主加上和Gagent固件通信的例程就好啊?

见其他教程

狂龙治中 发表于 2016-11-3 10:40:38

mxconstants.h是自动生成的还是自己写的。。。我生成的里里面没有这个。

bigfanofloT 发表于 2016-11-3 13:12:07

狂龙治中 发表于 2016-11-3 10:40
mxconstants.h是自动生成的还是自己写的。。。我生成的里里面没有这个。


自动生成的,在这里

狂龙治中 发表于 2016-11-4 08:31:29

bigfanofloT 发表于 2016-11-3 13:12
自动生成的,在这里

没有啊0.0

bigfanofloT 发表于 2016-11-4 09:19:36

狂龙治中 发表于 2016-11-4 08:31
没有啊0.0

第5张图那里有个user lable.那里需要填写的

tianzuoan 发表于 2016-11-5 16:17:17

用ST-Link可以烧写程序给机智云的STM32吗?需要连接哪几根引脚线的?

bigfanofloT 发表于 2016-11-5 17:43:16

tianzuoan 发表于 2016-11-5 16:17
用ST-Link可以烧写程序给机智云的STM32吗?需要连接哪几根引脚线的?

底部有丝印,用SWD接口,3根线,GND,CLK,DIO

tianzuoan 发表于 2016-11-5 17:51:26

while循环里面LED4 _toggle() Hal_delay(200)..........是不是等同LED4 0N(), Hal_delay(200),LED4 OFF()

tianzuoan 发表于 2016-11-5 17:52:53

LED4 T0ggle();HAL_Delay(200)是不是等同LED4 ON();Hal_delay(200);LED4 0FF()?

tianzuoan 发表于 2016-11-5 18:36:00

bigfanofloT 发表于 2016-11-5 17:43
底部有丝印,用SWD接口,3根线,GND,CLK,DIO

谢谢!!!!!!!!!!!!!!!!!!!!!!!

tianzuoan 发表于 2016-11-8 08:46:44

STM32F103用什么软件烧写的?版主可不可上传?还有具体的烧写引脚接线能不能指导一下?

tianzuoan 发表于 2016-11-8 08:49:57

哦,对了,怎么知道板子上哪个usb借口是下载程序?因为有两个usb。。另外一个usb是不是电源借口

tianzuoan 发表于 2016-11-8 13:55:03

bigfanofloT 发表于 2016-11-8 12:30
丝印为USB TO UART的可以下载程序

谢谢!!!!!!!!!!!!!!!!!!!!

tianzuoan 发表于 2016-11-9 14:45:30

不设置可否?!!!!!!!!!

bigfanofloT 发表于 2016-11-9 17:29:35

tianzuoan 发表于 2016-11-9 14:45
不设置可否?!!!!!!!!!

可以啊,用串口烧录固件也可以
页: [1] 2
查看完整版本: STM32版Gokit零基础开发之GPIO