STM32 JTAG端口作为GPIO口使用的方法

合集下载

STM32F103的SWD、JTAG接口remap禁止后

STM32F103的SWD、JTAG接口remap禁止后

手贱将STM32F103的SWD、JTAG接口remap禁止后单片机:stm32f103开发环境:keil uvision4烧写器:J-link,SWD接口使用STM32F103的PB3引脚作为GPIO口,但其默认功能为JTDO,需要remap。

Remap 中,使能GPIO_Remap_SWJ_JTAGDisable就可以了,这样是禁止JTAG,但保留SWD,因为板子设计用的是使用SWD接口进行烧写。

结果手贱,尝试了GPIO_Remap_SWJ_Disable,将整个SWD和JTAG都禁止了。

好吧,接下来就是程序运行完毕remap后,keiluvision4就不能再读取stm32的寄存器内容了,变量窗口的变量不能再查看了;想再重新烧写下、擦除下,提示错误,no cortex-m device,断电再上电,也不行,因为flash中的程序上电后自动运行,将SWD口禁止了。

网上查,解决方法是“将BOOT0脚和BOOT1脚接3.3V,这种方法是由RAM启动,所以之前你烧进去的程序是不会运行的,也就不存在JTAG被禁止”。

如果你的板子上做了BOOT 启动选择电路,那你就可以不用往下看了。

但略坑的是我的板子上的BOOT0已经直接接到GND了,总不能割线再飞线吧。

然后想到的就是NRST复位了。

但是,再次略坑的是板子上没有做手动复位电路,NRST 悬空在。

好吧,还好,NRST复位脚悬空在,而不是直接拉高。

比较幸运的是板子上焊接了一个拨码开关模块,开关ON时,接GND,开关OFF时,悬空。

接下来使用NRST来实现重新烧写。

飞线将NRST接到该开关,打到ON档,将NRST接GND。

板子上电,烧写时提示错误:cpudid not halt after reset(类似于这样,记不清)。

这是因为NRST一直为低,CPU一直为复位。

比较幸运的是,keil+J-Link还是比较执着,尝试一次不成功后,还尝试了第2、第3次等(具体几次不记得了,从output消息窗口可看出J-Link尝试了好几次)。

stm32GPIO口工作原理详细解释

stm32GPIO口工作原理详细解释

STM32的GPIO介绍STM32引脚说明GPIO是通用输入/输出端口的简称,是STM32可控制的引脚。

GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。

STM32F103ZET6芯片为144脚芯片,包括7个通用目的的输入/输出口(GPIO)组,分别为GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG,同时每组GPIO口组有16个GPIO口。

通常简略称为PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x为0-15。

STM32的大部分引脚除了当GPIO使用之外,还可以复用位外设功能引脚(比如串口),这部分在【STM32】STM32端口复用和重映射(AFIO辅助功能时钟)中有详细的介绍。

GPIO基本结构每个GPIO内部都有这样的一个电路结构,这个结构在本文下面会具体介绍。

这边的电路图稍微提一下:保护二极管:IO引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入。

当引脚电压高于VDD时,上方的二极管导通;当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。

但是尽管如此,还是不能直接外接大功率器件,须加大功率及隔离电路驱动,防止烧坏芯片或者外接器件无法正常工作。

P-MOS管和N-MOS管:由P-MOS管和N-MOS管组成的单元电路使得GPIO具有“推挽输出”和“开漏输出”的模式。

这里的电路会在下面很详细地分析到。

TTL肖特基触发器:信号经过触发器后,模拟信号转化为0和1的数字信号。

但是,当GPIO引脚作为ADC采集电压的输入通道时,用其“模拟输入”功能,此时信号不再经过触发器进行TTL电平转换。

ADC外设要采集到的原始的模拟信号。

这里需要注意的是,在查看《STM32中文参考手册V10》中的GPIO的表格时,会看到有“FT”一列,这代表着这个GPIO口时兼容3.3V和5V 的;如果没有标注“FT”,就代表着不兼容5V。

STM32开发板使用说明

STM32开发板使用说明

STM32开发板使用说明1、开发板使用到的软件及安装说明在开始学习开发板之前需要安装的软件有:1、KEIL3.80A,2、PL-2303HX驱动,3、串口调试助手,4、下载器MCUISP。

这些软件在课件文件下面的软件文件里。

具体安装步骤如下:1.KEIL3.80A的安装,打开路径:课件\软件\KEIL3.80A\MDK3.80A安装手册,根据上面的步骤安装软件。

2.PL-2303HX驱动的安装,打开路径:课件\软件\PL-2303HX新版驱动,可根据使用电脑的操作系统来选择安装的软件,如选择安装XP驱动,可打开XP驱动,根据里面的安装说明来安装软件。

一般只要运行PL-2303 Driver Installer。

exe就可以了。

3.串口调试助手的安装,打开路径:课件\软件\串口调试助手,点击sscom33。

exe即可,也可以创建快捷方式在桌面。

4.下载器MCUISP的安装,打开路径:课件\软件\下载器MCUISP,点击mcuisp。

exe 即可,也可以创建快捷方式在桌面。

2、开发环境介绍及使用说明首先是我们之前安装的keil3.80a。

再点击Project->New uVision Project如下图所示:弹出create new project 对话框,新建一个文件夹TEST,然后把工程名字设为test。

点击保存。

弹出选择器件的对话框,因为我们的开发板使用的是STM32F103RBT6 ,所以在这里我们选择STMicroelectronics 下面的STM32F103RB( 如果使用的是其他系列的芯片,选择相应的型号就可以了)。

如下图所示:点击OK,MDK会弹出一个对话框,问你是否加载启动代码到当前工程下面,这里我们选择是。

启动代码是一段和硬件相关的汇编代码。

是必不可少的!在上面点击了是以后,MDK 就把启动代码STM32F10x。

s 加入到了我们的工程下面。

如下图所示:到这里,我们就可以开始编写自己的代码了。

STM32低功耗做法

STM32低功耗做法

具体要点为:1、所有IO管脚,如果高阻状态端口是高电平,就设成上拉输入,如果高阻状态是低电平,设成下拉输入,如果高阻是中间状态,设成模拟输入。

这个很多人都提到过,必须的。

作为输出口就免了,待机你想输出个什么东西,一定要输,硬件上加上下拉就可以了2、两个晶振输入脚要remap成普通IO!!!使用内部晶振。

3、pwr的时钟要使能,即RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);这个也相当重要4、关闭jtag口,并设成普通IO;5、注意助焊膏的质量!!!注意电路板层之间是否进水!!!!掌握这几项要点,再设中断什么的都行,整个世界清静了!!!完全低能耗刚开始进入STOPMode后,整机功耗有300uA的,此时外围其他硬件电路电流已经可以肯定漏电流在nA级,因此调试方向在主芯片,经过实际测试,都是GPIO配置的问题,比如某个GPIO为中断输入,闲置为低电平,而我们配置成了IPU,因此内部的40K上拉就会在这里消耗3/40k =75uA,另外将N.C的GPIO配置成Floating Input,也会有一些漏电流,实际测试漏电流不大;另外将STM32F05x直接PIINtoPIN替代STM32100,所以Pin35,36的PF6,PF7为之前的VCC,GND,因此要相应的配置为IPU,IPD,才不会有拉电流/灌电流;外部不使用晶振,因此必须将其配置为IPU/IPD或者输出Low,如果配置成Floating,实测消耗200uA+的电流,这个特别注意。

另外不需要关闭不用的外设的CLK,因为STOPMODE会将内部1.8V的core关闭,因此该步骤不影响功耗。

因此在进入STOPMODE之前,需要做:1、将N.C的GPIO统一配置为IPU/IPD;2、检查一些Signal的输入Active是High/Low,相应进行配置为IPD/IPU,即避免在内部上/下拉电阻上消耗电流,而且该电流理论值为VCC/R = 3/40 =75uA;3、如果外部晶振不使用,必须将GPIO配置为IPU/IPD/PPLow,不允许配置为floating,否则会消耗极大的电流200uA+;4*、加入进入STOPMODE前,不允许将PWR的CLK关闭,这部分牵涉低功耗模式,实际测试关闭能用,也能唤醒,但是电流会增加10uA+;5、配置GPIO为输出时,根据输出的常态选择上拉/下拉,如闲置输出为0,则配置为下拉,输出闲置为1,则配置上拉;6、另外特别说明的是->从Stopmode唤醒后,系统会自动切换到HSI,如果进入前使用的是外部晶振/PLL(PLL的clksource = HSI/HSE)因此必须调用System_Init(),对RCC重新初始化,否则唤醒后主频发生改变,会影响系统;STM32F103R8和RC的停机模式的休眠电流还不一样,R8停机模式实测为11UA,RC停机模式实测为30uA,还以为又是我的程序哪里没做好呢,仔细看了PDF,这两个芯片PDF上标的值的确有区别,和我测的值差不多,那我就没有再深究的意义了!结合下文的高手经验,反复摸索,standby模式1.9uA,PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI); stop模式:11uA, PWR_EnterSTANDBYMode();实验证明,将IO端口设成IPU/IPD/AIN/PPOUT=1/PPOUT=0/ODOUT=0,电流是基本相同的,最可怕的就是GPIO浮空,且电路上未外接上拉下拉,这样电流就会比较大。

STM32单片机的八种IO口模式解析

STM32单片机的八种IO口模式解析

STM32单片机的八种IO口模式解析
STM32八种IO口模式区别
(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复用推挽输出
以下是详细讲解
(1)GPIO_Mode_AIN模拟输入
即关闭施密特触发器,将电压信号传送到片上外设模块(不接上、下拉电阻)
(2)GPIO_Mode_IN_FLOATING浮空输入
浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的
(3)GPIO_Mode_IPD下拉输入GPIO_Mode_IPU上拉输入
一般来讲,上拉电阻为1K-10K,电阻越小,驱动能力越强
电阻的作用:防止输入端悬空,减少外部电流对芯片的干扰,限流;,增加高电平输出时的驱动能力。

上拉输入:在默认状态下(GPIO引脚无输入)为高电平
下拉输入:在默认状态下(GPIO引脚无输入)为低电平
(4)GPIO_Mode_Out_OD开漏输出
开漏输出:输出端相当于三极管的集电极。

要得到高电平状态需要上拉电阻才行。

适合于做电流型的驱动,。

推荐-第4章 stm32单片机通用输入输出GPIO 精品

推荐-第4章 stm32单片机通用输入输出GPIO 精品
软件重新映射复用功能
为了使不同器件封装的外设IO功能的数量达到最优,可以把一些复用 功能重新映射到其它一些引脚上,这可以通过软件配置相应的寄存器 来完成。
USART3_TX 的默认引出脚是 PB10, USART3_RX 的默认引出脚是 PB11;重映射 后,USART3_TX 的引出脚为 PD8,变更 USART3_RX 的引出脚为PD9
STM32 引脚
PC口 16脚 PD口 3脚
PA口 16脚
PB口 16脚
STM32F103RBT6 包含4个端口: PA口 、PB口、PC口、PD口,共有 51个I/O管脚: PA口 16脚+ PB口16脚+ PC口16脚+ PD口3脚。
4.1 STM32F10x的输入/输出基本结构
4.2 GPIO相关功能寄存器
STM32单片机 最多有7个16位的并行 I/O端口: PA、PB、PC、PD、PE、PF、PG。
STM32F103Cx、103Rx单片机 只有4个16位的 并行 I/O端口:PA、PB、PC、PD。
STM32 引脚
PC口 3脚 PD口 2脚
PA口 16脚
PB口 16脚
STM32F103CBT6 包含4个端口: PA口 、PB口、PC口、PD口,共有 37个I/O管脚: PA口 16脚+ PB口16脚+ PC口3脚+ PD口2脚。
STM32F10x处理器的每个GPIO端口都对应有: 2个32位配置寄存器(GPIOx-CRL,GPIOx-CRH) 2个32位数据寄存器(GPIOx-IDR,GPIOx-ODR) 1个32位置位/复位寄存器(GPIOx-BSRR) 1个16位复位寄存器(GPIOx-BRR) 1个32位锁定寄存器(GPIOx-LCKR)

STM32的IO口设置方法实例

STM32的IO口设置方法实例!通过本节的学习,你将了解到STM32的IO口作为输出使用的方法。

本节分为如下几个小节:3.1.1 STM32 IO口简介3.1.2 硬件设计3.1.3 软件设计3.1.4 仿真与下载3.1.1 STM32 IO简介作为所有开发板的经典入门实验,莫过于跑马灯了。

ALIENTEK MiniSTM32开发板板载了2个LED,DS0和DS1,本实验将通过教你如何控制这两个灯实现交替闪烁的类跑马灯效果。

该实验的关键在于如何控制STM32的IO口输出。

了解了STM32的IO口如何输出的,就可以实现跑马灯了。

通过这一节的学习,你将初步掌握STM32基本IO口的使用,而这是迈向STM32的第一步。

STM32的IO口可以由软件配置成8种模式:1、输入浮空2、输入上拉3、输入下拉4、模拟输入5、开漏输出6、推挽输出7、推挽式复用功能8、开漏复用功能每个IO口可以自由编程,单IO口寄存器必须要按32位字被访问。

STM32的很多IO口都是5V兼容的,这些IO口在与5V电平的外设连接的时候很有优势,具体哪些IO口是5V兼容的,可以从该芯片的数据手册管脚描述章节查到(I/O Level标FT的就是5V电平兼容的)。

STM32的每个IO端口都有7个寄存器来控制。

他们分别是:配置模式的2个32位的端口配置寄存器CRL和CRH;2个32位的数据寄存器IDR和ODR;1个32位的置位/复位寄存器BSRR;一个16位的复位寄存器BRR;1个32位的锁存寄存器LCKR;这里我们仅介绍常用的几个寄存器,我们常用的IO端口寄存器只有4个:CRL、CRH、IDR、ODR。

CRL和CRH控制着每个IO口的模式及输出速率。

STM32的IO口位配置表如表3.1.1.1所示:表3.1.1.1 STM32的IO口位配置表STM32输出模式配置如表3.1.1.2所示:表3.1.1.2 STM32输出模式配置表接下来我们看看端口低配置寄存器CRL的描述,如下图所示:图3.1.1.1端口低配置寄存器CRL各位描述该寄存器的复位值为0X4444 4444,从上图可以看到,复位值其实就是配置端口为浮空输入模式。

最全的STM32八种IO口模式讲解(已经标注,新手必备)

以及上拉输入、下拉输入、浮空输入、模拟输入的区别最近在看数据手册的时候,发现在Cortex-M3里,对于GPIO的配置种类有8种之多:(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 复用推挽输出对于刚入门的新手,我想这几个概念是必须得搞清楚的,平时接触的最多的也就是推挽输出、开漏输出、上拉输入这三种,但一直未曾对这些做过归纳。

因此,在这里做一个总结:推挽输出:可以输出高,低电平,连接数字器件; 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止。

高低电平由IC的电源低定。

推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。

输出既可以向负载灌电流,也可以从负载抽取电流。

推拉式输出级既提高电路的负载能力,又提高开关速度。

详细理解:如图所示,推挽放大器的输出级有两个“臂”(两组放大元件),一个“臂”的电流增加时,另一个“臂”的电流则减小,二者的状态轮流转换。

对负载而言,好像是一个“臂”在推,一个“臂”在拉,共同完成电流输出任务。

当输出高电平时,也就是下级负载门输入高电平时,输出端的电流将是下级门从本级电源经VT3拉出。

这样一来,输出高低电平时,VT3 一路和VT5 一路将交替工作,从而减低了功耗,提高了每个管的承受能力。

又由于不论走哪一路,管子导通电阻都很小,使RC常数很小,转变速度很快。

因此,推拉式输出级既提高电路的负载能力,又提高开关速度。

STM32开发板例程讲解之二:GPIO的描述和配置,GPIOIOTG例程精讲ch...

(二)专门的寄存器(GPIOx_BSRR 和GPIOx_BRR) 实现对GPIO 口的原子操作,即回避了设置或清除I/O端口时的“读-修改-写”操作,使得设置或清 除I/O端口的操作不会被中断处理打断而造成误动作。 (三)每个GPIO 口都可以作为外部中断的输入,便于系统灵活设计。 (四)I/O口的输出模式下,有3种输出速度可选(2MHz 、10MHz 和50MHz) ,这有利于噪声控制。 (五)所有I/O口兼容CMOS和TTL,多数I/O口兼容5V电平。 (六)大电流驱动能力:GPIO 口在高低电平分别为0.4V和VDD-0.4V时,可以提供或吸收8mA电流;如果把输入输出电平分别放宽到1.3V和VDD1.3V时,可以提供或吸收20mA电流。 (七)具有独立的唤醒I/O口。 (八)很多I/O口的复用功能可以重新映射。 (九)GPIO口的配置具有上锁功能,当配置好GPIO口后,可以通过程序锁住配置组合,直到下次芯片复位才能解锁。此功能非常有利于在程序跑飞的 情况下保护系统中其他的设备,不会因为某些I/O口的配置被改变而损坏——如一个输入口变成输出口并输出电流。
#if 0 // 配置所有未使用GPIO引脚为输入模式(浮空输入),这样可以降低功耗,并且提高器件的抗EMI/EMC 的性能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE);
//armfly :注释掉的原因是当代码在外部存储器运行时,GPIOD,E,F,G部分IO用于FSMC,因此对这些IO不能重置,否则导致取指异常 // GPIO_Init(GPIOD, &GPIO_InitStructure); // GPIO_Init(GPIOE, &GPIO_InitStructure); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |

STM32 GPIO教程

通用输入输出端口 GPIO
系统外设
GPIO特性
最大封装(64引脚)上多达55个多功能双向GPIO(GPIO 引脚占有率相比STM32F1系列的80%更增加到86%) 几乎所有GPIO都是5V容忍(ADC引脚除外) GPIO分布在5个端口上:GPIOA[0~15]、GPIOB[0~15]、 GPIOC[0~15]、GPIOD[0~2]、GPIOF[4~7] 使用BSRR和BRR寄存器可以完成对引脚的原子置位和 复位操作 GPIO连在AHB总线,使得最高翻转速度高达12MHz 输出斜率可配置,高达50MHz 端口A和B上的引脚配置可通过LCKR寄存器锁定 55个引脚都可以配置成外部中断(可同时使能16个) 来把MCU从停止模式唤醒
I2C1端口支持1MHz超快速总线【FTf】
PB6/7 (I2C1_SCL/SDA) PB8/9 (I2C1_SCL/SDA)
其余端口都是5V容忍【FT】
10
Quiz
How many I/Os and ports there are in the STM32F0xx microcontroller ? ____________
可编程复用开关使得任意时刻只有一个外设连到 某个具体的GPIO。只有GPIOA和GPIOB有复用开关 某些外设功能还可以重映射到其他引脚,从而使 得能同时使用的外设数量更多
AF0 (SPI1_MISO) AF1 (TIM3_CH1) AF2 (TIM1_BKIN) Pin x (0…7)
AF7 (COMP1_OUT)
Output Driver
VSS
Push-Pull Open Drain
* In output mode, the I/O speed is configurable through OSPEEDR register: 2MHz, 10MHz or 50MHz
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档