0%

GPIO入门

Main Takeaway

Following 哈工深上传到B站的电控组培训来入门robomaster电控组,我购买了普中科技玄武套餐开发板作为硬件。

本篇介绍我学习GPIO的见闻

GPIO

简介

GPIO:general purpose input output通用输入输出,一种外设与大部分芯片引脚挂钩。

GPIO时最基本功能,高电平3.3V,低电平0V,单片机对外设的所有操作都通过GPIO进行的

八种模式

四种输入,四种输出

image-20230815145636958

VDD表示器件内部的工作电压,VSS通常指电路公共接地端电压。 对于数字电路来说,VDD是芯片的工作电压,VSS是接地点,在场效应管中,VDD为漏极,VSS为源极,VDD和VSS指的是元件引脚

  • 输入浮空:不确定,根据阈值确定0和1(不常用),浮空什么都不接,高阻态,数据传输时较多

    image-20230815145657948
  • 输入上拉:拉就是把点位拉高,比如拉到Vcc。上拉就是将不确定的信号通过一个上拉电阻嵌位在高电平。电阻同时起到限流的作用。

    无输入——1,有输入——取决于输入

    image-20230815145710226
  • 输入下拉:

    无输入——0,有输入——取决于输入

    image-20230815145727794
  • 模拟输入:ADC,可推出读入电压的大小

    image-20230815145737614
  • 开漏输出:一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。(低电压控制高电压)

    0——输出0,1——浮空

    image-20230815145748091
  • 推挽输出(最多):可以输出高,低电平,连接数字器件。推挽结构一般是指两个三级管分别受到互补信号的控制,总是在一个三极管导通的时候另一个截止

    0——0,1——1

    image-20230815145757519
  • 推挽式复用:可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用)

    image-20230815145810824
  • 开漏式复用:可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用)

    image-20230815145820371

常用函数

  • 设置GPIO电平高低
1
HAL_GPIO_WritePin(GPIOx,GPIO_Pin,GPIO_state);

GPIOX代表目标引脚的端口号,例如GPIOB。 GPIO_Pin代表目标引脚的引脚号,例如GPIO_Pin_5。 GPIO_state代表当前引脚的高低电平,高电平(GPIO_PIN_SET)熄灭、低电平(GPIO_PIN_RESET)点亮。

  • 翻转GPIO电平状态
1
HAL_GPIO_TogglePin(GPIOx,GPIO_Pin); //toggle  v.切换
  • 读取GPIO电平状态
1
HAL_GPIO_ReadPin(GPIOx,GPIO_Pin);

Tips:GPIO用|,挺常见的(用+也一样)

实验

分别做了跑马灯和按键点亮GPIO的实验

BONUS

CubeMX

一、基本概念:

  • RCC: Reset and Clock Control,即复位和时钟控制。

  • HSE: High Speed External Clock signal,高速外部时钟信号,即是OSC_IN和OSC_OUT接口所接的4~16MHz的晶振,一般接8MHz。

    Tips:72MHz,我在CubeMX中设置的72但是在keil中打开工程还是8MHz,很奇怪(我只能手动修改)

  • LSE: Low Speed External Clock signal,低速外部时钟信号,即是OSC32_IN和OSC32_OUT接口,指外部用于RTC的32.768KHz晶振。

  • HSI: High Speed Internal Clock signal,高速内部时钟信号,出厂校准的8MHz内部RC振荡器。

  • LSI: Low Speed Internal Clock signal,高速内部时钟信号,带有校准功能的40KHz的内部RC振荡器。

  • RTC: Real Time Clock实时时钟,用于带有年、月、日、小时、分钟、秒钟的计时器。

  • PLL:锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。

  • SYSCLK:系统时钟,最高72MHz。

  • AHB:高级高性能总线,这是一种“系统总线”AHB主要用于高性能模块(如CPU、DMA和DSP等)之间的连接。AHB 系统由主模块、从模块和基础结构(Infrastructure)3部分组成,整个AHB总线上的传输都由主模块发出,由从模块负责回应。

  • APB:是一种外围总线。APB主要用于低带宽的周边外设之间的连接,例如UART等,它的总线架构不像 AHB支持多个主模块,在APB里面唯一的主模块就是APB 桥。

二、外部晶振与内部晶振的区别:

外部晶振比较稳定而内部晶振的误差比较大,但如果对频率要求不高,如不涉及到串口通信和精确定时等情况时,则可以使用内部晶振。所以如果对频率要求不高,则一般是优先使用内部晶振。如果要省电,用到了SLEEP,则不能使用内部晶振,因为内部振荡会停止。

  • debug:SWD,JTAG(4/5 pins)

  • 选引脚后,在GPIO中进一步配置:

    GPIO mode,maximum output speed(速度越快耗电越大,high就完事了)

  • RCC配置时钟(Crystal):选择HSE:Crystal/Ceramic Reasonator外部晶振(HSI内部时钟,慢/不准确)

    Tips:时钟树的配置,晶振能在板子原理图中看

普中ARM仿真器

普中免驱版ARM仿真器:选择CMSIS-DAP Debugger

Tips:一般开始先build(比rebuild节约时间)

可用20PIN的线直连,也可自己接线用杜邦线把仿真器和板子对应引脚连接:

JTAG接线方式:1、3、4、5、7、9、13、15

SWJ接线方式:1、 4、 7、 9

仿真器接线

ARM 仿真器种类与概念

JTAG、SWD是仿真器协议接口。

JLink、ULink、ST-Link是各家公司仿真器的名字:调试仿真器是为了嵌入式程序开发时,连接电脑和单片机,方便于调试、仿真、下载嵌入式程序的设备。

JATG协议

JTAG(Joint Test Action Group,联合测试行动小组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如ARM、DSP、FPGA器件等。JTAG调试接口必须使用VCC、GND电源信号,以及TMS、TCK、TDI、TDO四根调试信号,可选TRST、RESET复位信号和RTCK(同步时钟)信号。

  • VREF:目标表参考电压信号,用于检测目标板是否供电,直接与目标板VDD相连,并不向外提供输出电压;
  • TRST:JTAG复位,连接到目标板CPU的nTRST引脚,用于复位CPU调试接口的TAP控制器;目标板上应该将此脚上拉到高电位,避免意外复位,可选引脚;
  • TDI:测试数据输入,建议在目标板上上拉到VDD;
  • TMS:测试模式选择,必须在目标板上将此引脚上拉;
  • TCK:测试时钟输入,建议在目标板上将此引脚上拉;
  • TDO:测试数据输出;
  • RTCK: 目标板提供仿真器的时钟信号,有些项目中是要求JTAG的输入与其内部时钟信号同步,仿真器利用此引脚的输入可动态的控制自己的TCK速率;
  • RESET:仿真器输出至目标CPU的系统复位信号,可选信号;

SWD接口

串行调试(Serial Wire Debug),SWD是ARM调试公司提出的另外一种调试接口,相对于JTAG接口,占用更少的端口资源,四根信号如下:

  • Vre:目标表参考电压信号,用于检测目标板是否供电,直接与目标板VDD相连,并不向外提供输出电压;

  • GND:公共地信号;

  • SWDIO:串行数据输入信号,作为仿真信号的双向数据信号线,建议上拉;

  • SWCLK:串行时钟输入,作为仿真信号的时钟信号线,建议下拉;

  • SWO:串行数据输出,CPU调试接口可通过SWO输出一些调试信息,该引脚可选。

  • RESET:仿真器输出至目标CPU的系统复位信号;是可选信号。

Tips:JTAG中的TRST和RESET,以及SWD中的RESET:虽然都是可选信号,建议连接,使得仿真器能够在连接器前对器件进行复位,已获得较理想的状态,便于后续连接仿真。

JLink仿真器

J-Link连接到计算机用的是USB接口,而到目标板内部用的还是jtag协议。它完成了一个从软件到硬件转换的工作。

J-Link是德国 SEGGER 公司的仿真器,得到所有主流的 IDE 的支持。支持SWIM / JTAG / SWD下载。速度,效率,功能都很好,据说是众多仿真器里最强悍的。

ULink仿真器

ULINK是ARM/KEIL公司推出的仿真器,ULINK2和ULINK Pro仿真器。ULINK/ULINK2可以配合Keil软件实现仿真功能,

Tips:但是要注意的是,ULINK是KEIL公司开发的仿真器,专用于KEIL平台下使用,ADS、IAR下不能使用。

ST-Link仿真器

​ ST-LINK是专门针对意法半导体STM8和STM32系列芯片的仿真器。ST-LINK /V2指定的SWIM标准接口和JTAG / SWD标准接口,其主要功能有:

  • 编程功能:可烧写FLASH ROM、EEPROM、AFR等;
  • 仿真功能:支持全速运行、单步调试、断点调试等各种调试方法,可查看IO状态,变量数据等;
  • 仿真性能:采用USB2.0接口进行仿真调试,单步调试,断点调试,反应速度快;
  • 编程性能:采用USB2.0接口,进行SWIM / JTAG / SWD下载,下载速度快;

References