(学习日记)2023.04.28

写在前面:
由于时间的不足与学习的碎片化,写博客变得有些奢侈。
但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。
既然如此
不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录,记录笔者认为最通俗、最有帮助的资料,并尽量总结几句话指明本质,以便于日后搜索起来更加容易。


标题的结构如下:“类型”:“知识点”——“简短的解释”
部分内容由于保密协议无法上传。


点击此处进入学习日记的总目录

2023.04.28

  • 一、`STM32` 特点
    • 1、什么是`stm32`
      • (1)特点
      • (2)优势
    • 2、`Cortex`内核
      • (1)架构
      • (2)特点
    • 3、`Cortex-M4`的低功耗设计
    • 4、`Cortex-M`家族:`STM32`8大系列产品
    • 5、`STM32`命名规则
      • STM32与ARM之间的关系
      • STM32系列产品的分类命名规则
  • 二、开发环境搭建
    • 1、`MDK`软件安装
      • (1)`MDK`是什么?
      • (2)下载
      • (3)安装
      • (4)注意事项
    • 2、USB串口驱动安装
      • (1)驱动下载
      • (2)双击`SETUP.EXE`,点击安装
    • 3、`ST-LINK`安装
      • (1)双击`dpinst_amd64.exe`安装
      • (2)安装成功
  • 三、ST-LINK下载
    • 1、硬件连接
      • (1)`JTAG/SWD接口`
      • (2)连接`ST-LINK`
    • 2、配置`ST-LINK`
      • (1)打开选项
      • (2)修改仿真器
      • (3)修改传输设置
      • (4)修改程序编译设置
      • (5)选择对应板子的工程
      • (6)配置Flash菜单命令
  • 四、新建寄存器工程模板
    • 1、找到`STM32CubeFX`固件包(`X`为板子的型号)
    • 2、新建工程目录,复制需要的文件到工程目录
    • 3、把工程需要的文件添加到工程
    • 4、在MDK中设置头文件存放路径
    • 5、配置MDK:全局宏定义等
    • 6、编写用户函数
    • 7、添加`ALIENTEK`系统文件夹`SYSTEM `
    • 8、导入到开发板
  • 五、初学HAL库
    • 1、固件库和寄存器的区别
    • 2、HAL库包和关键文件介绍
  • 六、新建HAL库工程模板
    • 1、找到`STM32CubeFX`固件包(`X`为板子的型号)
    • 2、新建工程目录,复制需要的文件到工程目录
    • 3、新建工程
    • 4、在MDK中设置头文件存放路径
    • 5、配置MDK:全局宏定义等
    • 6、编写用户函数
    • 7、修改修改相关文件参数适配开发板
    • 8、添加`ALIENTEK`系统文件夹`SYSTEM `
    • 9、导入到开发板
  • 七、`GPIO`基础知识
    • 1、`GPIO`介绍
    • 2、`GPIO`八种工作模式解释(`STM32`)
      • 1)4种输入模式
        • (1)浮空输入
        • (2)上拉输入
        • (3)下拉输入
        • (4)模拟输入
      • 2)4种输出模式(带上下拉)
        • (1)开漏输出(带上拉或者下拉)
        • (2)复用开漏输出(带上拉或者下拉)
        • (3)推挽式输出(带上拉或者下拉)
        • (4)复用推挽输出(带上拉或者下拉)
      • 3)八种工作模式的区别
        • (1)什么是推挽结构和推挽电路?
        • (2)开漏输出和推挽输出的区别?
        • (3)在STM32中选用怎样选择I/O模式?
        • (4)STM32 设置实例:
      • 4)IO 端口复用功能配置:
      • 5)上电复位后IO口状态
    • 3、开发板芯片的引脚常用参数
  • 八、STM32CubeMX创建工程
    • 1、安装
    • 2、创建工程

一、STM32 特点

1、什么是stm32

新的基于ARM内核的32位MCU系列,内核为 Cortex-M 内核,是标准的ARM架构

(1)特点

  • 高性能
  • 低电压
  • 低功耗
  • 创新的内核以及外设
  • 简单易用
  • 自由
  • 低风险

(2)优势

  • 极高的性能: 主流的Cortex内核。
  • 丰富合理的外设,合理的功耗,合理的价格。
  • 强大的软件支持:丰富的软件包。
  • 全面丰富的技术文档。
  • 芯片型号种类多,覆盖面广。
  • 强大的用户基础:最先成功试水CM4芯片的公司,积累了大批的用户群体,为其领先做铺垫。

2、Cortex内核

(1)架构

Cortex-M:微控制器,频率不是很高,常用于工业与控制,追求的是稳定可靠,寿命长;STM32作为代表经典系列:ARM7ARM9ARM 11

Cortex-M4采用ARMv7-ME架构

ARMv7架构定义了三大分工明确的系列:

  • “A”系列:面向尖端的基于虚拟内存的操作系统和用户应用
  • “R”系列:针对实时系统
  • “M”系列:针对微控制器

Cortex-M3采用ARMv7-M架构,Cortex-M0采用ARMv6-M架构,Cortex-A5/A8采用ARMv7-A架构, 传统的ARM7系列采用的是ARMv4T架构。

ARMv7-ME架构是2007年以后才出现的架构,所以最近的板子一般都是采用Cortex内核。
(学习日记)2023.04.28_第1张图片

(2)特点

  • 浮点运算能力
  • 增强的DSP处理指令

(学习日记)2023.04.28_第2张图片

3、Cortex-M4的低功耗设计

(学习日记)2023.04.28_第3张图片

4、Cortex-M家族:STM328大系列产品

(学习日记)2023.04.28_第4张图片

5、STM32命名规则

STM32与ARM之间的关系

ARM是英国的一家芯片设计公司,其最成功的产品莫过于32位嵌入式CPU核——也就是我们现在介绍的ARM系列,而且最常用的是ARM7和ARM9,ARM公司主要提供IP(Intellectual Property core知识产权的核心)核,就是CPU的内核结构,只包括最核心的部分,而不是完整的处理器。ARM把这个核卖给各大半导体公司,如飞利浦、三星、ATMEL,甚至Intel等许多公司。ARM为了提高对于8位机市场的竞争力,推出了一系列 Cortex-M核,STM32就是将Cortex-M作为内核,通过一些外设等组合封装在一起就成了如今流行的32位嵌入式处理器。

ARMv7架构定义了三个面向不同应用场合的系列:

“A”系列:面向基于虚拟内存的操作系统和用户应用;
“R”系列:针对实时系统;
“M”系列:面向微控制器。

(学习日记)2023.04.28_第5张图片

STM32系列产品的分类命名规则

ST:意法半导体,是一个公司的名字。

M:Microelectronics的缩写,表示微控制器,要注意微控制器和微处理器的区别。

32:32bit的意思,表示这是一个32bit的微控制器。
(学习日记)2023.04.28_第6张图片

二、开发环境搭建

1、MDK软件安装

(1)MDK是什么?

RealView MDKKeil公司开发的,为基于CortexARM7ARM9等处理器设备提供的一个完整的开发环境。

MDK=Keil for ARM, 大家学习51的时候就会用到Keil C51

(2)下载

  1. MDK安装包
    即下载Keil软件
    官网下载地址:点击进入

(注:因为是非注册版,所以只能编译不超过32K的代码!!超过32K需要注册,请大家购买正版软件使用。)
点赞获取破解版:---- 破解软件下载密码9ju6 ----------安装教程

  1. 芯片支持包
    即下载板子对应芯片支持包(pack文件)
    官网下载地址:点击进入

(3)安装

  1. 找到MDKexe文件,右键管理员安装。
    (学习日记)2023.04.28_第7张图片
  2. 安装路径不能有空格中文
    (学习日记)2023.04.28_第8张图片
  3. 四个框随便输入,然后NEXT等待几分钟
    (学习日记)2023.04.28_第9张图片
  4. 安装完成后点击FINISH,回到刚才文件目录,双击pack文件,继续等待几分钟的安装。
    (学习日记)2023.04.28_第10张图片

(注:不知道为什么第一次安装pack文件显示无法创建文件夹,我打开一了下keil软件又关闭后又可以继续安装了,属实玄学)

(4)注意事项

  • 安装路径为英文路径(不要是中文路径)。
  • 系统用户名不能为中文。
  • 多个版本MDKKeil)不要安装在同一目录。
  • MDK5需要加载芯片对应的支持包。

2、USB串口驱动安装

(1)驱动下载

下载链接: 点击进入

(2)双击SETUP.EXE,点击安装

(学习日记)2023.04.28_第11张图片
在这里插入图片描述
如果出现安装失败或者预安装,将电脑与板子串口连接,当电脑显示有东西插进来了,再次安装,即可成功。
(学习日记)2023.04.28_第12张图片

3、ST-LINK安装

(1)双击dpinst_amd64.exe安装

(学习日记)2023.04.28_第13张图片

(2)安装成功

(学习日记)2023.04.28_第14张图片
插上STLINK在设备管理器中可以看到驱动。
在这里插入图片描述

(注:若出错,请参考按照STLINK调试补充教程.pdf
由于此pdf仅限个人使用,故无法上传,请诸位移步正点原子官网下载)

三、ST-LINK下载

1、硬件连接

(1)JTAG/SWD接口


这是开发板板载的20针标准JTAG调试口,该JTAG口直接可以和ULINKJLINK (V9或者以上版本) 或者STLINK等调试器(仿真器)连接,同时由于STM32支持SWD调试,这个JTAG口也可以用SWD模式来连接。

用标准的JTAG调试,需要占用5个IO口,有些时候,可能造成IO口不够用,而用SWD则只需要2个IO口,大大节约了IO数量,但他们达到的效果是一样的,所以我们强烈建议仿真器使用SWD模式。

(2)连接ST-LINK

ST-LINK插在JTAG/SWD接口上,按照STM32笔记二所述方法安装驱动。

2、配置ST-LINK

(1)打开选项

(学习日记)2023.04.28_第15张图片

(2)修改仿真器

  • 点击Debug
  • 选择ST-Link Debugger
  • Run to main()选中
  • 点击Settings
    (学习日记)2023.04.28_第16张图片
    (学习日记)2023.04.28_第17张图片

(3)修改传输设置

具体设置如图:
(学习日记)2023.04.28_第18张图片

(4)修改程序编译设置

  • 点击sector erase(块擦除)
  • 右边的编程验证复位和执行都要选上

在这里插入图片描述

(5)选择对应板子的工程

(学习日记)2023.04.28_第19张图片

(6)配置Flash菜单命令

Use Debug Driver(使用调试驱动程序)、Update Target before Debugging(调试前更新目标)两个选项选中
(学习日记)2023.04.28_第20张图片

四、新建寄存器工程模板

1、找到STM32CubeFX固件包(X为板子的型号)

将固件包解压
(学习日记)2023.04.28_第21张图片
(学习日记)2023.04.28_第22张图片

2、新建工程目录,复制需要的文件到工程目录

  1. 新建一个文件夹,在文件夹中新建一个USER文件夹和一个HEADER文件夹
    (学习日记)2023.04.28_第23张图片

  2. USER文件夹里新建一个工程
    (学习日记)2023.04.28_第24张图片
    (学习日记)2023.04.28_第25张图片

  3. 按照自己板子的型号来选择创建类型
    (学习日记)2023.04.28_第26张图片

  4. 环境选项中选择Cancel
    (学习日记)2023.04.28_第27张图片

  5. 会发现文件夹中出现了一些文件,其中uvprojx是打开文件
    (学习日记)2023.04.28_第28张图片

3、把工程需要的文件添加到工程

  1. 在固件包中找到图片中的文件
    (学习日记)2023.04.28_第29张图片
  2. startup_stm32f767xx.s放到USER文件夹中,
    将其余h文件放到HEADER文件夹中。
    (学习日记)2023.04.28_第30张图片
    (学习日记)2023.04.28_第31张图片

4、在MDK中设置头文件存放路径

  1. 打开文件管理器,并将启动文件startup_stm32f767xx.s)导入
    (学习日记)2023.04.28_第32张图片
    (学习日记)2023.04.28_第33张图片
  2. 如果文件头像上有钥匙,就将启动文件startup_stm32f767xx.s)的只读属性取消勾选。
    (学习日记)2023.04.28_第34张图片
    (学习日记)2023.04.28_第35张图片
    (学习日记)2023.04.28_第36张图片
  3. 将头文件文件夹导入
    (学习日记)2023.04.28_第37张图片
    (学习日记)2023.04.28_第38张图片

注:软件不会沿着目录向下寻找,所以所有头文件必须精确到根目录)

5、配置MDK:全局宏定义等

根据不同的板子、不同的工程将不同的预编译全局宏定义标识符输入
(学习日记)2023.04.28_第39张图片

6、编写用户函数

  1. USER创建一个txt,把后缀改成.c
    (学习日记)2023.04.28_第40张图片
  2. 将.c文件导入
    (学习日记)2023.04.28_第41张图片
    (学习日记)2023.04.28_第42张图片
    (学习日记)2023.04.28_第43张图片
  3. 程序需注意的地方
    (1)程序末尾必须要有回车
    (2)由于程序默认在复位后运行SystemInit()函数,所以要么将SystemInit()函数注释掉,要么在main()函数前加一个空的SystemInit()函数。
    (学习日记)2023.04.28_第44张图片
    (学习日记)2023.04.28_第45张图片

7、添加ALIENTEK系统文件夹SYSTEM

  1. 在目标文件夹找到SYSTEM 文件夹,将其拷到USERHEADER所在的文件夹。
    (学习日记)2023.04.28_第46张图片
  2. 将其内的c文件依次导入
    (学习日记)2023.04.28_第47张图片
  3. 将三个c文件的头文件坐在目录导入
    (学习日记)2023.04.28_第48张图片
  4. 编译–成功

8、导入到开发板

详情参考另一篇笔记(STM32笔记)三、ST-LINK下载

五、初学HAL库

1、固件库和寄存器的区别

固件库就是函数的集合(API),把寄存器操作封装起来。

STM32寄存器成百上千,一一操作非常不便。通过API把寄存器操作封装起来,这样大家不需要在记寄存器的每个位,而是直接操作固件库函数。简单方便很多。

固件库不是万能的。要想全面的掌握STM32,必须对寄存器有一定的了解,尤其是入门学习的时候。只有通过对寄存器有一个基本的了解,才能全面掌握了STM32各个功能外设的工作原理,才能更好的使用固件库。

对于寄存器,大家不需要去死记硬背寄存器名称以及每个位作用,大家只需要大致的了解大致的配置过程,这样在开发中遇到问题,就可以通过调试直接查看寄存器配置,从而找出问题所在。

2、HAL库包和关键文件介绍

(学习日记)2023.04.28_第49张图片

(注:具体的库还需要以后在使用中慢慢熟悉,故本章笔记是一个不断补充的笔记。)

六、新建HAL库工程模板

1、找到STM32CubeFX固件包(X为板子的型号)

将固件包解压
(学习日记)2023.04.28_第50张图片
(学习日记)2023.04.28_第51张图片

2、新建工程目录,复制需要的文件到工程目录

  1. 新建一个文件夹,在文件夹中新建一个USER文件夹、HALLIB文件夹(外设库文件夹,放置HAL库)、CORE文件夹(启动文件夹,放置内核)、OBJ文件夹(放置编译中介文件)
    (学习日记)2023.04.28_第52张图片

  2. 在固件包中找到图片中的文件
    (学习日记)2023.04.28_第53张图片

  3. Inc(外设程序头文件)、Src(外设程序源文件)文件夹放到HALLIB文件夹中。
    (学习日记)2023.04.28_第54张图片

  4. startup_stm32f767xx.s(启动文件)放到CORE文件夹中,
    (学习日记)2023.04.28_第55张图片

  5. 内核头文件文件放到CORE文件夹中。
    (学习日记)2023.04.28_第56张图片

  6. 顶层头文件主头文件源文件放到USER文件夹中。
    (学习日记)2023.04.28_第57张图片
    (学习日记)2023.04.28_第58张图片
    (学习日记)2023.04.28_第59张图片

3、新建工程

  1. USER文件夹里新建一个工程
    (学习日记)2023.04.28_第60张图片
    (学习日记)2023.04.28_第61张图片

  2. 按照自己板子的型号来选择创建类型
    (学习日记)2023.04.28_第62张图片

  3. 环境选项中选择Cancel
    (学习日记)2023.04.28_第63张图片

  4. 会发现文件夹中出现了一些文件,其中uvprojx是打开文件
    (学习日记)2023.04.28_第64张图片

4、在MDK中设置头文件存放路径

  1. 打开文件管理器,并将启动文件startup_stm32f767xx.s)导入
    (学习日记)2023.04.28_第65张图片

(学习日记)2023.04.28_第66张图片
(学习日记)2023.04.28_第67张图片

  1. 如果文件头像上有钥匙,就将启动文件startup_stm32f767xx.s)的只读属性取消勾选。
    (学习日记)2023.04.28_第68张图片
    (学习日记)2023.04.28_第69张图片
    (学习日记)2023.04.28_第70张图片

  2. 将其余几个文件夹和其中的.h.c文件导入,文件类型选择All files
    (学习日记)2023.04.28_第71张图片
    其中有几个.c文件不需要,删除即可。
    (学习日记)2023.04.28_第72张图片

  3. 把带钥匙的文件取消只读选项。
    (学习日记)2023.04.28_第73张图片
    (学习日记)2023.04.28_第74张图片
    在这里插入图片描述

  4. 将头文件文件夹导入
    (学习日记)2023.04.28_第75张图片
    (学习日记)2023.04.28_第76张图片

注:软件不会沿着目录向下寻找,所以所有头文件必须精确到根目录)

5、配置MDK:全局宏定义等

  1. 根据不同的板子、不同的工程将不同的预编译全局宏定义标识符输入
    (学习日记)2023.04.28_第77张图片
  2. 根据不同板子规格修改外部晶振
    (学习日记)2023.04.28_第78张图片
  3. 勾选生成HEX工程文件选项
    (学习日记)2023.04.28_第79张图片
  4. 设置编译中间文件的存放目录
    (学习日记)2023.04.28_第80张图片

6、编写用户函数

  1. main.h#include "stm32f7xx_nucleo_144.h"删除
    (学习日记)2023.04.28_第81张图片

  2. main.c函数中的内容删掉即可开始编程
    (学习日记)2023.04.28_第82张图片

  3. 程序需注意的地方
    (1)程序末尾必须要有回车

7、修改修改相关文件参数适配开发板

  1. HALLIB文件夹中打开stm32f7xx_hal.h下的stm32f7xx_hal_conf.h
    找到#define HSE_VALUE,将后面的晶振改成板子的晶振,我是用的板子晶振是25MHz,所以把8000000U改成25000000U
    (学习日记)2023.04.28_第83张图片
    (学习日记)2023.04.28_第84张图片
  2. HALLIB文件夹中打开stm32f7xx_hal.h
    找到HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);,将优先级分组从4改为2,即HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);
    (学习日记)2023.04.28_第85张图片

8、添加ALIENTEK系统文件夹SYSTEM

  1. 在目标文件夹找到SYSTEM 文件夹,将其拷到USERHEADER所在的文件夹。
    (学习日记)2023.04.28_第86张图片
  2. 将其内的c文件依次导入
    (学习日记)2023.04.28_第87张图片
  3. 将三个c文件的头文件坐在目录导入
    (学习日记)2023.04.28_第88张图片
  4. 编译–成功

9、导入到开发板

详情参考另一篇笔记(STM32笔记)三、ST-LINK下载

七、GPIO基础知识

1、GPIO介绍

GPIO(全称:General Purpose Input Output(通用输入输出端口))是一款端口扩展器,可以做输入也可以做输出。GPIO端口可通过程序配置成输入或者输出。

GPIO具有低功耗、小封装、低成本、布线简单等优点。

STM32的引脚中,有部分是做GPIO使用,部分是电源引脚/复位引脚/启动模式引脚/晶振引脚/调试下载引脚

2、GPIO八种工作模式解释(STM32

本小节图片引用自【STM32】GPIO工作原理(八种工作方式超详细分析,附电路图)

Cortex-M3里,对于GPIO的配置种类有8种:

  1. GPIO_Mode_AIN 模拟输入
  2. GPIO_Mode_IN_FLOAtiNG 浮空输入
  3. GPIO_Mode_IPD 下拉输入
  4. GPIO_Mode_IPU 上拉输入
  5. GPIO_Mode_Out_OD开漏输出
  6. GPIO_Mode_Out_PP 推挽输出
  7. GPIO_Mode_AF_OD 复用开漏输出
  8. GPIO_Mode_AF_PP 复用推挽输出
    (学习日记)2023.04.28_第89张图片

1)4种输入模式

(1)浮空输入

  1. GPIO_Mode_IN_FLOATING
  2. 作用:
    当输入一个高电平时,会检测到高电平;
    当输入低电平时,会检测到低电平;
    当无信号输入时,该端口的电平是不确定的。
  3. 原理:
    浮空输入模式下,I/O端口的电平信号直接进入输入数据寄存器
    当引脚悬空(在无信号输入)的情况下,I/O的电平状态是不确定的,会因为各种各样的情况受到干扰。
    (学习日记)2023.04.28_第90张图片
  4. 参考资料:
    【STM32】GPIO工作原理(八种工作方式超详细分析,附电路图)
    GPIO工作模式

(2)上拉输入

  1. GPIO_Mode_IPU
  2. 作用:
    当输入一个高电平时,会检测到高电平;
    当输入低电平时,会检测到低电平;
    当无信号输入时,会检测到高电平。
  3. 原理:
    上拉输入模式下,I/O端口的电平信号直接进入输入数据寄存器
    当输入一个高电平时,VDD不产生影响;
    当输入低电平时,上拉电阻压降为VDDVDD不产生影响;
    当无信号输入时,由于上拉电阻电流很小,所以降压很低,故会检测到高电平。
    (学习日记)2023.04.28_第91张图片
  4. 参考资料:
    视频12分50秒
    【STM32】GPIO工作原理(八种工作方式超详细分析,附电路图)
    GPIO工作模式

(3)下拉输入

  1. GPIO_Mode_IPD
  2. 作用:
    当输入一个高电平时,会检测到高电平;
    当输入低电平时,会检测到低电平;
    当无信号输入时,会检测到低电平。
  3. 原理:
    下拉输入模式下,I/O端口的电平信号直接进入输入数据寄存器
    当输入一个高电平时,下拉电阻电流很小,VSS不产生影响;
    当输入低电平时,VSS不产生影响;
    当无信号输入时,下拉电阻两端皆为低电平,故会检测到低电平。
    (学习日记)2023.04.28_第92张图片
  4. 参考资料:
    【STM32】GPIO工作原理(八种工作方式超详细分析,附电路图)
    GPIO工作模式

(4)模拟输入

  1. GPIO_Mode_AIN
  2. 作用:
    将不会检测到电平信息,会检测到完整的电压变化。
  3. 原理:
    模拟输入模式下,I/O端口的模拟信号(电压信号,而非电平信号)直接模拟输入到外设模块,比如ADC模块等等。
    (学习日记)2023.04.28_第93张图片
  4. 参考资料:
    GPIO工作模式
    【STM32】GPIO工作原理(八种工作方式超详细分析,附电路图)

2)4种输出模式(带上下拉)

(1)开漏输出(带上拉或者下拉)

  1. GPIO_Mode_Out_OD
  2. 作用:
    当设置输出为高电平时,端口输出高低电平由端口外的上拉或下拉决定。
    当设置输出为低电平时,端口输出低电平。
    当输出低电平以后,端口可以进行输入。
  3. 原理:
    当设置输出为高电平的时候,N-MOS管处于关闭状态,此时I/O端口的电平就不会由输出的高低电平决定,而是由I/O端口外部的上拉或者下拉决定;
    当设置输出的值为低电平的时候,N-MOS管处于开启状态,此时I/O端口的电平就是低电平。
    同时,I/O端口的电平也可以通过输入电路进行读取;
    注意,I/O端口的电平不一定是输出的电平,电平由上拉电阻控制。
    (学习日记)2023.04.28_第94张图片
  4. 参考资料:
    GPIO工作模式
    【STM32】GPIO工作原理(八种工作方式超详细分析,附电路图)

(2)复用开漏输出(带上拉或者下拉)

  1. GPIO_Mode_AF_OD
  2. 作用:
    当外设输出为高电平时,端口输出高低电平由端口外的上拉或下拉决定。
    当外设输出为低电平时,端口输出低电平。
    当输出低电平以后,端口可以进行输入。
  3. 原理:
    与开漏输出相同,只不过由外设控制高低电平。
    (学习日记)2023.04.28_第95张图片
  4. 参考资料:
    GPIO工作模式
    【STM32】GPIO工作原理(八种工作方式超详细分析,附电路图)

(3)推挽式输出(带上拉或者下拉)

  1. GPIO_Mode_Out_PP
  2. 作用:
    当设置输出为高电平时,端口输出高电平。
    当设置输出为低电平时,端口输出低电平。
    当输出低电平以后,端口可以进行输入。
  3. 原理:
    当设置输出为高电平的时候,P-MOS管处于开启状态,N-MOS管处于关闭状态,此时I/O端口的高电平由P-MOS管的VDD决定;
    当设置输出的值为低电平的时候,N-MOS管处于开启状态,P-MOS管处于关闭状态,此时I/O端口的电平就是低电平。
    (学习日记)2023.04.28_第96张图片
  4. 参考资料:
    GPIO工作模式
    【STM32】GPIO工作原理(八种工作方式超详细分析,附电路图)

(4)复用推挽输出(带上拉或者下拉)

  1. GPIO_Mode_AF_PP
  2. 作用:
    当外设输出为高电平时,端口输出高电平。
    当外设输出为低电平时,端口输出低电平。
    当输出低电平以后,端口可以进行输入。
  3. 原理:
    与推挽输出相同,只不过由外设控制高低电平。
    (学习日记)2023.04.28_第97张图片
  4. 参考资料:
    GPIO工作模式
    【STM32】GPIO工作原理(八种工作方式超详细分析,附电路图)

3)八种工作模式的区别

(1)什么是推挽结构和推挽电路?

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

(2)开漏输出和推挽输出的区别?

开漏输出:只可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极。适合于做电流型的驱动,其吸收电流的能力相对强(一般20mA以内);
推挽输出:可以输出强高、低电平,连接数字器件。
关于推挽输出和开漏输出,最后用一幅最简单的图形来概括:
(学习日记)2023.04.28_第98张图片
该图中左边的便是推挽输出模式,其中比较器输出高电平时下面的PNP三极管截止,而上面NPN三极管导通,输出电平VS+;当比较器输出低电平时则恰恰相反,PNP三极管导通,输出和地相连,为低电平。右边的则可以理解为开漏输出形式,需要接上拉。

(3)在STM32中选用怎样选择I/O模式?

  1. 浮空输入_IN_FLOATING ——浮空输入,可以做KEY识别,RX1
  2. 带上拉输入_IPU——IO内部上拉电阻输入
  3. 带下拉输入_IPD—— IO内部下拉电阻输入
  4. 模拟输入_AIN ——应用ADC模拟输入,或者低功耗下省电
  5. 开漏输出_OUT_OD ——IO输出0接GNDIO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51 \ STM32IO双向功能
  6. 推挽输出_OUT_PP——IO输出0接GNDIO输出1接VCC,读输入值是未知的
  7. 复用功能的推挽输出_AF_PP ——片内外设功能(I2CSCLSDA
  8. 复用功能的开漏输出_AF_OD——片内外设功能(TX1MOSIMISO.SCK.SS

(4)STM32 设置实例:

  1. 模拟I2C 使用开漏输出_OUT_OD,接上拉电阻,能够正确输出 0 和 1;读值时先GPIO_SetBits(GPIOBGPIO_Pin_0)拉高,然后可以读IO的值,使用GPIO_ReadInputDataBit(GPIOBGPIO_Pin_0);
  2. 如果是无上拉电阻,IO 默认是高电平;
  3. 需要读取IO的值,可以使用带上拉输入_IPU 和浮空输入_IN_FLOATING 和开漏输出_OUT_OD

4)IO 端口复用功能配置:

  1. 对于复用功能输入,端口可以配置成任意输入模式或者复用功能输出模式。
  2. 对于复用功能输出,端口必须配置成复用功能输出
  3. 对于双向复用功能,端口必须配置成复用功能输出
  4. stm32 的部分 IO 端口的复用功能可以重新映射成另外的复用功能。
  5. stm32 具有 GPIO 锁定机制,即锁定 GPIO 配置,下次复位前不能再修改。
  6. LSE 振荡器关闭时,OSC32_IN OSC32_OUT 可以用作通用 IO PC14PC15
  7. 当进入待机模式或者备份域由 Vbat 供电,PC14PC15 功能丢失,该两个 IO 口线设置为模拟输入功能。
  8. OSC_INOSC_OUT 可以重新映射为 GPIO PD0PD1
  9. 注意 PD0PD1 用于输出地时候仅能用于 50MHz 输出模式。
  10. 注意:PC13PC14PC15 只能用于 2MHz 的输出模式,最多只能带 30pf 的负载,并且同时只能使用一个引脚!!!

5)上电复位后IO口状态

上电复位后,GPIO默认为输入浮空状态,部分特殊功能引脚为特定状态。

复位后,调试引脚处于复用功能上拉/下拉状态:

  • PA15JTDI处于上拉状态
  • PA14JTCK/SWCLK处于下拉状态
  • PA13JTMS/SWDAT处于下拉状态
  • PB4NJTRST处于上拉状态
  • PB3JTDO处于浮空状态

3、开发板芯片的引脚常用参数

注:由于我使用的是STM32F767,所以本小节分析STM32F767IGT6的参数

(学习日记)2023.04.28_第99张图片
(学习日记)2023.04.28_第100张图片

  1. 引脚数量:176 / 4个方向
  2. 主频:180 MHz
  3. 内核:ARM Cortex-M7
  4. Flash:1024 KB
  5. 封装:LQFP176
  6. 通用IO数量:132
  7. 最低工作电压:1.7 V
  8. 最高工作电压:3.6 V
  9. 一共9组IO:PA ~ PI
    PA ~ PH每组16个IO(Pa0 ~ Pa15),PI只有12个IO(PI0 ~ PI11
    共140个IO口。
    (学习日记)2023.04.28_第101张图片
    (学习日记)2023.04.28_第102张图片(学习日记)2023.04.28_第103张图片
    (学习日记)2023.04.28_第104张图片
    在这里插入图片描述

八、STM32CubeMX创建工程

1、安装

  1. 打开官网,下载windows最新版。
    (学习日记)2023.04.28_第105张图片
  2. 接受许可协议
    (学习日记)2023.04.28_第106张图片
  3. 由于笔者已经装好了,安装过程唯一需要注意的也就是英文路径别装C盘,其余一路NEXT就行了。

2、创建工程

  1. 打开STM32CubeMX
    (学习日记)2023.04.28_第107张图片

  2. 创建新项目
    (学习日记)2023.04.28_第108张图片

  3. 搜索栏可以直接搜索板子型号,也可根据搜索框下的各个参数来限制搜索范围。
    参数从上至下依次为

  • 内核
  • 系列
  • 线程
  • 芯片包
  • 其他
  • 引脚功能类型
    (学习日记)2023.04.28_第109张图片
  1. 点击找到的板子型号(我是用的是STM32F767,诸位按照自己板子),点击右上角的Start Project
    (学习日记)2023.04.28_第110张图片
    本系列可能需要暂停,板子我找不到了。。。
    我又回来啦!!!接下来是以学习日记的形式,使用的开发板为STM32F103,回见!

你可能感兴趣的:(学习日记,STM32,学习,单片机,stm32)