参考教程:【STM32入门教程-2023版 细致讲解 中文字幕】
标准库开发新建工程准备工作:
- 建立工程文件夹,Keil中新建工程,选择型号STM32F103C8T6
- 工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹
- 工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里
- 工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹
- 工程选项,C/C++,Define内定义STM32F10X_MD,USE_STDPERIPH_DRIVER
- 工程选项,Debug,下拉列表选择对应调试器,Settings,Flash Download里勾选Reset and Run
STM32标准库工程架构:
GPIO简介:
- GPIO(General Purpose Input Output)通用输入输出口其接脚可以供使用者由程序控制自由使用
- 可配置为8种输入输出模式
- 引脚电平:0V~3.3V,部分引脚可容忍5V
- 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等
- 输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等
GPIO基本结构:
驱动器能够增加IO口的驱动能力。GPIO挂载在APB2上(APB (Advanced Peripheral Bus) 低速总线,用来接低速外设的。)
GPIO配置模式:
GPIO标准库代码流程:
1.使能RCC(Reset and Clock Control)复位与时钟控制器
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
2.定义GPIO_InitTypeDef 结构体,赋值初始化参数
GPIO_InitTypeDef GPIOA_InitTypeStruct;
GPIOA_InitTypeStruct.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIOA_InitTypeStruct.GPIO_Pin = GPIO_Pin_0; //0引脚
GPIOA_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz; //50MHz速度
3.将结构体取地址传入GPIO_Init函数,指明初始化GPIO为GPIOA组(每一组有16个引脚)
GPIO_Init(GPIOA,&GPIOA_InitTypeStruct);
4.使用GPIO相关的库函数对GPIO进行操作
推挽输出和开漏输出
推挽式输出(Push-Pull Output):
推挽式输出电路是由互补的两个三极管构成,所谓推拉,推是指推出去,就是输出为高电平是,电流是由内流向外的,形象的称之为推;拉就是从外部向内部拉,当输出为低电平时,电流由负载流向内部,形象的称之为拉。
开漏输出(Open Drain Output) :
常说的与推挽输出相对的就是开漏输出,对于开漏输出和推挽输出的区别最普遍的说法就是开漏输出无法真正输出高电平,即高电平时没有驱动能力,需要借助外部上拉电阻完成对外驱动。下面就从内部结构和原理上说明为什么开漏输出输出高电平时没有驱动能力,以及进一步比较与推挽输出的区别。
驱动能力:又称之为带负载能力,说白了,就是指该电路的输出阻抗小,使得外接负载电路时,输出电路的输出电压能绝大部分加在负载上,就称之为带负载能力强。
八种配置模式的宏定义:
(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 复用推挽输出