📦 归档笔记 — 原创建于 WizNote,仅作归档展示;观点以当年为准,非最新。

基本笔记

创建时间2022-01-23最后修改2022-01-23原位置/程序员成长之旅/嵌入式学习/SMT32F4/字数1127
目录:程序员成长之旅/嵌入式学习/SMT32F4

嵌入式培训

型号: STM32F4071GT6

精确频率: 168M

VCC: 电源

GND: 接地

ATM32程序结构

HARDWARE: 外设所需要的的.c, .h文件

OUTPUT: 其他生成文件

CMSIS: 存放关于芯片, 工程, 所需配置文件, 包括启动文件和头文件

FWLIB: ITM32的库函数, src: .c文件, inc: .h文件

my_lib: 关于车寻迹函数

SYSTEM: 关于端口和定时器

USER: 主函数, 启动文件在这里, 项目文件也在这里

GPIO接口配置

正常输出高电平3.3V, 低电平0

电从高往低流, 也就是说, 必须有一个高电平和一个低电平电流才会经过, 线路才会同, 另外如果两房电压相同就不会导通

VCC: 电源

GND: 接地

ITM32可以对LED引脚口的速度, 模式, 频率, 均可调整

输出模式

  • 开漏: 上方的P-MOS管完全不工作, 当IO口初入低电平0时, 经过反向INMOUS管导通, 使其输出接地, 当IO口输入1时, 无法直接输出为高电平时, 则P-MOS管和N-MOS管都关闭, 所以引脚既不输出低电平也不输出高电平(属于高阻态), 正常时必须外部接上拉电阻

  • 推挽(一般IO都使用该模式): 一般正常输出电平为0V和3.3V, 且需要高速切换状态的长场合, 还可以通过输出驱动器完成复, 即使用基础IO完成其他复用(本次试验未使用)功能(例如串口, I2C, SPI等)

需要知道怎么正确的配置端口


// 定义

typedef struct{

uint32_t GPIO_Pin;

GPIOMode_TypeDef GPIO_Mode;

GPIOSpeed_TypeDef GPIO_Speed;

GPIOOType_TypeDef GPIO_OType;

GPIOPuPd_TypeDef GPIO_PuPd;

}GPIO_InitTypeDef;

// 解释

typedef struct{

/**通用输入和输出端口

* 在SMT32F406中每个通用GPIO组共有16个端口, 分别是GPIO_Pin_0, GPIO_Pin_1, GPIO_Pin_2, GPIO_Pin_3, GPIO_Pin_4, GPIO_Pin_5, GPIO_Pin_6, GPIO_Pin_7, GPIO_Pin_8, GPIO_Pin_9, GPIO_Pin_10, GPIO_Pin_11, GPIO_Pin_12, GPIO_Pin_13, GPIO_Pin_14, GPIO_Pin_15, 应对端口0~15.

* 端口可以选择多个, 使用符号"|"进行或运算即可合并, 比如同时选择0和1端口: GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1.

* 如果需要同时初始化16个端口可以使用GPIO_Pin_All

*/

uint32_t GPIO_Pin;

/**用输入输出模式

* GPIO_Mode_IN: 通用输入模式, 端口能够读取当前电平的高低, 读取电压的范围是5V3.3V~0V, 返回有效值只有一位, 非0即1;

* GPIO_Mode_OUT: 输出模式, 端口能够输出电平, 控制输出口的电压方位为3.3V~0V. 实际输出时高电平为3.3V, 低电平为0V;

* GPIO_Mode_AP: 复用模式, 端口复用到芯片内置的各种功能寄存器上, 比如串口发送接收, SPI通信, Can总线等. 这些寄存器没有直接的输出口, 都是通过复用端口完成他们的功能;

* GPIO_Mode_AN: 模拟输入模式, 端口能够读取当电路的模拟电压值, 分辨率为4096(12bit), 采集范围为3.3V~0V. 采集电压尽可能不要超过3.3V, 否则可能会对芯片产生损坏.

*/

GPIOMode_TypeDef GPIO_Mode;

/**输入输出速度

* 只有在 GPIO_Mode = GPIO_Mode_OUT | GPIO_Mode_AP; 才会生效

* 可选择速度: GPIO_Speed = GPIO_Speed_2MHz | GPIO_Speed_25MHz | GPIO_Speed_50MHz | GPIO_Speed_100MHz;// (默认GPIO_Speed_100MHz), (GPIO_Speed_2MHz 低速, GPIO_Speed_25MHz 中速, GPIO_Speed_50MHz 快速, GPIO_Speed_100MHz 超高速)

*/

GPIOSpeed_TypeDef GPIO_Speed;

/**通用输出输出类型

* 只有在 GPIO_Mode = GPIO_Mode_OUT | GPIO_Mode_AP; 才会生效

* 可选类型: GPIO_OType_OD | GPIO_OType_PP

*

* GPIO_OType_OD(开漏输出): 输出"0"可激活N-MOS输出低电平, 而输出"1"会使端口保持高速态(Hi-Z)(P-MOS始终不可激活)

* GPIO_OType_PP(推挽输出): 输出"0"可激活N-MOS输出低电平, 而输出"1"可激活P-MOS输出高电平

*/

GPIOOType_TypeDef GPIO_OType;

/**通用输入输出内部上下位

* 通常在右侧情况下使用 GPIO_Mode = GPIO_Mode_IN;

* GPIO_PuPd = GPIO_PuPd_NOPULL | GPIO_PuPd_UP | GPIO_PuPd_DOWN;

* GPIO_PuPd_NOPULL(无上下拉的浮空输入): 通常用于读取有着上位电阻电路的电平

* GPIO_PuPd_UP(上拉输出): 通常用于无上拉电阻电路或设置通信要求的电平状态(高电平为准备读取信号的状态), 在端口浮空下读取的电子为高电平. 电路中的电平被拉高或拉低时, 读取的电平为电路中的电平. 即无信号输入时输入端的电平为高电平.

* GPIO_PuPd_DOWN(下拉输出): 通常用于无上拉电阻电路中, 在端口浮空下读取的电平为低电平. 电路中的电平被拉高或拉低时, 读取的电平为电路中的电平. 即无信号输入时输入端的电平为低电平.

*/

GPIOPuPd_TypeDef GPIO_PuPd;

}GPIO_InitTypeDef;