(学习日记)2023.04.28

news2024/10/7 8:24:54

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


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


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

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工作模式

(2)上拉输入

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

(3)下拉输入

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

(4)模拟输入

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

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

  1. GPIO_Mode_AF_OD
  2. 作用:
    当外设输出为高电平时,端口输出高低电平由端口外的上拉或下拉决定。
    当外设输出为低电平时,端口输出低电平。
    当输出低电平以后,端口可以进行输入。
  3. 原理:
    与开漏输出相同,只不过由外设控制高低电平。
    在这里插入图片描述
  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端口的电平就是低电平。
    在这里插入图片描述
  4. 参考资料:
    GPIO工作模式
    【STM32】GPIO工作原理(八种工作方式超详细分析,附电路图)

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

  1. GPIO_Mode_AF_PP
  2. 作用:
    当外设输出为高电平时,端口输出高电平。
    当外设输出为低电平时,端口输出低电平。
    当输出低电平以后,端口可以进行输入。
  3. 原理:
    与推挽输出相同,只不过由外设控制高低电平。
    在这里插入图片描述
  4. 参考资料:
    GPIO工作模式
    【STM32】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_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的参数

在这里插入图片描述
在这里插入图片描述

  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,回见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/608723.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SSM的教务管理系统的设计与实现(论文+源码)_kaic

摘 要 学校教务管理信息化是提高办公效率的主要途径。随着中国高等教育的快速发展和学校规模的不断扩大,在校学生人数不断增加,办学层次出现多元化,由一地办学发展到多地多点办学,同时进一步推行学分制。这些变化使得教务部门的管…

【AI绘图】四、stable difusion提示词如何写?

上一篇:【AI绘图】三、stable diffussion操作界面介绍以及如何使用 如何写好提示词? 写出一份比较好的提示词是文生图技术的关键。但是,写出一份好的prompt并不容易,下面针对“如何写好提示词”这个问题,从提示词构成…

MySQL 数据操纵语言 DML

文章目录 数据操纵语言 DMLINSERT 语句UPDATE 语句DELETE 语句 数据操纵语言 DML 数据操纵语言(Data Manipulation Language,DML)是 SQL 语言的核心部分之一。在添加、更新或者删除表中的数据时,需要执行 DML 语句。很多时候我们提…

Unity导入Android aar包实现交互全流程

一.搭建Android项目 1.创建一个Android空项目 点击finish后,就等待编译,过程中会自动下载一些插件 等待... 等待... 编译完成: 2.创建Module 右键该工程的app,新建一个Module, Language:Kotlin语法和Java语法,语法不同,后续创建的代码文件有所差异,但不影响代码编…

地震勘探基础(六)之地震反褶积

地震反褶积 地震资料常规处理主要包括地震反褶积,水平叠加和偏移成像三大内容。水平叠加可以提高地震资料的信噪比,偏移成像可以提高地震资料的空间分辨率和保真度,地震反褶积可以提高地震资料的分辨率和压制干扰波。 1954年,Ro…

Python心经(5)

目录 python对于类和实例,,都能随时动态绑定 属性或者函数 可以通过__slots__去限定实例所能绑定属性的范围 python里面类很多定制函数__xx__ 下面给个python里面枚举类型 对type函数去实现 有关迭代器: 生成器: 可迭代对…

【Linux编译器gcc/g++】带你了解代码是如何变成可执行程序的!

Linux编辑器gcc/g的使用 背景知识gcc的使用预处理(进行宏替换)编译(生成汇编)汇编(生成及其可识别代码)链接(生成可执行文件或者库文件)库 动态库vs静态库 debug和release🍀小结🍀 🎉博客主页:小智_x0___0x…

【FPGA零基础学习之旅#6】ip核基础知识之计数器

🎉欢迎来到FPGA专栏~ip核基础知识之计数器 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒🍹 ✨博客主页:小夏与酒的博客 🎈该系列文章专栏:FPGA学习之旅 文章作者技术和水平有限,如果文中出现错误,希望大家…

[网络工程]小型局域网组建的常用命令(ENSP)

⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章 ⭐作者主页:逐梦苍穹 目录 1、引言2、常用命令(ENSP)常规VTYConsole端口安全单臂路由DHCPNATACL基础ACL高级ACL GVRPSTP 1、引言 局域网(Local A…

C++学习——第一节课-初识C++

大家好,我是涵子。今天我们来开始学习C。 目录 一、课前准备 二、C的第一个程序 2.1.C是个啥 2.2.C的第一个程序编写 2.2.1.头文件 2.2.2.命名空间 2.2.3.主程序函数 2.2.4.输出流 2.2.5.代码结束 三、其它的应用 3.1.输出三角形,矩形和勾 …

单例模式C++实现和观察者模式C++实现

目录 1、单例模式介绍 2、单例代码实现 2.1 static介绍 2.2 C中static的三种用法: (1)静态局部变量 (2)静态成员变量 (3)静态成员函数 3、观察者模式介绍 4、观察者代码实现 1、单例模…

.ini配置文件介绍与解析库使用

【前言】 ini 文件是英文"Initialization"的缩写,即初始化文件。它用来配置特定应用软件以实现对程序初始化或进行参数设置。.ini文件由节(section)、键(key)、值(value)三种模块构成。在windows系统/嵌入式软件中有很多XXX.ini文件,例如Syste…

IDC机房相电压与线电压的关系

380V电动机(三相空调压缩机)的电流计算公式为:Ⅰ=额定功率(1.732额定电压功率因数效率)。 功率因数是电力系统的一个重要的技术数据。功率因数是衡量电气设备效率高低的一个系数。功率因数低,说…

通过源码编译安装搭建 LNMP平台

搭建LNMP平台 一. 安装Nginx服务1.1 安装依赖包1.2 创建运行用户1.3 编译安装1.4 优化路径1.5 添加 Nginx 系统服务 二. 安装mysql服务2.1 安装Mysql环境依赖包2.2 创建运行用户2.3 编译安装2.4 修改mysql 配置文件2.5 更改mysql安装目录和配置文件的属主属组2.6 设置路径环境变…

VMware安装Windows11

VMware安装Windows11 嘚吧嘚准备工作VMware下载Windows11下载 VMware安装Windows11VMware配置安装Windows11 嘚吧嘚 最近在搞一些自己感兴趣的东西,需要(临时)安装一些软件来验证,考虑到用完还要卸载,不想把自己的电脑搞得乱七八糟&#x1f…

字节序及IP地址转换

一、主机字节序和网络字节序 1.什么是字节序? 字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序,分为:大端字节序(Big endian)、小端字节序(Little endian)。 示例&am…

前端技术双周刊 2023-06-04:React 发布 10 周年整

项目地址:olivewind/weekly 微信公众号:依赖注入 发布时间:2023.06.04 本周内容:资讯x3、开源x4、文章x5 动态 React 圆桌会议 - Server Components, Suspense 和 Actions 为庆祝 React 成立 10 周年,Delba de Oliveir…

MySQL 约束控制

文章目录 约束控制非空约束主键约束默认值约束唯一约束外键约束 约束控制 数据的完整性约束(简称“约束”)是在表和字段上强制执行的数据检测规则,是为了防止不规范的数据进入数据库。当我们对数据进行 DML 操作时,数据库管理系统…

被面试官上过一课后,我学到的不止是如何答题

写在前面双向奔赴切勿急于否定自己做足功课关于简历关于简历投递常见面试题汇总● 按照一般的面试流程,先来一个自我介绍吧● 你的优点和缺点是什么● 你理解的项目经理是干什么的● 能完整的说一下软件项目的整个流程么● 项目经理和产品经理的区别在哪里● 项目管…