(学习日记)2023.04.28

这篇具有很好参考价值的文章主要介绍了(学习日记)2023.04.28。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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


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


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

一、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

(2)特点

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

(学习日记)2023.04.28

3、Cortex-M4的低功耗设计

(学习日记)2023.04.28

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

(学习日记)2023.04.28

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

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

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

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

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

二、开发环境搭建

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

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

(4)注意事项

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

2、USB串口驱动安装

(1)驱动下载

下载链接: 点击进入

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

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

3、ST-LINK安装

(1)双击dpinst_amd64.exe安装

(学习日记)2023.04.28

(2)安装成功

(学习日记)2023.04.28
插上STLINK在设备管理器中可以看到驱动。
(学习日记)2023.04.28

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

三、ST-LINK下载

1、硬件连接

(1)JTAG/SWD接口

(学习日记)2023.04.28
这是开发板板载的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

(2)修改仿真器

  • 点击Debug
  • 选择ST-Link Debugger
  • Run to main()选中
  • 点击Settings
    (学习日记)2023.04.28
    (学习日记)2023.04.28

(3)修改传输设置

具体设置如图:
(学习日记)2023.04.28

(4)修改程序编译设置

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

(学习日记)2023.04.28

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

(学习日记)2023.04.28

(6)配置Flash菜单命令

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

四、新建寄存器工程模板

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

将固件包解压
(学习日记)2023.04.28
(学习日记)2023.04.28

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

  1. 新建一个文件夹,在文件夹中新建一个USER文件夹和一个HEADER文件夹
    (学习日记)2023.04.28

  2. USER文件夹里新建一个工程
    (学习日记)2023.04.28
    (学习日记)2023.04.28

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

  4. 环境选项中选择Cancel
    (学习日记)2023.04.28

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

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

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

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

  1. 打开文件管理器,并将启动文件startup_stm32f767xx.s)导入
    (学习日记)2023.04.28
    (学习日记)2023.04.28
  2. 如果文件头像上有钥匙,就将启动文件startup_stm32f767xx.s)的只读属性取消勾选。
    (学习日记)2023.04.28
    (学习日记)2023.04.28
    (学习日记)2023.04.28
  3. 将头文件文件夹导入
    (学习日记)2023.04.28
    (学习日记)2023.04.28

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

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

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

6、编写用户函数

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

7、添加ALIENTEK系统文件夹SYSTEM

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

8、导入到开发板

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

五、初学HAL库

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

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

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

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

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

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

(学习日记)2023.04.28

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

六、新建HAL库工程模板

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

将固件包解压
(学习日记)2023.04.28
(学习日记)2023.04.28

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

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

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

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

  4. startup_stm32f767xx.s(启动文件)放到CORE文件夹中,
    (学习日记)2023.04.28

  5. 内核头文件文件放到CORE文件夹中。
    (学习日记)2023.04.28

  6. 顶层头文件主头文件源文件放到USER文件夹中。
    (学习日记)2023.04.28
    (学习日记)2023.04.28
    (学习日记)2023.04.28

3、新建工程

  1. USER文件夹里新建一个工程
    (学习日记)2023.04.28
    (学习日记)2023.04.28

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

  3. 环境选项中选择Cancel
    (学习日记)2023.04.28

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

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

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

(学习日记)2023.04.28
(学习日记)2023.04.28

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

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

  3. 把带钥匙的文件取消只读选项。
    (学习日记)2023.04.28
    (学习日记)2023.04.28
    (学习日记)2023.04.28

  4. 将头文件文件夹导入
    (学习日记)2023.04.28
    (学习日记)2023.04.28

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

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

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

6、编写用户函数

  1. main.h#include "stm32f7xx_nucleo_144.h"删除
    (学习日记)2023.04.28

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

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

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

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

8、添加ALIENTEK系统文件夹SYSTEM

  1. 在目标文件夹找到SYSTEM 文件夹,将其拷到USERHEADER所在的文件夹。
    (学习日记)2023.04.28
  2. 将其内的c文件依次导入
    (学习日记)2023.04.28
  3. 将三个c文件的头文件坐在目录导入
    (学习日记)2023.04.28
  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

1)4种输入模式

(1)浮空输入
  1. GPIO_Mode_IN_FLOATING
  2. 作用:
    当输入一个高电平时,会检测到高电平;
    当输入低电平时,会检测到低电平;
    当无信号输入时,该端口的电平是不确定的。
  3. 原理:
    浮空输入模式下,I/O端口的电平信号直接进入输入数据寄存器
    当引脚悬空(在无信号输入)的情况下,I/O的电平状态是不确定的,会因为各种各样的情况受到干扰。
    (学习日记)2023.04.28
  4. 参考资料:
    【STM32】GPIO工作原理(八种工作方式超详细分析,附电路图)
    GPIO工作模式
    最详细易懂的GPIO解释
(2)上拉输入
  1. GPIO_Mode_IPU
  2. 作用:
    当输入一个高电平时,会检测到高电平;
    当输入低电平时,会检测到低电平;
    当无信号输入时,会检测到高电平。
  3. 原理:
    上拉输入模式下,I/O端口的电平信号直接进入输入数据寄存器
    当输入一个高电平时,VDD不产生影响;
    当输入低电平时,上拉电阻压降为VDDVDD不产生影响;
    当无信号输入时,由于上拉电阻电流很小,所以降压很低,故会检测到高电平。
    (学习日记)2023.04.28
  4. 参考资料:
    视频12分50秒
    【STM32】GPIO工作原理(八种工作方式超详细分析,附电路图)
    GPIO工作模式
    最详细易懂的GPIO解释
(3)下拉输入
  1. GPIO_Mode_IPD
  2. 作用:
    当输入一个高电平时,会检测到高电平;
    当输入低电平时,会检测到低电平;
    当无信号输入时,会检测到低电平。
  3. 原理:
    下拉输入模式下,I/O端口的电平信号直接进入输入数据寄存器
    当输入一个高电平时,下拉电阻电流很小,VSS不产生影响;
    当输入低电平时,VSS不产生影响;
    当无信号输入时,下拉电阻两端皆为低电平,故会检测到低电平。
    (学习日记)2023.04.28
  4. 参考资料:
    【STM32】GPIO工作原理(八种工作方式超详细分析,附电路图)
    GPIO工作模式
    最详细易懂的GPIO解释
(4)模拟输入
  1. GPIO_Mode_AIN
  2. 作用:
    将不会检测到电平信息,会检测到完整的电压变化。
  3. 原理:
    模拟输入模式下,I/O端口的模拟信号(电压信号,而非电平信号)直接模拟输入到外设模块,比如ADC模块等等。
    (学习日记)2023.04.28
  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端口的电平不一定是输出的电平,电平由上拉电阻控制。
    (学习日记)2023.04.28
  4. 参考资料:
    GPIO工作模式
    【STM32】GPIO工作原理(八种工作方式超详细分析,附电路图)
    最详细易懂的GPIO解释
(2)复用开漏输出(带上拉或者下拉)
  1. GPIO_Mode_AF_OD
  2. 作用:
    当外设输出为高电平时,端口输出高低电平由端口外的上拉或下拉决定。
    当外设输出为低电平时,端口输出低电平。
    当输出低电平以后,端口可以进行输入。
  3. 原理:
    与开漏输出相同,只不过由外设控制高低电平。
    (学习日记)2023.04.28
  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端口的电平就是低电平。
    (学习日记)2023.04.28
  4. 参考资料:
    GPIO工作模式
    【STM32】GPIO工作原理(八种工作方式超详细分析,附电路图)
    最详细易懂的GPIO解释
(4)复用推挽输出(带上拉或者下拉)
  1. GPIO_Mode_AF_PP
  2. 作用:
    当外设输出为高电平时,端口输出高电平。
    当外设输出为低电平时,端口输出低电平。
    当输出低电平以后,端口可以进行输入。
  3. 原理:
    与推挽输出相同,只不过由外设控制高低电平。
    (学习日记)2023.04.28
  4. 参考资料:
    GPIO工作模式
    【STM32】GPIO工作原理(八种工作方式超详细分析,附电路图)
    最详细易懂的GPIO解释

3)八种工作模式的区别

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

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

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

开漏输出:只可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极。适合于做电流型的驱动,其吸收电流的能力相对强(一般20mA以内);
推挽输出:可以输出强高、低电平,连接数字器件。
关于推挽输出和开漏输出,最后用一幅最简单的图形来概括:
(学习日记)2023.04.28
该图中左边的便是推挽输出模式,其中比较器输出高电平时下面的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
(学习日记)2023.04.28

  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
    (学习日记)2023.04.28(学习日记)2023.04.28
    (学习日记)2023.04.28
    (学习日记)2023.04.28

八、STM32CubeMX创建工程

1、安装

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

2、创建工程

  1. 打开STM32CubeMX
    (学习日记)2023.04.28

  2. 创建新项目
    (学习日记)2023.04.28

  3. 搜索栏可以直接搜索板子型号,也可根据搜索框下的各个参数来限制搜索范围。
    参数从上至下依次为文章来源地址https://www.toymoban.com/news/detail-471357.html

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

到了这里,关于(学习日记)2023.04.28的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • IIS由于出现权限不足而无法读取配置文件解决方案

    今天来谈一谈关于iis配置上的问题,在启动网站时,提示由于权限不足而无法读取配置,查看本地所有账户均有读写操作的权限 图上显示由于权限不足由于权限不足而无法读取配置文件,所以就从权限入手: 1、右击文件夹-属性-安全,点击编辑,添加 Everyone用户 赋予它所有

    2024年02月15日
    浏览(46)
  • 【学习日记2023.5.20】 之 菜品模块完善

    3.1.1 问题分析 后台系统的 员工管理功能 和 菜品分类功能 的开发,在 新增员工 或者 新增菜品分类 时需要设置创建时间、创建人、修改时间、修改人等字段,在 编辑员工 或者 编辑菜品分类 时需要设置修改时间、修改人等字段。这些字段属于公共字段,在系统中很多表中都

    2024年02月05日
    浏览(73)
  • 【疑难解决】 ubuntu 由于权限不足 无法进入和获取root权限的解决办法

    用户权限不足 :如果你当前的用户账户没有足够的权限来切换到另一个用户(特别是超级用户),你可能会遇到这个问题。确保你拥有适当的权限。 错误的 su 配置 : su 命令的配置可能出现了问题。检查 /etc/pam.d/su 文件,确保配置是正确的。 SELinux或AppArmor策略 :如果你的系

    2024年04月12日
    浏览(44)
  • 学习记录:2023.4.28

    1、SVG学习: 百度百科:SVG是可缩放矢量图形,是基于可扩展标记语言(标准通用标记语言的子集),用于描述二维矢量图形的一种图形格式。它由万维网联盟制定,是一个开放标准。应该是一种开放标准的矢量图形语言,可让你设计激动人心的、高分辨率的Web图形页面。用户可

    2024年02月01日
    浏览(46)
  • 【学习日记2023.6.25】之ElasticSearch搜索引擎

    1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 例如: 在GitHub搜索代码 在电商网站搜索商品 在百度搜索答案 在打车软件搜索附近的车 1.1.2 ELK技术栈 elasticsearch结合kibana、Logstash、Beats,

    2024年02月16日
    浏览(43)
  • 【学习日记2023.6.12】之nacos配置管理_Feign远程调用_Gateway服务网关

    Nacos除了可以做注册中心,同样可以做配置管理来使用。 6.1 统一配置管理 当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。需要一种统一配置管理方案,可以集中管理所有实例的配置。 Nacos一方面可以将配置集中管理

    2024年02月09日
    浏览(56)
  • 【学习日记2023.5.30】之 订单处理 订单状态定时处理_来单提醒_用户催单

    Spring Task 订单状态定时处理 WebSocket 来单提醒 客户催单 功能实现: 订单状态定时处理 、 来单提醒 和 客户催单 订单状态定时处理: 来单提醒: 客户催单: 10.1.1 介绍 Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。 **定位:**定时任

    2024年02月07日
    浏览(38)
  • 【学习日记2023.6.19】 之 RabbitMQ服务异步通信_消息可靠性_死信交换机_惰性队列_MQ集群

    消息队列在使用过程中,面临着很多实际问题需要思考: 消息从发送,到消费者接收,会经历多个过程: 其中的每一步都可能导致消息丢失,常见的丢失原因包括: 发送时丢失: 生产者发送的消息未送达exchange 消息到达exchange后未到达queue MQ宕机,queue将消息丢失 consumer接收

    2024年02月11日
    浏览(58)
  • 【Linux之进程间通信】04.Linux进程间的信号通信

      【Linux之进程间通信】 项目代码获取: https://gitee.com/chenshao777/linux-processes.git (麻烦点个免费的Star哦,您的Star就是我的写作动力!) 04.Linux进程间的信号通信 【目录】   一、进程间信号发送方式   二、进程间信号接收方式   三、进程间信号处理方式 一、进程间信号发

    2024年02月06日
    浏览(44)
  • Ubuntu 20.04设置虚拟内存 (交换内存swap)解决内存不足

    数据库服务器程序在运行起来之后,系统内存不足。 在系统监控中发现,当数据库服务程序启动后,占用了大量内存空间,导致系统的剩余的内存往往只有几十MB。 在ubuntu系统中,swap空间就是虚拟内存,所以考虑在磁盘空间富余的目录下设置虚拟内存swap文件,用来缓解内存

    2024年02月06日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包