Main Takeaway
Following 哈工深上传到B站的电控组培训来入门robomaster电控组,我购买了普中科技玄武套餐开发板作为硬件。
本篇介绍我学习GPIO的见闻
GPIO
简介
GPIO:general purpose input output通用输入输出,一种外设与大部分芯片引脚挂钩。
GPIO时最基本功能,高电平3.3V,低电平0V,单片机对外设的所有操作都通过GPIO进行的
八种模式
四种输入,四种输出
VDD表示器件内部的工作电压,VSS通常指电路公共接地端电压。 对于数字电路来说,VDD是芯片的工作电压,VSS是接地点,在场效应管中,VDD为漏极,VSS为源极,VDD和VSS指的是元件引脚
输入浮空:不确定,根据阈值确定0和1(不常用),浮空什么都不接,高阻态,数据传输时较多

输入上拉:拉就是把点位拉高,比如拉到Vcc。上拉就是将不确定的信号通过一个上拉电阻嵌位在高电平。电阻同时起到限流的作用。
无输入——1,有输入——取决于输入

输入下拉:
无输入——0,有输入——取决于输入

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

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

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

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

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

常用函数
- 设置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下载,下载速度快;