STM32-Day02(新建STM32工程基本了解GPIO)
2026/6/7 1:28:55 网站建设 项目流程

二、新建STM32工程

2.1 新建STM32工程步骤

步骤如下

  1. 建立工程文件夹,keil中新建工程,选择型号

  2. 工程文件夹里监理Start、Library、User(main函数)等文件夹,复制固件库里面的文件到工程文件夹

    注意此处新建main.c文件一定要将地址选择为User,否则将会不匹配

    main.c中的头文件要选择stm32f10x.h,同时文件的最后一行必须是空行否则会报警告。

  3. 工程里对应监理Start、Library、User(main函数)等同名称的分组,然后将文件夹内的文件添加到工程分组里

  4. 工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹

  5. 工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER

  6. 工程选项,Debug,下拉列表选择对应调试器,Setting,FlashDownload里勾选Reset and Run

2.2 STLINK使用

接线注意看买回来的硬件上面的标号,每两个引脚之间需要相互对应即可

Keil配置:魔术棒--->Debug--->ST-Link Debugger

2.3 工程架构

左半部分(紫色+蓝色)是主动执行的部分

startup:启动文件,程序执行最基本的文件,使用汇编语言完成,是整个程序的入口

其中的复位中断函数是由文件自动编译好的,定义在system_xx.c/.h中

其他中断的定义在stm32f10x_it里面

右半部分(红色+绿色)是被动执行的部分

在主函数或者中断函数里,可以调用这些资源

三、GPIO

3.1 GPIO输出

3.1.1 GPIO简介
  • GPIO(Gneral Purpose Input Output)通用输入输出口(I/O口)

  • 根据使用场景可配置为8种输入输出模式

  • 引脚电平:0V~3.3V,部分引脚可容忍5V(对于输入而言,但是输出最大是3.3V,因为供电是3.3V)

  • 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议(I2C、SPI)输出时序等,如果是功率比较大的设备,只需要再加入驱动电路即可

  • 输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入(光敏、热敏电阻)、ADC电压采集、模拟通信协议接收数据等

3.1.2 GPIO基本结构

在STM32中,所有的GPIO都是挂载在APB2外设总线上的。

命名规则是:GPIOA、GPIOB、GPIOC……

每个GPIO外设,总共有16个引脚,编号是从0到15,PA0、PA1……PA15

内核可以通过APB2总线对寄存器(32位)进行读写,以完成输出电平和读取电平的功能,驱动器可以增大驱动能力

3.1.3 GPIO位结构(电路如何工作)

左边部分是寄存器,中间是驱动器,右边是某一个IO口的引脚,整体可以分为两个部分,上面是输入部分,下面是输出部分

输入部分

右边接两个保护二极管,对输入电压进行限幅,上方连VDD(芯片供电正极) 3.3V,下方接VSS(芯片供电负极) 0V,保证电压在这个范围内

两个开关可以控制上拉和下拉输入模式,上面导通就是上拉,下面导通就是下拉,如果都断开就是浮空输入模式。接入上拉电阻,当引脚悬空时们还有上拉电阻来保证引脚的高电平,所以上拉输入又可以称作是默认为高电平的输入模式,下拉同理,默认为低电平的输入模式。

施密特触发器:如果输入电压大于某一阈值,输出就会瞬间升为高电平,如果输入电压小于某一阈值,输出就会瞬间降为低电平,其余状态保持不变;数字信号在输入的时候会产生各种失真,该触发器可以有效避免因信号波动造成的输出抖动现象

红色为失真的数字信号,蓝色为经过施密特触发器的信号

经过触发器的信号直接进入输入数据寄存器,上面两条线路是连接到片上外设的一些端口

输出部分

数字部分可以由输出数据寄存器或片上外设控制,两种控制方式通过数据选择器接到了输出控制部分

位设置/清除寄存器:可以用来单独操作输出数据寄存器的某一位,而不影响其他位,因为输出数据寄存器同时控制16个端口,并且寄存器只能整体读写,如果想单独控制需要别的方式,第一种方式是先读出这个寄存器,然后用按位与和按位或的方式更改某一位,然后再将更改后的数据写回去,但是效率不高。第二种方式是操作该寄存器,如果要对某一位进行置1的操作,在位设置寄存器的对应位写1即可,剩下不需要的位写0,如果想置0,就在位清楚寄存器的对应位写1即可,注意!!!不管是置1还是0都是在不同寄存器位置上写1。

两个MOS管:电子开关,通过代码控制,可以选择推挽(强推模式)、开漏或关闭三种输出方式

推挽输出模式下,P-MOS和N-MOS均有效,数据寄存器为1时,上管导通,下管断开,输出直接接到VDD,输出高电平,为0时,上管断开,下管导通,输出直接接到VSS,就是输出低电平

开漏输出模式下,数据寄存器为1,下管断开,输出相当于断开也就是高阻模式,为0时,下管导通,输出直接接到VSS,也就是输出低电平,这个模式只有低电平有驱动能力作为通信协议的驱动方式I2C通信的引脚,就是使用的开漏模式,在多机通信的情况下,这个模式可以避免各个设备互相干扰。开漏模式还可以用于输出5V的电平信号,在IO口外接一个上拉电阻到5V的电源,当输出高点平时,由外部的上拉电阻拉高至5V

关闭输出模式下,两个管都无效,输出关闭,端口电平由外部信号来控制

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询