历史上的今天
返回首页

历史上的今天

今天是: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


推荐阅读

史海拾趣

Fronter Electronics Co Ltd公司的发展小趣事

随着工业4.0时代的到来,Fronter电子积极响应智能制造的号召,开始引进先进的生产设备和技术,打造智能化生产线。通过实施精益生产和全面质量管理(TQM),Fronter电子实现了生产效率的显著提升和产品质量的持续优化。此外,公司还加大了对环保技术的投入,确保所有产品均符合RoHS、REACH等环保标准。这些努力不仅提升了Fronter电子的市场竞争力,还为其可持续发展奠定了坚实基础。

Bharat Electronics Ltd公司的发展小趣事

随着技术的不断积累和发展,BEL逐渐摆脱了对外部技术的依赖,开始自主研发和生产电子产品。公司不仅成功开发出一系列具有自主知识产权的产品,还打造了知名的BEL品牌。这些产品以其高性能、高可靠性在市场中赢得了广泛认可,使BEL成为印度乃至全球电子行业中的佼佼者。

Hi-Tech Resistors Pvt Ltd公司的发展小趣事

随着市场的不断变化和竞争的加剧,BEL并未满足于现状,而是积极寻求多元化发展。公司不仅拓展了原有的军事电子领域,还涉足电信、运算、公共运输和广播等多个行业。同时,BEL还积极拓展全球市场,将产品出口到多个国家和地区,实现了从区域性企业向全球性企业的跨越。

ENSIGN公司的发展小趣事

ENSIGN不仅局限于照明领域,还积极向能源服务领域拓展。近年来,ENSIGN通过技术创新和战略合作,为客户提供定制化的电源解决方案。例如,在2009年,ENSIGN建成了新的工厂,并与多家本地供应、装配和测试组织建立了合作关系,以提供更高质量、更可靠的产品和服务。

Excelitas公司的发展小趣事

随着技术的不断成熟和市场的扩大,Excelitas公司开始寻求全球扩张。公司先后在北美、欧洲和亚洲设立了研发中心和生产基地,以更好地服务全球客户。在全球扩张的过程中,Excelitas注重本土化战略,积极与当地企业合作,共同开拓市场。这一策略不仅帮助公司快速融入当地市场,还促进了公司业务的持续增长。

Hi-G Relays公司的发展小趣事

Excelitas公司自成立以来,一直致力于光电技术的研发与创新。在某次关键的技术突破中,公司成功研发出一种新型高效能LED灯,这种灯在紫外光固化领域具有显著优势。这一技术突破不仅为公司赢得了市场份额,还确立了Excelitas在光电领域的领先地位。公司随后围绕这一技术,推出了一系列相关产品,进一步巩固了市场地位。

问答坊 | AI 解惑

如何给单片机IO口输入安全有效的高电平

我想给单片机IO口输入一个高电平作为一个输入信号,可我不知道怎么输入才安全,请赐教!…

查看全部问答>

I2C总线应用系统设计 [绝版]

基本信息     * 作者: 何立民        * 丛书名: 单片机应用技术丛书     * 出版社:北京航空航天大学出版社     * 出版日期:2002 年9月     * 开本:16开     * ...…

查看全部问答>

求ads 1.2 for arm 的下载地址

求ads 1.2  for arm 的下载地址…

查看全部问答>

.eep文件怎么烧写

我用的ATMEGA16单片机,内部EEPROM的初始化文件也就是.eep文件怎么烧写啊?用的是TOP2007 programmer,有没有办法把eep文件和程序的hex文件合并一块烧?谁有类似的经验啊?急需,谢谢!…

查看全部问答>

如何将WCE程序部署到设备上去?

各位老兄好.小弟刚刚WCE入门.我写的wce的程序,用EVC开发,安装了WINCE5.0的SDK,程序在模拟器上运行正常(一个简单的HELLO WORLD的程序).但我现在却没有办法把程序弄到我的WINCE的硬件设备上来运行啊. EVC 的工具栏上选择为: STANDARDSDK_500  ...…

查看全部问答>

STM32的ADC采样GPIO针脚电阻多大?

想问一下用来做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、进行噪声分析前,我们需要知道运放噪声模型。本书 ...…

查看全部问答>