STM32F103的SWD、JTAG接口remap禁止后
3ALIENTEK精英STM32F103开发板原理图-IO引脚分配表
104 PA12 USB_D+
CTX
Y
1,USB D+引脚(P6设置) 2,CTX引脚(P6设置)
105 PA13 JTMS
SWDIO
NHale Waihona Puke JTAG/SWD仿真接口,没接任何外设 注意:如要做普通IO,需先禁止JTAG&SWD
109 PA14 JTCK
SWDCLK
N
JTAG/SWD仿真接口,没接任何外设 注意:如要做普通IO,需先禁止JTAG&SWD
该IO通过P6选择连接USB D-还是CAN的RX脚,如果去掉P6的跳线帽,则该IO完全独立
该IO通过P6选择连接USB D+还是CAN的TX脚,如果去掉P6的跳线帽,则该IO完全独立
JTAG/SWD仿真接口,没连外设。建议仿真器选择SWD调试,这样仅SWDIO和SWDCLK两个 信号即可仿真。该IO做普通IO用(有10K上/下拉电阻),需先禁止JTAG&SWD!此时无法 仿真! 库函数全禁止方法:GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable) JTAG仿真口,也接ATK-MODULE接口的LED脚,如不用JTAG和ATK-MODULE接口,则可做普 通IO用(有10K上拉电阻)。做普通IO用,需先禁止JTAG。此时可SWD仿真,但JTAG无法 仿真。 库函数禁止JTAG方法:GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable) 该IO接TFTLCD模块接口的背光控制脚(BL),当不插TFTLCD模块时,该IO完全独立 该IO接TFTLCD模块接口的触摸屏SCK信号,当不插TFTLCD模块时,该IO完全独立 该IO在上电时,作BOOT1用(由B1控制上拉/下拉,设置启动模式),同时作为TFTLCD模 块接口的触摸屏MISO信号,当不插TFTLCD模块时,则可做普通IO用(有10K上拉/下 JTAG仿真口,也作为OLED/CAMERA接口的WEN脚,如不用JTAG和OLED/CAMERA接口,则可 做普通IO用(有10K上拉电阻)。做普通IO用时,需先禁止JTAG。此时可用SWD仿真,但 JTAG无法仿真。设置方法参考PA15的用法。 JTAG仿真口,也作为OLED/CAMERA接口的RCLK脚,如不用JTAG和OLED/CAMERA接口,则 可做普通IO用(有10K上拉电阻)。做普通IO用时,需先禁止JTAG。此时可用SWD仿真, 但JTAG无法仿真。设置方法参考PA15的用法。 该IO连接DS0,即红色LED灯。如做普通IO用,则DS0也受控制,建议:仅做输出用 该IO连接24C02的SCL信号,有4.7K上拉电阻,不建议作为普通IO使用 该IO连接24C02的SDA信号,有4.7K上拉电阻,控制SCL=1,则该IO可做普通IO使用 该IO控制蜂鸣器(BEEP),不建议作为普通IO使用 该IO连接HS0038红外接收头,有4.7K上拉电阻,且受HS0038控制,不建议做普通IO使 该IO连接ATK-MODULE接口的RXD脚,如果不用ATK-MODULE接口,则该IO完全独立 该IO连接ATK-MODULE接口的TXD脚,如果不用ATK-MODULE接口,则该IO完全独立 该IO接W25Q128的片选信号,不建议做普通IO使用 SPI2_SCK信号,当不使用W25Q128(片选禁止)和WIRELESS接口时,该IO可做普通IO使用 SPI2_MISO信号,当不使用W25Q128(片选禁止)和WIRELESS接口时,该IO可做普通IO使 SPI2_MOSI信号,当不使用W25Q128(片选禁止)和WIRELESS接口时,该IO可做普通IO使 仅连接OLED/CAMERA接口的D0,当不使用OLED/CAMERA接口时,该IO完全独立 仅连接OLED/CAMERA接口的D1,当不使用OLED/CAMERA接口时,该IO完全独立
stm32烧录故障须知
注意:对于网上流传的一些坑人的三线,四线SWD口就可以烧写STM32芯片的言论,我们给出专业级的说明:STM32的SWD标准接口是五根线(由ARM公司定义),VREF,GND,SWDIO,SWCLK,NRST.所有的线制均需要GND,SWDIO,SWCLK这三根线,这个没争议.即所谓的三线下载就是这三线.而NRST与VDD有些人认为不必要连.下面一一描述.对于NRST,如果STM32芯片的内部SWD模块被禁用了(用户程序内有禁用SWD 接口的代码被执行)则没有NRST是不可能再次烧写, STM32芯片的.因为SWD模式进入需要芯片的SWD模块处于激活状态,而SWD禁用时,必须通过在NRST低电平时发送SWD激活码才可以再次唤醒STM32的SWD模块.所以,不接NRST 就可以下载STM32是有条件的,不能适用所有STM32芯片状态!对于VREF(有些人可能认为是VDD)其作用主要是用来实现编程器的SWDIO引脚上的通信电平与目标芯片的IO 电平匹配的,SWDIO 引脚是一个开漏的引脚,其高电平的实现来自于编程器内部连接于SWDIO与VREF 线间的上拉电阻(这个电阻是编程器的事.不要再设计在电路板上).如果VREF上的电压与芯片的IO 电压不一致,则可能造成电平不匹配而通信失败.即VREF就是采集目标板芯片电压的! 那些说不用接这个也可烧写的是其狭隘的认为所有的STM32 均是3.3V 供电,事实上,有些STM32是在2V供电或其它电压下供电的.所以编程器必须使用这个引脚来采集SWDIO上的上拉电压.当然,如果目标芯片为3.3V供电,而编程器也配置为3.3V输出,这时本身就是电平匹配的,所以,这时不接VREF也可以通信,才造成了一帮人的误解,认为不接VREF也可以烧写.事实上SWD的五线任一条均是有其存在的原因的!ARM公司的技术专家是一群很聪明的人,不会白痴到设计几条没用的线上去做自已主打的DEBUG接口协议标准,考虑清楚,不要为了省那一两根线让大批量的PCB都报废,省一两根真的美观不到那里去,轩微科技作为专业的STM32批量烧录设备。
STM32在程序中禁用JTAG功能后不能进行仿真的解决办法
STM32在程序中禁用JTAG功能后不能进行仿真的解决办法STM32在程序中禁用JTAG功能后不能进行仿真会出现不能进行JTAG仿真的现象。
在程序中,通常禁止JTAG的函数如下所示://改变指定管脚的映射GPIO_Remap_SWJ_Disable SWJ 完全失能(JTAG+SW-DP)GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);//改变指定管脚的映射GPIO_Remap_SWJ_JTAGDisableJTAG-DP 失能 + SW-DP使能GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);当设置了以上语句后,当运行了这两个语句后,JTAG仿真就与目标失去去联系。
解决办法有:1、设置启动模式为ISP模式(BOOT0=1、BOOT1=0)或设置启动模式为RAM运行模式(BOOT0=1、BOOT1=1)。
将开发板断电后重新上电,此时就因不是在用户程序模式,因此就不会执行禁用JTAG的语句,JTAG功能也就可以正常使用。
2、设置启动模式为ISP模式(BOOT0=1、BOOT1=0),用ISP程序将STM32的FLASH擦除,之后就可恢复JTAG功能。
3、如果你的仿真器支持SWD仿真模式,如IAR下用JLINK、MDK下用ULINK2。
直接将仿真器的模式设为SWD模,就可以不受这个禁止JTAG功能的影响了。
lhtzyn777(2009-4-13 11:04:00)这样的话,GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);这样设置之后PB3,PB4是不是可以做普通IO使用?可以设置为推挽输出吗?zzu65(2009-4-13 16:35:55)可以作为普通IO使用。
stm32f103停止模式
具体要点为:1、所有IO管脚,如果高阻状态端口是高电平,就设成上拉输入,如果高阻状态是低电平,设成下拉输入,如果高阻是中间状态,设成模拟输入。
这个很多人都提到过,必须的。
作为输出口就免了,待机你想输出个什么东西,一定要输,硬件上加上下拉就可以了2、两个晶振输入脚要remap成普通IO!!!使用内部晶振。
3、pwr的时钟要使能,即RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);这个也相当重要4、关闭jtag口,并设成普通IO;5、注意助焊膏的质量!!!注意电路板层之间是否进水!!!!掌握这几项要点,再设中断什么的都行,整个世界清静了!!!完全低能耗。
/////////////////////////////////////////////////STM32F103C8T6低功耗至25uA,再也下不去了RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);PWR_EnterSTANDBYMode();这样操作可以使系统功耗降至20uA左右,但是需要输出高电平的引脚成了低电平;RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFE) ;这样的话可以使高电平保持高电平,可是功耗有800uA+。
求助:3、pwr的时钟要使能,即RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);这个也相当重要为什么加入这条后原来输出高电平的引脚会变为低电平///////////////////////////////////////////////////////////////////////////////////////具体要点为:1、所有IO管脚,如果高阻状态端口是高电平,就设成上拉输入,如果高阻状态是低电平,设成下拉 ...楼主,第4条是怎么设置的?我用的SWD加载固件,直接在进入STOP模式之前将全部的IO配置为下拉输入。
J-Link使用汇总(STM32F103)
目录:一、SWD实时仿真硬件电路1、SWD实时仿真接线2、注意二、仿真设置三、仿真时问题的解决(Keil5.12)1、仿真时添加变量或数组2、程序下载1)程序下载完成后,J-LINK使单片机处于复位状态 2)读保护与写保护3)尽量不要由J-Link给线路板供电,内部有短接4)勾选2处不能烧写的设置3、仿真器与线路板连接需可靠4、使用J-Link时,Keil软件出现无响应5、出现“USB无法连接”提示(实记JLink-V8刷固件方法)6、出现“***JLink Error: Can not read register 17 (MSP) while CPU is running”提示四、STM32芯片通过J-Flash解除写保护五、J-Link下载Hex文件1、简述2、与J-Link相关的设置3、烧写文件载入与连接目标4、问题总结1)可连接成功,擦除失败----------------------------------------所有的操作基于WIN XP,STM32使用J-Link(SWD模式),另可参见“Keil编译软件的使用汇总之三、Keil5.12错误的处理”。
-------------------------------------------------------------------------------------------------一、SWD实时仿真硬件电路1、SWD实时仿真接线---------------------------------------------2、注意JTMS、JTCK外接电路中不能有电容。
也可不用RST端,在STM32F407VET6中实际仿真,速率要降低,我最多到1MHz,如下图。
速率高了Keil 5中出现“SYSRESETREQ has confused core. Trying to reconnect and use VEC”提示。
-------------------------------------------------------------------------------------------------二、仿真设置J-LINK的SWD仿真时,对单片机口线的设置void KEY_Init(void){GPIO_InitTypeDef GPIO_InitStructure;GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//关闭JTAG,否则增加PBin(3)键失效//GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);//设置为GPIO_Remap_SWJ_Disable,表现为找不到芯片;有时能找到芯片,但程序执行到KEY_Init()函数会停住,或者//报“CPU_REG_SET():Register 0 is already marked as valid.”//设置为GPIO_Remap_SWJ_JTAGDisable即可解决此问题。
stm32f103中文手册[7]
stm32f103中文手册1. 概述stm32f103是一款高性能、低功耗、高集成度的32位微控制器,基于ARM Cortex-M3内核,支持Thumb-2指令集,具有72MHz的主频和64KB至512KB的闪存。
stm32f103具有丰富的外设资源,包括多种通信接口、定时器、模数转换器、DMA控制器、触摸感应控制器等,能够满足各种复杂的应用需求。
stm32f103还具有多种低功耗模式,能够实现动态电源管理,降低系统功耗。
stm32f1 03采用多种封装形式,适用于不同的应用场合。
2. 引脚定义stm32f103的引脚定义如图1所示。
stm32f103的引脚分为四类:电源引脚、复位引脚、晶振引脚和功能引脚。
电源引脚包括VDD、VSS、V DDA和VSSA,分别提供数字电源、数字地、模拟电源和模拟地。
复位引脚包括NRST和BOOT0,分别用于复位芯片和选择启动模式。
晶振引脚包括OSC_IN和OSC_OUT,分别连接外部晶振的输入和输出端。
功能引脚包括多达80个可编程的通用输入输出(GPIO)引脚,以及一些专用功能引脚,如JTAG/SWD调试接口、USB接口等。
![图1 stm32f103引脚定义](^4^)图1 stm32f103引脚定义3. 系统架构ARM Cortex-M3内核:是stm32f103的核心部分,负责执行程序指令,处理数据和中断等。
存储器:包括闪存(Flash)、静态随机存储器(SRAM)和备份寄存器(Backupregisters),分别用于存储程序代码、数据和备份数据等。
外设总线:包括总线矩阵(Bus matrix)、总线桥(Bus bridge)和外设总线(Peripheralbus),分别用于连接内核、存储器和外设等。
时钟和复位控制:包括时钟树(Clocktree)、复位控制器(Reset controller)和电源管理单元(Power managementunit),分别用于提供时钟信号、复位信号和电源管理等。
STM32调试方法
STM32调试方法STM32是一款非常受欢迎的单片机系列,广泛应用于各种嵌入式系统中。
在开发STM32项目时,调试是一个非常重要的环节,它能帮助开发者检测和解决程序中的问题。
本文将介绍STM32的调试方法,包括硬件调试和软件调试。
一、硬件调试硬件调试是通过硬件工具来实现的,通常使用的工具有JTAG、SWD和UART等。
下面将详细介绍这些调试工具的使用方法。
1.JTAG调试JTAG是一种用于测试和调试电子系统的接口标准,它能够提供对目标设备的非侵入式访问。
在STM32项目中,JTAG接口一般用于调试目的,下面是使用JTAG调试STM32的步骤:步骤1:连接JTAG调试器和目标设备。
将JTAG调试器的TCK、TMS、TDI、TDO和GND引脚分别连接到目标设备的相应引脚上。
步骤2:配置STM32的调试模式。
在STM32的配置文件中,将调试模式设置为JTAG模式。
步骤3:使用调试工具进行调试。
使用JTAG调试工具,如OpenOCD或J-Link等,连接到JTAG调试器,然后启动调试器进行调试。
调试工具会与STM32建立连接,并允许开发者对程序进行单步调试、断点设置等操作。
2.SWD调试SWD(Serial Wire Debug)是一种单线(加地线)调试接口,它是ARM公司推出的一种调试接口标准。
SWD相比JTAG接口更简洁、更省引脚,因此在STM32项目中被广泛应用。
下面是使用SWD调试STM32的步骤:步骤1:连接SWD调试器和目标设备。
将SWD调试器的SWCLK、SWDIO和GND引脚分别连接到目标设备的相应引脚上。
步骤2:配置STM32的调试模式。
在STM32的配置文件中,将调试模式设置为SWD模式。
步骤3:使用调试工具进行调试。
使用SWD调试工具,如ST-Link或J-Link等,连接到SWD调试器,然后启动调试器进行调试。
调试工具会与STM32建立连接,并允许开发者对程序进行单步调试、断点设置等操作。
stm32f103中文手册[14]
stm32f103中文手册一、概述stm32f103c8/cb:64KB或者128KB闪存,20KBSRAM,48引脚或者64引脚LQFP封装。
stm32f103r8/rb:64KB或者128KB闪存,20KBSRAM,64引脚LQFP封装。
stm32f103v8/vb:64KB或者128KB闪存,20KBSRAM,100引脚LQFP封装。
stm32f103rc/rd/re:256KB或者384KB或者512KB闪存,48KB或者64KB SRAM,64引脚或者100引脚LQFP封装。
stm32f103vc/vd/ve:256KB或者384KB或者512KB闪存,48KB或者64KB SRAM,100引脚或者144引脚LQFP封装。
stm32f103zc/zd/ze:256KB或者384KB或者512KB闪存,48KB或者64KB SRAM,144引脚LQFP封装。
stm32f103的主要特性如下:72MHz的主频,1.25 DMIPS/MHz的性能。
从32KB到512KB的闪存容量,从20KB到64KB的SRAM容量。
从37到112个GPIO引脚,支持多种工作模式和中断功能。
从3到7个定时器,支持多种工作模式和中断功能。
从2到3个12位ADC,支持多种触发模式和DMA传输功能。
从2到3个SPI接口,支持全双工和单向通信模式。
从2到3个I2C接口,支持标准模式和快速模式。
从3到5个USART接口,支持同步和异步通信模式。
一个USB 2.0全速设备接口,支持12Mbps的数据传输速率。
一个CAN 2.0B接口,支持标准帧和扩展帧格式。
一个SDIO接口,支持SD卡和MMC卡的读写操作。
一个RTC实时时钟模块,支持日历功能和闹钟功能。
一个CRC循环冗余校验模块,支持多种多项式计算方式。
多种低功耗模式,包括睡眠模式、住手模式和待机模式。
多种时钟源选择,包括内部RC振荡器、外部晶振、PLL锁相环等。
多种复位源选择,包括电源复位、软件复位、看门狗复位等。
stm32JTAG和SWD的使用区别
stm32 JTAG和SWD的使用区别对于JTAG和SWD的使用区别,觉得下面这篇文章讲的比较清晰了,所以转帖到这里,希望对新手有所帮助。
SWD与JTAG区别及使用情况[转载]上图是SEGGER说明书中给出的Jlink引脚图,可以对照着看SWD引脚与JTAG引脚的关系。
这是我手边开发板上的JTAG连接图,这个肯定是能用的。
这个是从网上找来的标准的JTAG连接图,供对照参考。
调试方式既可以用JTAG,也可以用SWD。
以下是一段转自:(showvi)SWD 仿真模式概念简述一、SWD 和传统的调试方式区别1. SWD 模式比 JTAG 在高速模式下面更加可靠。
在大数据量的情况下面 JTAG 下载程序会失败, 但是SWD 发生的几率会小很多。
基本使用 JTAG 仿真模式的情况下是可以直接使用 SWD 模式的, 只要你的仿真器支持。
所以推荐大家使用这个模式。
2. 在大家 GPIO 刚好缺一个的时候, 可以使用 SWD 仿真, 这种模式支持更少的引脚。
3. 在大家板子的体积有限的时候推荐使用 SWD 模式, 它需要的引脚少, 当然需要的 PCB 空间就小啦!比如你可以选择一个很小的 2.54 间距的 5 芯端子做仿真接口。
二、仿真器对 SWD 模式支持情况1. 市面上的常用仿真器对 SWD 模式支持情况(1) JTAGV6 支持 SWD 仿真模式,速度较慢。
(2) JTAGV7 比较好的支持 SWD 仿真模式, 速度有了明显的提高,速度是 JTAGV6 的 6 倍。
(3) JTAGV8 非常好的支持 SWD 仿真模式, 速度可以到10M。
(4) ULINK1 不支持 SWD 模式。
(5) 盗版 ULINK2 非常好的支持 SWD 模式,速度可以达到 10M。
(6) 正版 ULINK2 非常好的支持 SWD 模式,速度可以达到 10M。
2. SWD 硬件接口上的不同(1) JTAGV6 需要的硬件接口为: GND, RST, SWDIO, SWDCLK(2) JTAGV7 需要的硬件接口为: GND, RST, SWDIO, SWDCLK(3) JTAGV8 需要的硬件接口为: VCC, GND, RST, SWDIO, SWDCLK (注:下面有我自己用JTAGV8的实际连线及相应实验结果)(4) ULINK1 不支持 SWD 模式(5) 盗版 ULINK2 需要的硬件接口为: GND, RST, SWDIO, SWDCLK(6) 正版 ULINK2 需要的硬件接口为: GND, RST, SWDIO, SWDCLK由此可以看到只有 JTAGV8 需要 5 个引脚,即多了一个VCC引脚,其好处是: 仿真器对目标板子的仿真需要用到 RST 引脚, 使用仿真器内部的 VCC 作这个功能其实并不是非常美妙。
stm32f103中文手册[6]
stm32f103中文手册一、概述stm32f103c8/cb:64KB或128KB闪存,20KBSRAM,48引脚或64引脚LQFP封装。
stm32f103r8/rb:64KB或128KB闪存,20KBSRAM,64引脚LQFP封装。
stm32f103v8/vb:64KB或128KB闪存,20KBSRAM,100引脚LQFP封装。
stm32f103rc/rd/re:256KB或384KB或512KB闪存,48KB或64KB SRAM,64引脚或100引脚LQFP封装。
stm32f103vc/vd/ve:256KB或384KB或512KB闪存,48KB或64KB SRAM,100引脚LQFP封装。
stm32f103zc/zd/ze:256KB或384KB或512KB闪存,48KB或64KB SRAM,144引脚LQFP封装。
stm32f103系列的主要特性如下:72MHz的主频,1.25 DMIPS/MHz的性能。
从2.0V到3.6V的工作电压范围。
从-40°C到+85°C的工作温度范围。
多种低功耗模式,包括停机模式、待机模式、睡眠模式和停止模式。
多达7个定时器,包括3个16位通用定时器、1个16位高级定时器、2个基本定时器和1个看门狗定时器。
多达3个同步串行接口(SPI),支持I2S协议。
多达3个通用异步收发器(USART),支持ISO7816协议、LIN协议、IrDA协议和调制解调器控制。
多达2个通用串行总线(USB),支持USB 2.0全速设备和CAN2.0B协议。
多达2个I2C总线接口,支持400KHz的快速模式和10KHz的低速模式。
多达3个12位模数转换器(ADC),支持1.2us的转换时间和多通道扫描模式。
多达2个12位数模转换器(DAC),支持8位和12位的数据格式和双缓冲区输出模式。
多达80个通用输入输出端口(GPIO),支持多种工作模式和中断功能。
多达15个可屏蔽中断源和一个非屏蔽中断源(NMI)。
stm32f103中文手册[12]
stm32f103中文手册1. 概述72 MHz的主频,可达90 DMIPS的性能64 KB至512 KB的闪存,20 KB至64 KB的SRAM7个定时器,包括3个高级定时器和4个通用定时器2个12位模数转换器,每秒1 MSPS2个I2C接口,3个USART接口,2个SPI接口1个USB 2.0全速接口1个CAN 2.0B接口37至80个GPIO引脚,支持中断和唤醒功能3个12位数字摹拟转换器实时时钟,支持日历和闹钟功能4至16 MHz的晶振振荡器,内部8 MHz的RC振荡器,内部40 kHz的RC振荡器7种低功耗模式,包括待机模式、住手模式和睡眠模式单电源3.0 V至3.6 V或者双电源1.8 V至3.6 V工作电压工作温度范围为-40°C至+85°C或者-40°C至+105°C2. 引脚定义stm32f103有多种封装形式,包括LQFP64、LQFP100、LQFP144、BG A100等²。
不同封装形式的引脚数量和罗列方式不同,但引脚功能基本相同。
下表列出了stm32f103的引脚功能和描述:---引脚名称 ---引脚功能 ---引脚描述 -------:------: ---:------: ---:------: -------VSS ---接地 ---连接到电源地 -------VDD ---电源 ---连接到正电源 -------VDDA ---摹拟电源 ---连接到正电源 -------VSSA ---摹拟接地 ---连接到电源地 -------NRST ---复位 ---复位输入,低电平有效 -------BOOT0 ---引导模式选择 ---引导模式选择输入,高电平或者低电平 -------BOOT1 ---引导模式选择 ---引导模式选择输入,高电平或者低电平 -------OSC_IN ---晶振输入 ---连接到外部晶振或者时钟信号的输入端-------OSC_OUT ---晶振输出 ---连接到外部晶振或者时钟信号的输出端 -------PA0~PA15 ---端口A引脚 ---可编程I/O引脚,具有多种功能和特性 -------PB0~PB15 ---端口B引脚 ---可编程I/O引脚,具有多种功能和特性 -------PC0~PC15 ---端口C引脚 ---可编程I/O引脚,具有多种功能和特性 -------PD0~PD15 ---端口D引脚 ---可编程I/O引脚,具有多种功能和特性 -------PE0~PE15 ---端口E引脚 ---可编程I/O引脚,具有多种功能和特性 -------JTAG_TMS ---JTAG测试模式选择 ---JTAG接口的测试模式选择信号 -------JTAG_TCK ---JTAG测试时钟 ---JTAG接口的测试时钟信号 -------JTAG_TDI ---JTAG测试数据输入 ---JTAG接口的测试数据输入信号 -------JTAG_TDO ---JTAG测试数据输出 ---JTAG接口的测试数据输出信号 -------JTAG_TRST ---JTAG测试复位 ---JTAG接口的测试复位信号 ----3. 系统架构stm32f103的系统架构如下图所示³:![stm32f103系统架构](^4^)32位RISC架构,支持Thumb-2指令集3级流水线,支持分支预测和异常处理13个通用寄存器和1个程序计数器1个嵌套向量中断控制器(NVIC),支持多达60个中断源1个系统控制块(SCB),包含系统配置、控制和状态寄存器1个系统定时器(SysTick),提供一个24位递减计数器,可用于操作系统的节拍计时1个调试接入端口(DAP),支持JTAG和SWD两种调试协议闪存:是stm32f103的非易失性存储器,用于存储程序代码和数据。
stm32不小心把SWD和JTAG都给关了,程序下载不进去,解决办法
stm32不小心把SWD和JTAG都给关了,程序下载不进去,解决办法我们有时候会碰到各种问题导致STM32或者STM8的程序突然就下载不进去板子了。
可以按照以下步骤来解决。
一、下载方法步骤:•1、将板子供电全部断开,这里包括3.3V电源供电和JLINK等所有能给开发板供上电的设备全断开。
•2、找到BOOT0引脚,将BOOT0拉高。
•方法:在板子上找一个高电平引脚,手动用导线将BOOT0连接到该引脚上即可。
•(注意:我的STM32板子供电是3.3V的,所以我找了一个3.3V的引脚,用导线连接到了BOOT0上,千万别弄错了,电平接高了不小心可是要烧坏板子的!)•3、BOOT0拉高以后,保持这个姿势不要动,打开电源,重新给板子上电。
•4、插上JLink或者STLink,下载程序。
一般这次肯定可以下载进去了。
下载完成以后,就可以断开BOOT0了,让他恢复低电平。
OK到这里就全部完成了,板子肯定也回复正常了,继续嗨吧。
二、上述方法原因解释开发板默认JTAG和SWD接口都是打开的,BOOT0是低电平,当把BOOT0置高时,给板子上电,板子启动的时候程序会卡住,也就是内部flash的程序并未执行,这个时候SW和JTAD接口都是出于默认打开的状态。
然后下载一个不关闭JTAG或者SW接口的程序,覆盖之前flash中的程序就好了。
所以先将板子供电全部断开(这里包括3.3V电源供电和JLINK等所有能给开发板供上电的设备全断开),再将开发板的BOOT0拉高,重新给开发板上电,把程序中关闭JTAG或者SW的程序删掉,然后下载到开发板中,程序下载完成就好了。
三、SWD和JTAG被关闭原因正搞板子发现程序下载不进去了,到处查找原因,发现自己在程序中不小心把STM32的SWD和JTAD接口都给关了,如下就是关掉这两个接口的两句程序:GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENA BLE);//关掉JTAG,不关SWGPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);//关掉SW•1•2所以,当程序跑起来,两句执行完以后,两个接口都关了,然后程序就再也下载不进去了。
STM32之JTAG、SWD模式
STM32之JTAG、SWD模式说在前⾯的话 最近YKY项⽬做了新的硬件设计,其中键盘接⼝采⽤矩阵式键盘(4*4),有两个接⼝使⽤了STM32 (PB3、PB4),调试中发现,这两个接⼝对应的两⾏均不能正常扫描到按键值,查看数据⼿册才知道这是系统接⼝,需要进⾏设置才可以作为普通IO⼝使⽤。
如图是数据⼿册对这两个接⼝的介绍:解决⽅法寄存器版本:1//JTAG模式设置,⽤于设置JTAG的模式2//mode:jtag,swd模式设置;00,全使能;01,使能SWD;10,全关闭;3//#define JTAG_SWD_DISABLE 0X024//#define SWD_ENABLE 0X015//#define JTAG_SWD_ENABLE 0X006void JTAG_Set(u8 mode)7 {8 u32 temp;9 temp=mode;10 temp<<=25;11 RCC->APB2ENR|=1<<0; //开启辅助时钟12 AFIO->MAPR&=0XF8FFFFFF; //清除MAPR的[26:24]13 AFIO->MAPR|=temp; //设置jtag模式14 }库版本:RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//开启AFIO时钟GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);//改变指定管脚的映射 GPIO_Remap_SWJ_Disable SWJ 完全禁⽤(JTAG+SW-DP)GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//改变指定管脚的映射 GPIO_Remap_SWJ_JTAGDisable ,JTAG-DP 禁⽤ + SW-DP 使能。
stm32 swd原理
stm32 swd原理
STMicroelectronics的STM32微控制器使用的是Serial Wire Debug(SWD)接口,它是一种用于调试和编程的串行接口标准。
SWD
接口由两根线组成,分别是SWDIO(Serial Wire Debug I/O)和SWCLK(Serial Wire Debug Clock)。
SWD接口与JTAG(Joint
Test Action Group)接口相比,具有更低的引脚数量和更高的速度,适用于对资源受限的嵌入式系统进行调试和编程。
SWD接口的工作原理如下,在调试或编程过程中,SWD主机(通
常是调试器或编程器)通过SWDIO线与目标芯片上的SWDIO引脚连接,通过SWCLK线与目标芯片上的SWCLK引脚连接。
SWD主机通过SWCLK线向目标芯片发送时钟信号,同时通过SWDIO线向目标芯片
发送和接收数据。
SWD接口使用了一种双线串行通信协议,通过在
时钟信号的边沿上进行数据传输,实现了调试和编程功能。
在实际应用中,SWD接口可以用于调试器与STM32微控制器之
间的通信,包括读取和写入寄存器、内存访问、单步执行程序等功能。
通过SWD接口,开发人员可以对STM32微控制器进行调试和程
序烧录,帮助他们进行软件开发和故障排除工作。
总的来说,STM32微控制器的SWD接口是一种高效的调试和编程接口,通过简单的双线串行通信协议实现了对嵌入式系统的调试和编程功能,为开发人员提供了便利和灵活性。
STM32JTAG端口作为GPIO口使用的方法
STM32JTAG端口作为GPIO口使用的方法在STM32微控制器中,JTAG端口通常用作调试和编程接口。
然而,有时候我们可能需要将JTAG端口中的一些引脚用作GPIO口,以便扩展输入/输出功能。
这在特定的应用场景中非常有用。
要将JTAG端口中的引脚用作GPIO口,需要进行以下步骤:1.禁用JTAG功能:默认情况下,JTAG功能是启用的。
需要通过设置相应的寄存器来禁用JTAG功能,以使JTAG引脚变为可用的GPIO引脚。
在STM32上,相关的寄存器是AFIO_MAPR寄存器。
AFIO_MAPR寄存器是用于映射复用器的控制寄存器,通过设置它的特定位,可以将JTAG引脚与GPIO引脚进行映射。
2.设置引脚模式:将JTAG引脚转换为GPIO引脚后,需要在引脚模式寄存器中设置相应的模式。
这可以通过设置GPIOx_CRL和GPIOx_CRH寄存器来实现,其中x表示GPIO端口的编号。
引脚模式寄存器包含16位,每4位用于控制一个引脚的模式和配置。
通过设置适当的位组合,可以控制引脚的输入/输出模式、速度和推挽模式等。
3.配置引脚:在设置好引脚模式后,需要进一步配置引脚的输入/输出特性。
可以通过设置GPIOx_ODR、GPIOx_IDR和GPIOx_BRR等寄存器来实现。
-GPIOx_ODR寄存器用于设置GPIO引脚的输出值。
-GPIOx_IDR寄存器用于读取GPIO引脚的输入值。
-GPIOx_BRR寄存器用于设置GPIO引脚为低电平。
4.示例代码:-禁用JTAG功能:```c//设置AFIO_MAPR寄存器的特定位AFIO->MAPR,=AFIO_MAPR_SWJ_CFG_JTAGDISABLE;```-设置引脚模式:```c//设置GPIO引脚的模式和配置GPIOx->CRL = (GPIOx->CRL & ~(GPIO_CRL_MODEx ,GPIO_CRL_CNFx)) , (GPIO_Mode_Out_PP , GPIO_Speed_2MHz);```-配置引脚:```c//设置GPIO引脚的输出值GPIOx->ODR ,= GPIO_Pin_x;//读取GPIO引脚的输入值input_value = GPIOx->IDR & GPIO_Pin_x;//设置GPIO引脚为低电平GPIOx->BRR = GPIO_Pin_x;```以上就是将STM32的JTAG端口引脚用作GPIO口的方法。
解决STM32禁用SWD调试接口后不能下载程序的问题速度一定要快
解决STM32禁⽤SWD调试接⼝后不能下载程序的问题速度⼀定要快解决STM32禁⽤SWD调试接⼝后不能下载程序的问题⼩刘同学啊 2020-11-09 22:39:06 1319 收藏 8⽂章标签: stm32 keil mdk版权STM32的PA13(SWDIO)、PA14(SWCLK)这两个引脚为SWD调试接⼝,因为STM32默认把这两个接⼝当作了下载接⼝,所以如果程序中有⽤到这两个接⼝的任意⼀个(⽐如⽤来作为普通I/O⼝),STM32内部运⾏程序时,该接⼝就会被屏蔽掉,因此当我们接上SWD下载器下载程序,KEIL会提⽰⽆法连接到STM32。
解决⽅法:这其实⾮常简单,因为STM32在内部运⾏了程序,所以才导致下载接⼝被屏蔽了,那我只需要把程序停下来不就好了?是的如下图:STM32运⾏时,NRST复位引脚需要接⾼电平,当该引脚接低电平时,STM32会进⼊复位状态,此时不会运⾏程序。
具体做法:1、针对只有VCC、GND、SWCLK、SWDIO四线的下载器(⽆单独NRST引脚)⽤镊⼦或者跳线把STM32的NRST引脚拉低,并⼀直使STM32处于复位状态,然后单击KEIL的DOWNLOAD按钮,因为这时候MCU⼀直处于复位,所以当我们DOWNLOAD下载代码时,⽴刻松⼿让MCU的NRST引脚拉⾼,这就可以成功下载了,如果松⼿太慢则会下载失败2、针对有单独NRST引脚的下载器(其实就是为了解决做法⼀需要⼿动拉低电平的问题)在KEIL⼯具⾥打开魔术棒-DEBUG-Setting-Connect&Reset Options-下拉选中with Pre-reset选项(其实就是先拉低使MCU复位),然后点击确定就可以了。
把带有独⽴NRST引脚的下载器连接好,下载过程中⽰波器捕捉到的NRST引脚信号如下:NRST引脚由⾼电平变为低电平,MCU进⼊复位状态,SWD相关接⼝能正常使⽤,持续10ms后正常拉⾼电平,下载器正常下载程序。
stm32f103简介
数据手册STM32F103xC STM32F103xDSTM32F103xE增强型,32位基于ARM核心的带512K 字节闪存的微控制器USB 、CAN 、11个定时器、3个ADC 、13个通信接口初步信息功能■ 内核:ARM 32位的Cortex™-M3 CPU − 最高72MHz 工作频率,1.25DMips/MHz(Dhrystone2.1), 在存储器的0等待周期访问时 − 单周期乘法和硬件除法 ■ 存储器− 从256K 至512K 字节的闪存程序存储器 − 高达64K 字节的SRAM− 带4个片选的灵活的静态存储器控制器。
支持CF 卡、SRAM 、PSRAM 、NOR 和NAND 存储器− 并行LCD 接口,兼容8080/6800模式 ■ 时钟、复位和电源管理− 2.0~3.6伏供电和I/O 管脚 − 上电/断电复位(POR/PDR)、可编程电压监测器(PVD)− 内嵌4~16MHz 晶体振荡器− 内嵌经出厂调校的8MHz 的RC 振荡器 − 内嵌带校准的40kHz 的RC 振荡器 − 带校准功能的32kHz RTC 振荡器 ■ 低功耗− 睡眠、停机和待机模式− V BAT 为RTC 和后备寄存器供电■ 3个12位模数转换器,1μs 转换时间(多达21个输入通道)− 转换范围:0至3.6V − 三倍采样和保持功能 − 温度传感器■ 2通道12位D/A 转换器■ DMA− 12通道DMA 控制器− 支持的外设:定时器、ADC 、DAC 、SDIO 、I 2S 、SPI 、I 2C 和USART ■ 多达112个快速I/O 口− 51/80/112个多功能双向的I/O 口 − 所有I/O 口可以映像到16个外部中断− 除了模拟输入口以外的IO 口可容忍5V 信号输入■ 调试模式− 串行单线调试(SWD)和JTAG 接口 − Cortex-M3内嵌跟踪模块(ETM) ■ 多达11个定时器− 多达4个16位定时器,每个定时器有多达4个用于输入捕获/输出比较/PWM 或脉冲计数的通道− 2个16位6通道高级控制定时器,多达6路PWM 输出,带死区控制− 2个看门狗定时器(独立的和窗口型的) − 系统时间定时器:24位自减型计数 − 2个16位基本定时器用于驱动DAC ■ 多达13个通信接口− 多达2个I 2C 接口(支持SMBus/PMBus)− 多达5个USART 接口(支持ISO7816,LIN ,IrDA 接口和调制解调控制)− 多达3个SPI 接口(18M 位/秒),2个可复用为I 2S 接口− CAN 接口(2.0B 默认) − USB 2.0全速接口 − SDIO 接口 ■ CRC 计算单元 ■ ECOPACK ®封装 表1 器件列表打印从开始到第十页1介绍本文给出了STM32F103xC、STM32F103xD和STM32F103xE增强型的订购信息和器件的机械特性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
手贱将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尝试了好几次)。
所以:点击烧写----迅速将拨码开关拨到OFF,烧写成功。
(点击烧写----keil+J-link尝试连接stm32进行烧写,但此时NRST为复位态,烧写不成功,但仍然会继续尝试----迅速将拨码开关拨到OFF----NRST释放,stm32从复位态释放----keil+J-link比片内程序抢占先机)。