历史上的今天
今天是:2025年07月09日(星期三)
2018年07月09日 | STM32F1x系列——GPIO操作
2018-07-09 来源:eefocus
GPIO 即通用输入输出口。凡事都要熟悉,熟能生巧。一定要掌握MDK软件的工程操作方法。
对于GPIO的操作。
Project里面要有以下几个文件夹(开发之前需要包含相应的库文件,这里默认已经包含)

STEP BY STEP(以按键和LED灯为例):
1.在USER文件夹里新建对应功能的C文件和H文件(这里对应 Key.c Key.h LED.c LED.h)其中C文件用来进行对应外设的硬件配置,H文件是申明对应C文件里面定义的配置函数。注意H文件开头要检查以下时候需要检查以下重复定义的情况, 如下:
#ifndef __EXTI_H
#define __EXTI_H
2.下面重点总结下功能C文件里面对应外设的硬件配置过程。
STEP1:建立数据结构,配置工作时钟
STM32这种单片机和51单片机的很大不同就是,对应不同功能的硬件有相应的工作时钟与其对应。这个时钟是必不可少的,就像人的心脏一样。
先建立数据结构GPIO_InitTypeDef GPIO_InitStructure;
然后配置时钟,RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
可能每次你都不清楚,为什么硬件配置要那么来,从库开发的角度来说,要学会去看库的帮助文件,打开之后找到Data Structure这一块,找到对应的GPIO的数据结构。
而库开发不同关于寄存器开发的地方是,库是间接的用数据结构去填充寄存器。所以首先得要有这个对应的数据结构,也就是这里的 GPIO_InitStructure;

打开帮助中GPIO_InitTypeDef 这个结构体,里面的变量结构就可以看出来,分别是:管脚(pin),速度(speed),工作模式(Mode)
00091 typedef struct
00092 {
00093 uint16_t GPIO_Pin; /*!< Specifies the GPIO pins to be configured.
00094 This parameter can be any value of @ref GPIO_pins_define */
00095
00096 GPIOSpeed_TypeDef GPIO_Speed; /*!< Specifies the speed for the selected pins.
00097 This parameter can be a value of @ref GPIOSpeed_TypeDef */
00098
00099 GPIOMode_TypeDef GPIO_Mode; /*!< Specifies the operating mode for the selected pins.
00100 This parameter can be a value of @ref GPIOMode_TypeDef */
00101 }GPIO_InitTypeDef;
然后依照每个变量的值的情况进行赋值如:GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;其实在GPIO_InitStructure结构体中的变量都是枚举型的,也就是说它的值都是一定的,是个常数。
void GPIO_Init
(
GPIO_TypeDef *
GPIOx,
GPIO_InitTypeDef*
GPIO_InitStruct
)
2.初始化寄存器(数据结构映射到寄存器中)
到这里还没有好,这一步仅仅是把你申明的一个结构体变量的每个部分确定了,还没有映射到寄存器中去,那么怎么映射到寄存器中去呢?库开发早就已经设计了一个映射的功能函数在帮助里面可以看到,这个函数的用法如:GPIO_Init(GPIOC, &GPIO_InitStructure);
View Code
View Code
结论:
GPIO的设置分为四步
1.申明结构体 GPIO_InitTypeDef GPIO_InitStructure;
2.设置时钟 RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);
3.结构体赋值 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
4.初始化寄存器 GPIO_Init(GPIOC, &GPIO_InitStructure);
设置多个GPIO的时候,如果Mode和Speed都是一样的,就只可以设置一次就行。
参考:http://blog.chinaaet.com/cpb0508/p/5100018550
史海拾趣
|
基本信息 * 作者: 何立民 * 丛书名: 单片机应用技术丛书 * 出版社:北京航空航天大学出版社 * 出版日期:2002 年9月 * 开本:16开 * ...… 查看全部问答> |
|
我用的ATMEGA16单片机,内部EEPROM的初始化文件也就是.eep文件怎么烧写啊?用的是TOP2007 programmer,有没有办法把eep文件和程序的hex文件合并一块烧?谁有类似的经验啊?急需,谢谢!… 查看全部问答> |
|
各位老兄好.小弟刚刚WCE入门.我写的wce的程序,用EVC开发,安装了WINCE5.0的SDK,程序在模拟器上运行正常(一个简单的HELLO WORLD的程序).但我现在却没有办法把程序弄到我的WINCE的硬件设备上来运行啊. EVC 的工具栏上选择为: STANDARDSDK_500 ...… 查看全部问答> |
|
想问一下用来做ADC采样的GPIO针脚设为 Analog input的时候电阻有多少? RM0008里面只说有weak puul-down or weak pull-up却没有说他们的电阻有多少… 查看全部问答> |
|
单片微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller Unit MCU)它最早是被用在工业控制领域。单片机大家都不陌生,但是对单片机有一个很深入的了解却不容易,小编通过整理一些单片机教程,整理出单片机教程之单片机的内外部 ...… 查看全部问答> |
|
【设计工具】赛灵思的功耗评估工具已经推出便携版本(IPhone Andriod) 赛灵思的功耗评估工具已经推出便携版本了。现已经支持IOS和Android平台的便携设备。都是免费的。具体下载地址如下。赛灵思功耗评估工具(便携版)-foriphone、ipadhttp://itunes.apple.com/us/app/xilinx-pocket-power-estimator/id466189295?mt=8 ...… 查看全部问答> |
|
请问有没有基于zigbee技术的景观路灯无线控制的公司或者方案 最近公司有规划一个景观路灯(RGB彩色)的案子,需要在16公里内zigbee无线控制,传输数据等要求(包含控制开关,下载制作好的节目,监控等功能)找了好多方案好像都不行,很多最大只支持到9.6公里。有没有这样一个方案或者产品的?… 查看全部问答> |
|
本帖最后由 dontium 于 2015-1-23 11:22 编辑 第二章 运放噪声简介1、阐述运放噪声分析技术的目标:根据运放规格书上的信息来计算出运放电路的峰峰值输出噪声。说白了就是计算出噪声的峰峰值。2、进行噪声分析前,我们需要知道运放噪声模型。本书 ...… 查看全部问答> |




