STM32单片机GPIO口配置问题

  在学习STM32F单片机时,我们常常困惑什么时候才能叫入门,采用什么样的教材入门,或者采用什么的编程软件。在学习类的教材中,以神州,原点教材布局很多,但是相信很多人看到这类教材也是一头雾水,需要你花费巨大的精力从寄存器的最底层去学习和了解,学习时间还是相对漫长。在采用的编程软件中,KEIL和IAR各有优势吧,在这里我选用的是KEIL。

  在开始学习编程时,我采用的是库函数开发指南。在安装完成KEIL软件和添加项目工程时,就开始学习库函数编程。

  在编写一个GPIO口控制时,首先我们要知道我们要实现的功能,连接的IO口和怎么配置GPIO口。最常见的以LED举例来说。比如我采用PB13引脚连接LED灯的负极,按照硬件的逻辑需要置位该引脚为低电平,LED才点亮。置位高电平,LED灯熄灭。按照库函数编程的规则,我需要创建一个LED.C和一个LED.H文件,当然,也可以省事,两个不需要创建,创建的好处,方便以后直接移植修改和便于阅读理解。只有main函数中包含LED.H文件,这个头文件才会被调用,LED.C文件需要被添加进来。

  在图示中配置为引脚配置为LED灯控制引脚,在这里GPIO口配置为输出。GPIO口可以灵活配置为输入和输出。输入模式一般为四种,一般为模拟输入,浮空输入,上拉输入和下拉输入模式,也有人认为输入为模拟输入,浮空输入,弱上拉输入,强上拉输入,弱下拉输入和强下拉输入。输出一般开漏输出,推挽输出,复用开漏输出,复用推挽输出。针对输出几种模式这么来理解,开漏输出和推挽输出的最大差别在于开漏输出无法输出高电平,一般需要IO口外部默认为上拉,才能输出高电平。其电平状态要不就是0.要不就是悬空状态(在没有配置外部上拉的情况下)。推挽输出可以输出高电平和低电平。

  对于输出模式的开漏输出,推挽输出,复用开漏输出,复用推挽输出怎么理解复用这二字呢。一个GPIO口若是纯作为GPIO口,则无需考虑复用二字,若是GPIO口配置为串口,I2C,ADC,SPI等等,则是必须要考虑复用二字。

  在对GPIO口进行配置时,我们可以在LED.C文件中对GPIO口进行初始化配置,如下图案例所示:

  void LED_GPIO_Config(void)

  {

  //定义一个GPIO_InitTypeDef类型的结构体

  GPIO_InitTypeDef GPIO_InitStructure;

  //开启GPIO口的外部时钟

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

  //配置GPIO口

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 ;

  //配置为推挽输出

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

  //配置引脚速率50MHz*

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  //调用库函数,初始化GPIOB;

  GPIO_Init(GPIOB, &GPIO_InitStructure);

  //开启LED灯

  GPIO_ResetBits(GPIOB, GPIO_Pin_13 );

  }

  在LED.H文件中,我们需要包含#include "stm32f10x.h"和void LED_GPIO_Config(void);即可。当然也可以写一些内联函数,主要是关于GPIO口高低电平的配置。在头文件中,切记只能出现include,DEFINE,VOID等函数,不能出现类似于U8,U32等函数。

  随后我们在main函数中可以通过SET或RESET对GPIO口进行高低电平配置。当然也可以在LED.H头文件写一些内联函数,如1,0或者ON,OFF定义高低电平,然后在main函数中直接调用。

分享一些stm32相关的资料给有需要的朋友

(stm32串口应用)
http://www.makeru.com.cn/live/1392_1164.html?s=45051

通信协议 - UART串口协议
http://www.makeru.com.cn/live/3576_1437.html?s=45051
stm32之SPI通信
http://www.makeru.com.cn/live/3523_1795.html?s=45051

(stm32直流电机驱动)
http://www.makeru.com.cn/live/1392_1218.html?s=45051

原文地址:https://www.cnblogs.com/111111lbj/p/11378091.html

时间: 2024-08-01 13:52:17

STM32单片机GPIO口配置问题的相关文章

51单片机GPIO口模拟串口通信

51单片机GPIO口模拟串口通信 标签: bytetimer终端存储 2011-08-03 11:06 6387人阅读 评论(2) 收藏 举报 本文章已收录于: 分类: 深入C语言(20) 作者同类文章X 1 #include "reg52.h" 2 #include "intrins.h" 3 #include "math.h" 4 #include "stdio.h" 5 sbit BT_SND =P1^5; 6 sbit

STM32系列单片机IO口模式设置

STM32单片机的每组IO口都有4个32位配置寄存器用于配置GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR和GPIOx_PUPDR,2个32位数据寄存器用于配置输入和输出寄存器GPIOx_IDR和GPIOx_ODR,1个32位置位复位寄存器GPIOx_BSRR,1个32位锁定寄存器GPIOx_LCKR和2个32位复用功能选择寄存器GPIOx_AFRH和GPIOx_AFRL. GPIO的输出状态可以配置为推挽或开漏加上上拉或下拉.输出数据既可以来自输出数据寄存器,

stm32寄存器版学习笔记01 GPIO口的配置(LED、按键)

STM32的I/O口可以由软件配置成如下8种模式:输入浮空.输入上拉.输入下拉.模拟输入.开漏输出.推挽输出.推挽式复用功能及开漏复用功能.每个I/O口由7个寄存器来控制:配置模式的端口配置寄存器CRL和CRH(模式.速度):数据寄存器IDR和ODR:置位/复位寄存器BSRR:复位寄存器BRR:锁存寄存器LCKR. I/O口模式: GPIO的8种模式 通用输出 推挽输出(Puch-Pull) 可以输出高.低电平,连接数字器件   开漏输出(Open-Drain) 开漏引脚不连接外部的上拉电阻时,

关于STM32中GPIO的8种工作模式

1 综述 I/O口是单片机中非常常用的外设,STM32的I/O口有8种状态,虽然一直在使用过程中没有遇到什么问题,但是一直都不是很清楚,因此这里做一个总结(实际上这里的概念也是和STM8等其他单片机,理解了这8中状态,也就基本上理解了大部分I/O口). 2 庐山真面目 我们在库文件中的"stm32f10x_gpio.h"中可以看到如下代码: typedef enum { GPIO_Mode_AIN = 0x0, ??GPIO_Mode_IN_FLOATING = 0x04, ??GPI

STM32单片机在Keil5下仿真的若干问题解决

STM32单片机在Keil5下仿真的若干问题解决 最近看了视频,里面有仿真,可以清楚看到GPIO口的数据变化,也想尝试下,DUG时却出现*** error 65: access violation at 0x40021000 : no 'read' permission,按照网上给的各种办法,包括修改memory map,以及其他各种办法,都无法解决,后来发现问题在下面这张图所示的位置: 这个图上红色框中的两个参数是我修改之后的,原来的值是软件安装之后的默认值: Dialog DLL默认是DCM

STM32单片机学习(11) DS18B20温度传感器实验

STM32单片机学习(11) DS18B20温度传感器实验 本程序主要实现 DS18B20温度传感器数据获取,并利用串口通信把温度数据传至计算机 注:使用普中科技开发板测试时,需要拔掉Boot1插口,因为用到的是PA15管脚, 由开发板电路图可知,需要改变PA15 管脚的映射,将其设置成普通IO口 参考资料 DS18B20中文手册.pdf   http://download.csdn.net/detail/leytton/7742193 STM32-外设篇 视频教程(Cortex-M3)-主讲人

【转载】stm32的GPIO八种工作模式

一.推挽输出:可以输出高.低电平,连接数字器件:推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止.高低电平由IC的电源决定.         推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小.效率高.输出既可以向负载灌电流,也可以从负载抽取电流.推拉式输出级既提高电路的负载能力,又提高开关速度. 二.开漏输出:输出端相当于三极管的集电极,要得

stm32之GPIO

stm32有5组GPIO口,GPIOA GPIOB GPIOC GPIOD GPIOE 每个GPIO端口有: 2个配置寄存器GPIOx_CRL, GPIOx_CRH(32位): 2个数据寄存器GPIOx_IDR, GPIOx_ODR(32位): 1个置位/复位寄存器GPIOx_BSRR(32位): 1个复位寄存器GPIOx_BRR(16位): 1个锁定寄存器GPIOx_LCKR(32位): 输入模式: —输入浮空 ─ 输入上拉 ─ 输入下拉 ─ 模拟输入 输出模式: ─ 开漏输出 ─ 推挽式输出

STM32的IO口的8种配置

STM32的IO口的8种配置 1 STM32的输入输出管脚有下面8种可能的配置:(4输入+2输出+2复用输出) ① 浮空输入_IN_FLOATING ② 带上拉输入_IPU ③ 带下拉输入_IPD ④ 模拟输入_AIN ⑤ 开漏输出_OUT_OD ⑥ 推挽输出_OUT_PP ⑦ 复用功能的推挽输出_AF_PP ⑧ 复用功能的开漏输出_AF_OD 1.1 I/O口的输出模式下,有3种输出速度可选(2MHz.10MHz和50MHz),这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信