stm32f407-01(GPIO)
文章目录
- 1.摘要
- 2. 嵌入式的概述(了解)
- 2.1 定义
- 2.2 特点
- 2.3 stm32的认知
- 2.4 ARM的简单认识
- 2.5 ARM内核分类
- 3.环境搭建
- 4. stm32的开发方式
- 5.最小系统
- 6.GPIO
- 6.1 GPIO概念
- 6.2 原理讲解
- 6.3 GPIO开发流程
- 6.3.1 寄存器了解
- 6.3.2 详细代码
1.摘要
stm32采用晋中的stm32f407ZGT6开发板学习。
标准库(主)
2. 嵌入式的概述(了解)
2.1 定义
嵌入式就是以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于对于体积、可靠性、功耗、性能等方面有严格要求的专用计算机系统,要求嵌入式开发人员对嵌入式知识体系有清晰的认知。
简单来说,嵌入式就是把计算机技术 “嵌入” 到各种设备里,让这些设备变得更智能、更有用,能完成特定的任务。
2.2 特点
专用性强:嵌入式系统就像 “专业选手”,只干一件事。比如智能家居里的温度传感器只测温度,汽车里的电子控制单元只管车子的动力和刹车等,专注把特定任务做好。
实时性要求高:就像打游戏要快速反应,嵌入式系统必须马上处理信息。比如工厂里监控设备发现机器温度过高,得立刻报警、降温,不然机器就可能损坏 。
资源受限:嵌入式设备的 “家当” 有限,处理器没那么快,内存和存储空间也不大。开发人员就像精打细算的 “管家”,得巧妙安排软硬件,让系统在资源不多的情况下把活干漂亮。
可靠性高:用在航空航天、医疗这些重要地方的嵌入式系统,必须超稳定。就像飞机上的控制系统,绝对不能出故障,不然就会酿成大祸,所以要能在高温、低温等恶劣环境下稳定工作。
2.3 stm32的认知
ST:意法半导体,是一个公司的名字。
M:表示微控制器
32:表示这是一个 32bit 的微控制器
2.4 ARM的简单认识
是一家公司 ;设计芯片的IP内核(不生产芯片) ;授权给其他的半导体公司(三星、ST意法半导体、TI德州仪器 )
2.5 ARM内核分类
Cortex A :面向高端智能产品(手机、平板、数字电视等)
Cortex R:面向高性能实时应用(航空航天、汽车制动系统等)
Cortex M:面向成本敏感型产品(低功耗、智能穿戴产品、智能家居、消费类电子产品…)
3.环境搭建
1.MDK软件的下载(一般都是使用德国KEIL公司设计的KEIL5)
2.CH340 驱动安装
具体安装步骤就不演示了,大家可以自行查找资料进行安装,也可以后台私我,免费领取资料
4. stm32的开发方式
1.库函数
ST公司为STM32开发了两套开发库:标准外设库和HAL库。目前,ST主推HAL库,并已停止维护标准外设库。不过在国内市场,标准外设库仍占据主流地位,这主要得益于其稳定性高、参考资料丰富、维护难度较低等优势。这两套库本质上是ST官方提供的函数接口集合。借助库函数进行开发,开发者无需深入钻研底层寄存器操作,只需掌握C语言基础,就能通过调用函数完成寄存器配置。比如,使用标准外设库配置GPIO端口时,只需调用对应函数并传入参数,就能轻松设置引脚模式;而HAL库进一步封装了底层操作,以统一的函数接口适配不同系列芯片,便于跨平台开发。这种开发方式大幅降低了STM32的开发门槛,让更多工程师能快速上手,加速项目落地。
2.寄存器开发
直接操作寄存器开发。(难)
3.图形界面开发
STM32CubeMx+HAL库;用户只需要根据实际情况来选择对应的按钮和功能就可以自动生成代码,可以极大程度的提高开发效率。
5.最小系统
STM32 最小系统是能让 STM32 微控制器正常工作的最基本电路组合,它是开发和使用 STM32 的基础。
(1)晶振电路
晶振电路在 STM32 最小系统中为芯片提供稳定的时钟信号,就像心脏为人体提供稳定的跳动节奏一样。
(2)复位电路
复位电路在 STM32 系统里扮演着关键角色,其主要作用是让 STM32 芯片恢复到初始状态,就像给系统 “重启” 一样,
(3)电源电路
为整个系统提供稳定的电力供应,确保各功能模块的正常运行
6.GPIO
6.1 GPIO概念
没事多研究研究
在stm32中文参考手册7章通用 I/O (GPIO)中详细描述了stm32的GPIO的原理。
1.概念:GPIO指的是通用的输入输出端口,可以由用户通过软件配置的方式来进行控制,GPIO引脚需要和外设连接在一起的,就可以和外设实现通信以及采集数据等功能。
2.定义:指的是对芯片的某个引脚进行高低电平的输出,以及可以去检测某个引脚的电平状态。一般电平采用都是TTL电平信号,TTL电平信号规定:+5V等价于逻辑“1”,0V等价于逻辑“0”。
电平其实有一个电平范围:>2.4V就表示高电平,<0.4V就表示低电平。
3.图解
电源引脚 :VCC、VDD、VSS、VDDA、VSSA、VREF+等属于电源引脚
晶振引脚 :PC14、PC15、PH0、PH1就属于晶振引脚,也可以作为其他的功能使用
复位引脚 :NRST属于复位引脚
BOOT引脚 :BOOT0是专用引脚,BOOT1就属于功能引脚 (设置芯片的自举模式)
GPIO引脚 :芯片一共有144引脚,但是GPIO引脚有114个
下载引脚 :PA13、PA14、PB3、PB4等都属于下载引脚(JTAG、SWD)
4.引脚的命名规则
一般是由P开头,分为很多组,以字母A ~ H来命名,每个组有16个引脚,引脚的编号为0 ~ 15,所以如 PA0 ~ PA15 PB0~PB15等。
5.引脚的功能
芯片的引脚有很多的功能,一般默认的功能都是作为GPIO(输入输出),但是引脚也有其他的功能,被称为“第二功能”,只有在使用ADC通道和DAC需要把引脚设置模拟模式,**其他情况下想要把引脚当做别的功能使用,需要把引脚设置复用模式。**具体的引脚功能需要查看STM32 芯片数据手册获取信息(第三章)。
6.2 原理讲解
要了解P-MOS 和 N-MOS 管//TTL施密特的基本原理
通过stm32原理图和中文参考手册,我们对GPIO工作模式做以下总结
(1)输入模式(上拉、下拉、浮空)
(2)输出模式(推挽/开漏、上拉/下拉)
(2)输出模式(推挽/开漏、上拉/下拉)
(4)模拟输入输出(上下拉无影响)
6.3 GPIO开发流程
在熟悉了GPIO的结构和原理之后,就可以上手做一个小案例。
点亮第一个LED
第一步:查看芯片原理图,找到LED的引脚(PF9/PF10)
第二步:进行代码编写(默认环境以经搭建好)
6.3.1 寄存器了解
1.总览
2.端口模式寄存器
3.端口输出类型寄存器
4.端口输出速度寄存器
5.端口上拉/下拉寄存器
6.端口输入输出寄存器
在库函数这里有开发流程帮助,大家可以去参考
6.3.2 详细代码
mian.c
#include "stm32f4xx.h"
#include "led.h"int main()
{//硬件初始化led_init();while(1){//打开LED1和LED2led_open(LED1|LED2);}
}
led.h
#ifndef _LED_H_
#define _LED_H_#include "stm32f4xx.h"#define LED1 GPIO_Pin_9
#define LED2 GPIO_Pin_10void led_init(void);
void led_close(uint16_t Pin);
void led_open(uint16_t Pin);#endif
led.c
#include "led.h"void led_init(void)
{GPIO_InitTypeDef GPIO_InitStruct;//1.打开GPIOF外设时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);//2.GPIO配置GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOF,&GPIO_InitStruct);//默认关GPIO_SetBits(GPIOF, GPIO_Pin_9|GPIO_Pin_10);
}void led_close(uint16_t Pin)
{GPIO_SetBits(GPIOF, Pin);
}void led_open(uint16_t Pin)
{GPIO_ResetBits(GPIOF, Pin);
}
本章节默认大家有C语言基础和51/32一些基础
##紧当个人笔记,有错在评论区指出来,谢谢!