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

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

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

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内核。

(2)特点

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

3、Cortex-M4的低功耗设计

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

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”系列:面向微控制器。

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

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

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

32:32bit的意思,表示这是一个32bit的微控制器。

二、开发环境搭建

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文件,右键管理员安装。
  2. 安装路径不能有空格中文
  3. 四个框随便输入,然后NEXT等待几分钟
  4. 安装完成后点击FINISH,回到刚才文件目录,双击pack文件,继续等待几分钟的安装。

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

(4)注意事项

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

2、USB串口驱动安装

(1)驱动下载

下载链接: 点击进入

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



如果出现安装失败或者预安装,将电脑与板子串口连接,当电脑显示有东西插进来了,再次安装,即可成功。

3、ST-LINK安装

(1)双击dpinst_amd64.exe安装

(2)安装成功


插上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)打开选项

(2)修改仿真器

  • 点击Debug
  • 选择ST-Link Debugger
  • Run to main()选中
  • 点击Settings

(3)修改传输设置

具体设置如图:

(4)修改程序编译设置

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

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

(6)配置Flash菜单命令

Use Debug Driver(使用调试驱动程序)、Update Target before Debugging(调试前更新目标)两个选项选中

四、新建寄存器工程模板

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

将固件包解压

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

  1. 新建一个文件夹,在文件夹中新建一个USER文件夹和一个HEADER文件夹

  2. USER文件夹里新建一个工程

  3. 按照自己板子的型号来选择创建类型

  4. 环境选项中选择Cancel

  5. 会发现文件夹中出现了一些文件,其中uvprojx是打开文件

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

  1. 在固件包中找到图片中的文件
  2. startup_stm32f767xx.s放到USER文件夹中,
    将其余h文件放到HEADER文件夹中。

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

  1. 打开文件管理器,并将启动文件startup_stm32f767xx.s)导入

  2. 如果文件头像上有钥匙,就将启动文件startup_stm32f767xx.s)的只读属性取消勾选。


  3. 将头文件文件夹导入

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

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

根据不同的板子、不同的工程将不同的预编译全局宏定义标识符输入

6、编写用户函数

  1. USER创建一个txt,把后缀改成.c
  2. 将.c文件导入


  3. 程序需注意的地方
    (1)程序末尾必须要有回车
    (2)由于程序默认在复位后运行SystemInit()函数,所以要么将SystemInit()函数注释掉,要么在main()函数前加一个空的SystemInit()函数。

7、添加ALIENTEK系统文件夹SYSTEM

  1. 在目标文件夹找到SYSTEM 文件夹,将其拷到USERHEADER所在的文件夹。
  2. 将其内的c文件依次导入
  3. 将三个c文件的头文件坐在目录导入
  4. 编译–成功

8、导入到开发板

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

五、初学HAL库

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

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

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

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

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

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

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

六、新建HAL库工程模板

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

将固件包解压

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

  1. 新建一个文件夹,在文件夹中新建一个USER文件夹、HALLIB文件夹(外设库文件夹,放置HAL库)、CORE文件夹(启动文件夹,放置内核)、OBJ文件夹(放置编译中介文件)

  2. 在固件包中找到图片中的文件

  3. Inc(外设程序头文件)、Src(外设程序源文件)文件夹放到HALLIB文件夹中。

  4. startup_stm32f767xx.s(启动文件)放到CORE文件夹中,

  5. 内核头文件文件放到CORE文件夹中。

  6. 顶层头文件主头文件源文件放到USER文件夹中。


3、新建工程

  1. USER文件夹里新建一个工程

  2. 按照自己板子的型号来选择创建类型

  3. 环境选项中选择Cancel

  4. 会发现文件夹中出现了一些文件,其中uvprojx是打开文件

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

  1. 打开文件管理器,并将启动文件startup_stm32f767xx.s)导入


  1. 如果文件头像上有钥匙,就将启动文件startup_stm32f767xx.s)的只读属性取消勾选。


  2. 将其余几个文件夹和其中的.h.c文件导入,文件类型选择All files

    其中有几个.c文件不需要,删除即可。

  3. 把带钥匙的文件取消只读选项。


  4. 将头文件文件夹导入

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

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

  1. 根据不同的板子、不同的工程将不同的预编译全局宏定义标识符输入
  2. 根据不同板子规格修改外部晶振
  3. 勾选生成HEX工程文件选项
  4. 设置编译中间文件的存放目录

6、编写用户函数

  1. main.h#include "stm32f7xx_nucleo_144.h"删除

  2. main.c函数中的内容删掉即可开始编程

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

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

  1. HALLIB文件夹中打开stm32f7xx_hal.h下的stm32f7xx_hal_conf.h
    找到#define HSE_VALUE,将后面的晶振改成板子的晶振,我是用的板子晶振是25MHz,所以把8000000U改成25000000U

  2. HALLIB文件夹中打开stm32f7xx_hal.h
    找到HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);,将优先级分组从4改为2,即HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);

8、添加ALIENTEK系统文件夹SYSTEM

  1. 在目标文件夹找到SYSTEM 文件夹,将其拷到USERHEADER所在的文件夹。
  2. 将其内的c文件依次导入
  3. 将三个c文件的头文件坐在目录导入
  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 复用推挽输出

1)4种输入模式

(1)浮空输入

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

(2)上拉输入

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

(3)下拉输入

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

(4)模拟输入

  1. GPIO_Mode_AIN
  2. 作用:
    将不会检测到电平信息,会检测到完整的电压变化。
  3. 原理:
    模拟输入模式下,I/O端口的模拟信号(电压信号,而非电平信号)直接模拟输入到外设模块,比如ADC模块等等。
  4. 参考资料:
    GPIO工作模式
    【STM32】GPIO工作原理(八种工作方式超详细分析,附电路图)
    最详细易懂的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端口的电平不一定是输出的电平,电平由上拉电阻控制。
  4. 参考资料:
    GPIO工作模式
    【STM32】GPIO工作原理(八种工作方式超详细分析,附电路图)
    最详细易懂的GPIO解释

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

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

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

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

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

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

3)八种工作模式的区别

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

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

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

开漏输出:只可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极。适合于做电流型的驱动,其吸收电流的能力相对强(一般20mA以内);
推挽输出:可以输出强高、低电平,连接数字器件。
关于推挽输出和开漏输出,最后用一幅最简单的图形来概括:

该图中左边的便是推挽输出模式,其中比较器输出高电平时下面的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_INOSC32_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的参数


  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口。



八、STM32CubeMX创建工程

1、安装

  1. 打开官网,下载windows最新版。
  2. 接受许可协议
  3. 由于笔者已经装好了,安装过程唯一需要注意的也就是英文路径别装C盘,其余一路NEXT就行了。

2、创建工程

  1. 打开STM32CubeMX

  2. 创建新项目

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

  • 内核
  • 系列
  • 线程
  • 芯片包
  • 其他
  • 引脚功能类型
  1. 点击找到的板子型号(我是用的是STM32F767,诸位按照自己板子),点击右上角的Start Project

    本系列可能需要暂停,板子我找不到了。。。
    我又回来啦!!!接下来是以学习日记的形式,使用的开发板为STM32F103,回见!

(学习日记)2023.04.28相关推荐

  1. 【学习日记2023.4.25】之 前后端分离_前端工程化_Vue组件库Element_Vue路由_打包部署

    文章目录 1. 前后台分离开发 1.1 前后台分离开发介绍 1.2 YAPI 1.2.1 YAPI介绍 1.2.2 接口文档管理 2. 前端工程化 2.1 前端工程化介绍 2.2 前端工程化入门 2. ...

  2. 【学习日记2023.4.9】之释放资源的方式_编解码_字符流(Reader/Writer)及其子类_转换流( [In/Out]putStreamReader)

    文章目录 1. 释放资源的方式 1.1 try-catch-finally 1.1.1 finally 格式 特点 执行时机 1.1.2 处理IO流中的异常 1.2 try-with-resource ...

  3. 【学习日记2023.5.8】之 springboot案例之登录功能(会话技术_JWT令牌_过滤器_拦截器)

    文章目录 1. 案例-登录认证 1. 1登录功能 1.1.1 需求 1.1.2 接口文档 1.1.3 思路分析 1.1.4 功能开发 1.1.5 测试 1.1.6 全后端联调 1.2 登录校验 1.2 ...

  4. 【学习日记2023.6.9】之 SpringCloud入门(认识微服务_服务拆分和远程调用RestTemplate_Eureka注册中心_Ribbon负载均衡_Nacos注册中心)

    文章目录 SpringCloud 1. 认识微服务 1.1 单体架构 1.2 分布式架构 1.3 微服务 1.4 SpringCloud 1.5 总结 2. 服务拆分和远程调用 2.1 服务拆分原则 ...

  5. (学习日记)2023.04.25

    写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈. 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈. 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录, ...

  6. (学习日记)2023.04.26

    写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈. 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈. 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录, ...

  7. (学习日记)2023.04.24

    写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈. 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈. 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录, ...

  8. (学习日记)2023.04.29

    写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈. 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈. 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录, ...

  9. (学习日记)2023.4.22

    写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈. 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈. 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录, ...

最新文章

  1. c# IO线程 打造 定时打开指定程序
  2. Blueprint CSS Framework 学习笔记
  3. android文件导出错误—— failed to pull a selection
  4. Optical_Flow(2)
  5. html5 接收蓝牙广播_蓝牙定位技术浅析(化工厂应用)
  6. pytorch实现图像分类代码实例
  7. DotNetCore中异步编程的实用演练
  8. 大型企业Exchange 2010部署方案 – 分割全局地址列表
  9. 华为鸿蒙os什么时候发布,鸿蒙OS将于今天发布
  10. ArcEngine中打开各种数据源(WorkSpace)的连接(转)
  11. Web前端学习 | Ajax
  12. 证据理论(1)—— DS证据理论基本理论
  13. Socket 服务器和客户端交互
  14. 汇编中 rep指令 和 stos指令ollydbg图解
  15. 用VMware克隆CentOS 6.4后修改HWaddr
  16. 如何给代码起个好名字
  17. 双料大奖 | 奇点云获评「年度数字化创新最佳实践奖」「年度数字化服务最值得信赖品牌奖」
  18. js使用双层for循环实现倒三角形、正三角形
  19. PAT 1003 我要通过! python
  20. 转《胡侃学习(理论)计算机》的心得

热门文章

  1. BZOJ 3379: [Usaco2004 Open]Turning in Homework 交作业
  2. 魅蓝note3联通卡显示无服务器,魅蓝Note3手机卡(SIM卡)安装方法真机图文详解
  3. Jspxcms 无入侵式开发
  4. WPF真入门教程01--WPF简介
  5. WPF教程一:基础(转)
  6. OSChina 周日乱弹 —— 康熙看了伤心,乾隆听了流泪
  7. Java读取文件的内容到String字符串中
  8. Excel生成Word文档
  9. 第五阶段 -- 数据库:day21_07/03/19【事务】
  10. pandas导入excel