Bootstrap

江协科技STM32入门教程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

博主在学习STM32的同时,对学习内容做了较为详细的记录,包括理论知识和代码例程,为了方便整理总结,故发表此博客,希望和大家共同学习,共勉!

一、STM32 GPIO口简介

二、GPIO工作模式

2.1 四种输入:

在这里插入图片描述

浮空输入:此端口在默认情况下什么都不接呈高阻态,这种设置在数据传输时用的比较多。

上拉输入:上拉输入模式与浮空输入模式相比,仅仅是在数据通道上部,接入了一个上拉电阻,这个上拉电阻的阻值介于 30K~50K 欧姆,CPU 可以随时在输入数据寄存器的另一端,读出 I/O 端口的电平状态。
这种模式的好处在于我们什么都不输入时,由于内部上拉电阻的原因,处理器会觉得我们输入了高电平,这就避免了不确定的输入。该端口在默认情况下输入为高电平

下拉输入:下拉输入模式与浮空输入模式相比,仅仅是在数据通道上部,接入了一个下拉电阻。与上拉输入模式类似,这种模式的好处在于外部没有输入时,由于内部下拉电阻的原因,我们的处理器会觉得我们输入了低电平
在这里插入图片描述

模拟输入:STM32 的模拟输入通道的配置很简单,信号从 I/O 端口直接进入 ADC 模块。此时所有的上拉、下拉电阻和施密特触发器,均处于断开状态,因此输入数据寄存器将不能反映端口上的电平状态,也就是说,模拟输入配置下,信号不经过输入数据寄存器,CPU 不能在输入数据寄存器上读到有效的数据。该输入模式,使我们可以获得外部的模拟信号。
在这里插入图片描述

2.2四种输出:

在这里插入图片描述

开漏输出:开漏输出不可以直接输出高电平,开漏输出的输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行。

推挽输出:推挽输出可以输出高、低电平,连接数字器件;推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由 IC 的电源决定。
在这里插入图片描述

开漏复用输出:复用,即GPIO口的状态是由片上外设控制的,GPIO 的基本功能是普通的 I/O,而 STM32 有自己的各个功能模块
在这里插入图片描述

二、新建第一个工程

在这里插入图片描述
点击扳手,选择UTF8,防止中文乱码
在这里插入图片描述

三、库函数配置

Library文件:存放库函数
在这里插入图片描述
两个it(interrupt)文件是用来存放中断函数
宏定义:在这里插入图片描述
添加宏定义
库函数:间接配置寄存器

  1. 使能时钟、
  2. 配置端口模式
    在这里插入图片描述
    第一个选择显示哪个GPIO,第二个是参数的结构体
    跳转查看函数介绍
    在这里插入图片描述
    GPIO_InitTypeDef为结构体类型,GPIO_InitStructure为结构体类型定义的变量
    在这里插入图片描述
    开启使能->定义一个名字》选择推挽模式(高低电平)》选择P13口》速度
    GPIO_SetBits选择高电平
    GPIO_ResetBits选择低电平
    结构体定义放在第一行

三、GPIO基本结构

在这里插入图片描述
每个GPIO外设,都有16个引脚,所以只使用低16位
寄存器(32位 )就是特殊的存储器,用于存储数据,内核通过APB2总线对寄存器读写
驱动器用来增加信号的驱动能力
输出寄存器写1,对应引脚输出高电平
输出寄存器写0,对应引脚输出低电平
为了避免引脚悬空导致的输入数据不确定,需要加上上拉电阻或者下拉电阻
上拉输入默认为高电平输入模式
下拉默认为低电平输入模式
开漏模式:输出寄存器中的“0”可激活 N-MOS,而输出寄存器中的“1”会使端口保持高阻态 (Hi-Z)(P-MOS 始终不激活)所以配置为开漏输出外部必须有上拉电阻,一般就面向一些总线设备如IIC。
高阻态(High impedance)表示电路中的某个节点具有相对电路中其他点相对更高的阻抗。通俗的讲,可以看作输出(输入)电阻非常大。它的极限状态可以认为悬空(开路)。也就是说理论上高阻态不是悬空,它是对地或对电源电阻极大的状态。
推挽模式:输出寄存器中的“0”可激活 N-MOS,而输出寄存器中的“1”可激活P-MOS。
施密特触发器:用于对输入电压进行整形,可以有效避免因信号波动造成的输出抖动现象。
施密特触发器(Schmitt trigger)是包含正反馈的比较器电路。
• 当输入电压高于正向阈值电压,输出为高;
• 当输入电压低于负向阈值电压,输出为低;
• 当输入在正负向阈值电压之间,输出不改变,也就是说输出由高电准位翻转为低电准位,或是由低电准位翻转为高电准位时所对应的阈值电压是不同的。只有当输入电压发生足够的变化时,输出才会变化,因此将这种元件命名为触发器。
施密特触发器可作为波形整形电路,能将模拟信号波形整形为数字电路能够处理的方波波形。

四、点亮LED灯

第一步:RCC开启GPIO时钟(时钟相当于GPIO外设心脏)RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
第二步:使用GPIO_Init函数初始化GPIO
在这里插入图片描述

跳转GPIO_Pin的时候,会有多个定义,选择member这一项
在这里插入图片描述
点灯用推挽输出
第三步:使用输出或者输入函数控制GPIO口
在Library找到rcc.h这个文件,在.h文件最下遍,一般都是库函数所有函数声明
最常用的RCC函数:AHB,APB2,APB1
介绍:
这里插入图片描述
GPIO外设:
void GPIO_DeInit(GPIO_TypeDef* GPIOx);调用这个外设后,所指定GPIO外设就会被复位
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
用结构体的参数来初始化GPIO口
一般初始化外设都用INIT函数
GPIO_StructInit,这个函数可以把结构体变量赋一个默认值
在这里插入图片描述
实现读写函数

;