第一讲 基于STM32CubeMX的STM32F103流水灯教程(新手借个地方做笔记)

第一讲 基于STM32CubeMX的STM32F103流水灯教程(新手借个地方做笔记)
一、了解GPIO结构
第一讲 基于STM32CubeMX的STM32F103流水灯教程(新手借个地方做笔记)_第1张图片
二、GPIO的工作模式
GPIO有8种工作模式
第一讲 基于STM32CubeMX的STM32F103流水灯教程(新手借个地方做笔记)_第2张图片
1.输入浮空
当GPIOx_ CRL 或GPIOx_CRH 寄存器的CNF[1:0]位设置为01,并且MODE[1:O]位设置为00时,对应引脚被设置为浮空输入模式,该模式也是STM32复位之后默认模式。浮空输入模式是相对与上拉或者下拉输入模式,浮空就是不上拉也不下拉。浮空输入模式下GPIO结构中信号流向见图11-2。
第一讲 基于STM32CubeMX的STM32F103流水灯教程(新手借个地方做笔记)_第3张图片
I/O引脚信号接入到施密特触发器的输入端,在每来一个APB2时钟脉冲就把输入端的信号传输到触发器的输出端,施密特触发器的输出端又是与输入数据寄存器(GPIOx_IDR)连通的,所以该数据就保存在输入数据寄存器内,寄存器本身就是一个存储单元(起到缓冲区效果),所以输入数据寄存器保存着I/O引脚电平。
2.输入上拉模式
输入上拉模式就是在浮空输入模式基础上使能输入电路中的上拉开关,该开关由输出数据寄存器(GPIOx_ODR)引脚对应位设置为1来使能。输入上拉模式下GPIO结构中信号流向见图11-3。
第一讲 基于STM32CubeMX的STM32F103流水灯教程(新手借个地方做笔记)_第4张图片
3.输入下拉模式
输入下拉模式也是在浮空输入模式基础.上使能了输入电路中的下拉开关,该开关由输出数据寄存器(GPIOx_ODR)引脚对应位设置为0来使能。输入下拉模式下GPIO结构中信号流向见图11-4。
第一讲 基于STM32CubeMX的STM32F103流水灯教程(新手借个地方做笔记)_第5张图片
4.模拟输入模式
当STM32需要进行AD(模数)转换时,需要把引脚设置为模拟输入模式,该模式需要配合ADC外设使用,否则没有意义。模拟输入模式下GPIO结构中信号流向见图11-5。
第一讲 基于STM32CubeMX的STM32F103流水灯教程(新手借个地方做笔记)_第6张图片
此时,GPIO 完全只是一个通路,最后信号流入到AD转换电路中,更具体在AD转换章节介绍。
5.开漏通用输出模式
通用输出模式就是做为普通用途的输出模式,比如简单地控制引脚输出高低电平。GPIO的输出是由一个PMOS管和一个NMOS管组合形成的反相器驱动。开漏电路概念中的“漏”是指MOS管的漏极(D),实际只是利用到NMOS管,PMOS管在开漏模式下是没有用到的,开漏通用输出模式下GPIO结构中信号流向见图11-6。
第一讲 基于STM32CubeMX的STM32F103流水灯教程(新手借个地方做笔记)_第7张图片
目的:控制I/O引脚开漏输出高电平。STM32实际流程: CPU把端口位设置/清除寄存器(GPIOx_ BSRR)引脚对应外设置为1,然后驱动端口输出数据寄存器(GPIOx_ ODR)对应位为1,实际上也可以让CPU直接GPIOx_ ODR 寄存器引脚对应位写入1。GPIOx_ODR寄存器通过一个选择电路(与复用功能输出做选择)后输入到输出控制电路,经过输出控制电路后在NMOS控制线输出低电平,这时NMOS管截止(PMOS管不被激活),引脚呈高阻状态,不会有电流流动。
目的:控制I/0引脚开漏输出低电平。STM32实际流程:CPU把端口位设置/清除寄存器(GPIOx_BSRR)或者端口位清除寄存器(GPIOx_BRR)引脚对应外设置为1,然后驱动输出数据寄存器(GPIOx_ODR)对应位为0,实际上也可以让CPU直接往GPIOx_ODR寄存器引脚对应位写入0。GPIOx_ODR寄存器通过一个选择电路(与复用功能输出做选择)后输入到输出控制电路,经过输出控制电路后在NMOS控制线输出高电平,这时NMOS管导通(PMOS管不被激活),引脚呈低电平状态,允许有电流从引脚流入。另外,整个过程施密特触发输入是被激活的,出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器,对输入数据寄存器的读访问可得到I/O状态。
6.推挽通用输出模式
推挽输出与开漏输出原理理解都是差不多的,不同的重点在于输出控制电路驱动反相器的不同,就是推挽输出把PMOS管和NMOS管都用上了,开漏输出只用了NMOS管,PMOS管完全不用。推挽通用输出模式下GPIO结构中信号流向见图11-7。
第一讲 基于STM32CubeMX的STM32F103流水灯教程(新手借个地方做笔记)_第8张图片
对于推挽输出模式,CPU对端口位设置/清除寄存器、端口输出数据寄存器操作都是与开漏输出一样的过程,只有在输出控制电路对反相器的控制不同。需要控制I/O引脚推挽模式输出1。此时数据输出寄存器(GPIOx_ODR)输出1,该信号输入到输出控制电路,之后输出控制电路在PMOS控制线输出低电平,此时PMOS管导通,同时在NMOS控制器输出低电平,此时NMOS管截止,最终I/O引脚呈高电平状态,如果构成回路可以有电流从引脚流出。
需要控制I/O引脚推挽模式输出0。此时数据输出寄存器(GPIOx_ODR)输出0,该信号输入到输出控制电路,之后输出控制电路在PMOS控制线输出高电平,此时PMOS管截止,同时在NMOS控制器输出高电平,此时NMOS管导通,最终I/O引脚呈低电平状态,如果构成回路可以有电流从引脚流入。在推挽输出模式下,也是可以在端口输入数据寄存器读取到当前I/O引脚状态的。
7.推挽复用功能输出模式
一个I/O引脚可以做为普通的IO接口,还可以做为其他外设的特殊功能引脚,有些引脚可能有4、5种不同功能,这种现象就叫做复用。引脚复用为特殊功能引脚,那引脚状态就由该外设决定,在推挽复用功能输出模式是引脚信号流向具体见图11-8。
第一讲 基于STM32CubeMX的STM32F103流水灯教程(新手借个地方做笔记)_第9张图片
原理分析参考推挽输出模式就好,此处不再啰嗦。
8.开漏复用功能输出模式
第一讲 基于STM32CubeMX的STM32F103流水灯教程(新手借个地方做笔记)_第10张图片
三、STM32CubeMX生成
1.点击File/New Project。
第一讲 基于STM32CubeMX的STM32F103流水灯教程(新手借个地方做笔记)_第11张图片
2.点开Core,选择M3
第一讲 基于STM32CubeMX的STM32F103流水灯教程(新手借个地方做笔记)_第12张图片
3.点开Series,选择STM32F1。
第一讲 基于STM32CubeMX的STM32F103流水灯教程(新手借个地方做笔记)_第13张图片
4.以此类推,Line/STM32F1103
Package/LQFP144
5.双击选择STMF103ZE
第一讲 基于STM32CubeMX的STM32F103流水灯教程(新手借个地方做笔记)_第14张图片
6.选择RCC
第一讲 基于STM32CubeMX的STM32F103流水灯教程(新手借个地方做笔记)_第15张图片
7.选择LED灯引脚PB5、PE5,并分别设置为GPIO_Output模式。
第一讲 基于STM32CubeMX的STM32F103流水灯教程(新手借个地方做笔记)_第16张图片
8.点开System Core/GPIO,将引脚参数设置为下图
第一讲 基于STM32CubeMX的STM32F103流水灯教程(新手借个地方做笔记)_第17张图片
9.时钟树设置
第一讲 基于STM32CubeMX的STM32F103流水灯教程(新手借个地方做笔记)_第18张图片
9.命名工程,保存到对应路径。
第一讲 基于STM32CubeMX的STM32F103流水灯教程(新手借个地方做笔记)_第19张图片
10.点开Code Generator,将Generated files 栏中的第一栏打钩,点击右上方的GENERATE CODE,完成工程创建。
第一讲 基于STM32CubeMX的STM32F103流水灯教程(新手借个地方做笔记)_第20张图片
11.打开keil软件,按照路径打开GPIO_LED工程,在main.c文件写程序第一讲 基于STM32CubeMX的STM32F103流水灯教程(新手借个地方做笔记)_第21张图片

你可能感兴趣的:(第一讲 基于STM32CubeMX的STM32F103流水灯教程(新手借个地方做笔记))