关于STM32F4 SWD复用为普通GPIO做输入输出用

2023-11-10 20:50

本文主要是介绍关于STM32F4 SWD复用为普通GPIO做输入输出用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先板子上电启动默认是SWD模式。
对于F1系列,复用SWD为普通GPIO,可以调用这个函数进行专门的禁止:
在这里插入图片描述对于F4系列,首先我们要认识到一点,系统上电后,所有引脚都是AF0复用,F4系统共支持AF0-AF15种复用
具体到每种复用,查看数据手册就行,比如这个:
在这里插入图片描述====================================================
对于F4系列,没有专门的禁止函数了,系统上电,这几个引脚默认是配置成AF0复用,且用于JTAG/SW调试模式。
● PA15: JTDI 处于上拉状态
● PA14: JTCK/SWCLK 处于下拉状态
● PA13: JTMS/SWDAT 处于下拉状态
● PB4: NJTRST 处于上拉状态
● PB3: JTDO 处于浮空状态
在这里插入图片描述用户要使用这些引脚做通用IO,只要不配置复用模式即可(GPIO_Mode_AF),配置成输入或者输出就行
GPIO_Mode_IN = 0x00, /*!< GPIO Input Mode /
GPIO_Mode_OUT = 0x01, /
!< GPIO Output Mode /
GPIO_Mode_AF = 0x02, /
!< GPIO Alternate function Mode /
GPIO_Mode_AN = 0x03 /
!< GPIO Analog Mode */

PA13 PA14如果要配置成普通GPIO,可以直接进行GPIO初始化,不需要先去禁用JTAG/SWD,因为F4板子上电后默认PA13 PA14就是复用为SWD的,同时也支持普通IO输入输出,初始化普通IO,如下:
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //输出模式
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

**注意:**一旦初始化为普通GPIO, SWD将不再好使用,因为每次板子上电启动会去执行程序,程序里已经初始化了普通GPIO,要解决该问题,可以采取延迟初始化或者硬件上提供一个判断条件,在什么条件下的时候可以去初始化为普通GPIO。这样就不会导致板子重新启动后无法烧录程序。
如果已经出现了该问题,可以采用串口烧录程序的办法,将flash里的程序清除掉即可。

这篇关于关于STM32F4 SWD复用为普通GPIO做输入输出用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/385160

相关文章

什么是 Ubuntu LTS?Ubuntu LTS和普通版本区别对比

《什么是UbuntuLTS?UbuntuLTS和普通版本区别对比》UbuntuLTS是Ubuntu操作系统的一个特殊版本,旨在提供更长时间的支持和稳定性,与常规的Ubuntu版本相比,LTS版... 如果你正打算安装 Ubuntu 系统,可能会被「LTS 版本」和「普通版本」给搞得一头雾水吧?尤其是对于刚入

A20 操作GPIO口

例如:先在 Sys_config.fex文件中 [1302_para] 1302_used      = 1 1302_clk             = port:PD05<1><default><default><0> 1302_dat             = port:PD06<1><default><default><0> 1302_rs

Chapter 13 普通组件的注册使用

欢迎大家订阅【Vue2+Vue3】入门到实践 专栏,开启你的 Vue 学习之旅! 文章目录 前言一、组件创建二、局部注册三、全局注册 前言 在 Vue.js 中,组件是构建应用程序的基本单元。本章详细讲解了注册和使用 Vue 的普通组件的两种方式:局部注册和全局注册。 本篇文章参考黑马程序员 一、组件创建 ①定义 Vue 组件是一种具有特定功能的 Vue 实

箭头函数跟普通函数的区别

箭头函数(Arrow Function)和普通函数(Function Declaration/Expression)在 JavaScript 中有一些重要的区别,主要体现在以下几个方面: 1. 语法 箭头函数: 语法更简洁,没有 function 关键字。 对于单一表达式函数,结果会隐式返回,不需要 return 关键字。 不需要使用大括号 {},但如果使用,必须显式返回值。 示例:

热泵专用压缩机与普通压缩机的区别

普通压缩机和低温压缩机在空气源热泵机组上应用对比: 1.普通压缩机 1.低温工况运行时,压缩机高压缩比、产生过热、润滑油变质、涡旋盘磨损等;高温工况运行时,电机过载、轴承磨损、电机绕组超过极限。 2.高水温运行时,高冷凝温度,电机过载、过热;润滑油变质,涡旋盘磨损、轴承磨损,电机绕组超过极限。 3.在低温工况时,能力不够和能效比低,经济性差,在-10度以下能力衰减可达40%以上,COP<1.5W/

HDU1720(输入输出涨姿势)

A+B Coming Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5953    Accepted Submission(s): 3901 题目链接: http://acm.hdu.edu.cn/showproblem.p

ACM比赛中如何加速c++的输入输出?如何使cin速度与scanf速度相当?什么是最快的输入输出方法?

在竞赛中,遇到大数据时,往往读文件成了程序运行速度的瓶颈,需要更快的读取方式。相信几乎所有的C++学习者都在cin机器缓慢的速度上栽过跟头,于是从此以后发誓不用cin读数据。还有人说Pascal的read语句的速度是C/C++中scanf比不上的,C++选手只能干着急。难道C++真的低Pascal一等吗?答案是不言而喻的。一个进阶的方法是把数据一下子读进来,然后再转化字符串,这种方法传说中

Java中的输入输出方法及格式

输入 通过Scanner类的对象进行输入 Scanner类位于java.util.Scanner包中,需要使用import关键字导入 Import java.util.Scanner 首先创建一个Scanner类的对象 Scanner 对象名=new Scanner(System.in); Scanner类中提供的方法包括 next():获取字符串,但不包括空格、Tab键和换行符

STM32F4按键状态机--单击、双击、长按

STM32F4按键状态机--单击、双击、长按 一、状态机的三要素二、使用状态机原因2.1资源占用方面2.2 执行效率方面:2.3 按键抖动方面: 三、状态机实现3.1 状态机分析3.1 程序实现 百度解析的状态机概念如下 状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。有限状态机简写为FSM(

《设计模式:可复用面向对象软件的基础》读书笔记(3)

这篇博客记录了书中《第3章:创建型模式》里的要点。 介绍 创建型设计模式抽象了实例化过程。 在这些模式中有两个不断出现的主旋律: 他们都将关于该系统使用哪些具体的类的信息封装起来。他们隐藏了这些类的实例是如何被创建和放在一起的。 整个系统关于这些对象所知道的是由抽象类所定义的接口。因此,创建型模式在什么被创建、谁创建它、它是怎样被创建的,以及何时被创建等方面给予你很大的灵活性。 下面将这