首页 > 其他分享 >STM32F10X 部分引脚不能使用的问题

STM32F10X 部分引脚不能使用的问题

时间:2024-02-29 17:22:23浏览次数:25  
标签:__ SWJ HAL 引脚 STM32F10X STM32 使用 JTAG

一、概述

说来惭愧,我到现在都没有完整的学习过STM32。接触 STM32 还是突然的一个项目,需要用到 STM32,紧急需求,只能边学边完成。不过好在 ST 的资料还是比较多的,相对也比较简单,基本上的需求都能找到对应的demo,或者直接使用 STM32CubeMX 生成代码,最后在稍微改改,写一下自己的逻辑,就能完成需求了。

说来比较庆幸,还好第一个项目只需要前后台方式即可完成,否则我应该都放弃了。后来接触到了实时操作系统,由于没有系统的学习,导致我接触的第一个实时系统居然是 RT-Thread,看着复杂的外设代码当场懵逼,好在后面成功的完成了 uart 和 GPIO 的驱动移植,第一次在 STM32 跑上线程很开心,也深入的理解到了系统的底层是怎么实现的。

就在这样舒适的环境下使用了几年的 STM32,导致我忽视了基础上的学习,以为已经掌握了 STM32,直到今天一个现象让我直接懵逼了,在使用其他 GPIO 的时候都是能正常工作的,但是突然到 PB3、PB4、PA15、PA14、PA15 这几个引脚的时候,直接无法作为输出使用,刚开始以为是硬件上的问题,但是后来发现,之前写的另外一个工程可以使用,很明显这是程序上出了问题,可是查了 RT-Thread 整个代码都没发现有异常的地方,以为是升级版本导致的,折腾了一天后,突然发现是引脚复用问题导致的。崩溃

这里讲述我学习 STM32 的过程,希望能帮助哪些快要放弃的小伙伴,STM32 真的不难,现在网上的资料也很多,讲的也很详细。完全不用先将所有的知识点学完在做事,可以像我一样拿着任务去学习,当然在空余的时候还是有必要完整了解一下基础的知识,不然可能会想我一样,解决问题时会多花一些时间,但是这样的印象也比较深刻。

二、SWJ-DP脚分配

在查了数据手册时,才发现这个几个引脚默认被 JTAG 调试时使用,所以直接使用这个几个引脚作为输出引脚是不行的,如图所示

看到这里相信大家都明白了,只是我们平时在使用的时候没有注意这个细节问题,遇到时就比较懵逼,比如在 STM32CubeMX 配置的时候也有,如下如所示

那怎么复用了,这个就比较简单了,直接生成即可看到用法,容我再简单啰嗦一下,在使用这几个引脚时,需要是能复用时钟

__HAL_RCC_AFIO_CLK_ENABLE();

然后在使用自己需要的配置,释放对应的引脚即可,配置模式如下

// Enable the Serial wire JTAG configuration
__HAL_AFIO_REMAP_SWJ_ENABLE()

// Enable the Serial wire JTAG configuration
__HAL_AFIO_REMAP_SWJ_NONJTRST()

// Enable the Serial wire JTAG configuration
__HAL_AFIO_REMAP_SWJ_NOJTAG()

// Disable the Serial wire JTAG configuration
__HAL_AFIO_REMAP_SWJ_DISABLE()

标签:__,SWJ,HAL,引脚,STM32F10X,STM32,使用,JTAG
From: https://www.cnblogs.com/jzcn/p/18044592

相关文章

  • Django项目中使用JWT身份验证
    一、什么是JWTJWT,全称是JSONWebToken,是一个开放标准(RFC7519),它定义了一种紧凑的、自包含的方式,用于在多方之间安全地传输JSON格式的信息。这些信息可以被验证和信任,因为它们是数字签名的。JWT由三部分组成:头部(Header)、负载(Payload)、签名(Signature),每部分之间以.分隔。JWT最常见......
  • 腾讯云搭载网页(使用宝塔面板)Linux
    1、登录你的腾讯云服务器 2、进入OrcaTerm面板,进入Linux的root命令面板,输入yuminstall-ywget&&wget-Oinstall.shhttp://download.bt.cn/install/install_6.0.sh&&shinstall.sh安装宝塔Linux 3、中间会询问DoyouwanttoinstallBt-Paneltothe/wwwdirect......
  • Avalonia 跨平台框架中如何以正确的姿势使用 OpenGL ES 渲染。
    前言这是一篇很水的文章,没有任何技术含量,在Github已经有很多人对Avalonia的OpenGLES支持进行了讨论,但是我还是想写一篇文章来记录一下我是如何在Avalonia中使用OpenGLES的。介绍在介绍Avalonia和OpenGLES之前,我们先来了解一下什么是Avalonia和OpenGLES以......
  • 视频监控平台Easy1400视图库平台使用订阅功能的详细步骤
    Easy1400是一个智慧安防平台的视图平台设备级联操作指南。该平台提供内容图库作为信息存储和展示的核心,并应用设备级联技术实现不同平台和设备之间的高效协同工作。通过内容图库,企业和组织能够更高效地管理和展示视觉内容,提升品牌形象和用户体验。设备级联技术则使得不同平台和设......
  • Using the HEC-RAS Controller to Add Station-Elevation Data From A Spreadsheet使
    by PaigeBrueWhenIammanipulatingstation-elevationdataforHEC-RAS,IoftendothisinMicrosoftExcel.However,itcanbetedioustocopyandpastedataforeachcross-sectionintotheGeometricDataEditor.当我为HEC-RAS操作桩号高程数据时,我经常在Micr......
  • matrox的RAP4G4C12 CXP采集卡使用指导
    [email protected]的RAP4G4C12CXP采集卡使用指导 目录matrox的RAP4G4C12CXP采集卡使用指导41设备管理器检查板卡42打开“MILControlCenter”软件43选择板卡54图像采集54.1单次抓拍模式54.2连续抓拍模式74.3查看或配置device端参......
  • 【方法创建与使用】
    类的定义与对象创建前面我们介绍了什么是类,什么是对象,首先我们就来看看如何去定义一个类。比如现在我们想要定义一个人类,我们可以右键src目录,点击创建新的类:我们在对类进行命名时,一般使用英文单词,并且首字母大写,跟变量命名一样,不能出现任何的特殊字符。可以看到,现在我们的目......
  • 方法进阶使用
    有时候我们的方法中可能会出现一些与成员变量重名的变量://我们希望使用这个方法,来为当前对象设定名字voidsetName(Stringname){}此时类中定义的变量名称也是name,那么我们是否可以这样编写呢:voidsetName(Stringname){name=name;//出现重名时,优先使用作用域最......
  • 对象的使用
    既然现在我们知道如何创建对象,那么我们怎么去访问这个对象呢,比如我现在想要去查看或是修改它的名字。我们同样可以使用一个变量来指代某个对象,只不过引用类型的变量,存储的是对象的引用,而不是对象本身:publicstaticvoidmain(String[]args){//这里的a存放的是具体的某个值......
  • 使用Navicat for MySQL远程访问MySql8.0的问题。
    首先我们进入mysql,查看mysql中所有用户权限usemysql;selectuser,hostfromuser;我们发现host默认都是localhost访问权限我们要修改root的远程访问权限updateusersethost='%'whereuser='root';再次执行selectuser,hostfromuser;说明我们已经修改成功了。允许......