h1_key

当前位置:首页 >新闻资讯 > 行业资讯>STM32F103单片机IO不够用应该这么来
STM32F103单片机IO不够用应该这么来
2022-06-23 621次


 

先说为什么会不够用

  一般在项目开发阶段需求都是慢慢的添加的,预计需要18IO结果20个还不够,甚至有的时候已经全部用完了现有的资源,还需要多出一个或者两个IO来做一个系统运行指示灯这样的功能,就没必要换一款更高性能的单片机来做了,这时候就会想能不能再压榨一下单片机把多余的资源释放出来。其实STM32F103单片机JTAG端口重映射可以完成这样的事情。

  STM32F103单片机JTAG端口重映射

  JTAG接口

  简单理解这是一个下载程序用的接口使用的工具是Jlink

  SWD接口

  简单理解就是一个下载程序的接口使用的工具是STlink

  IO

  简单理解就是一个可以进行输入输出的普通接口

  STM32IO

  STM32有很多IO口,IO口占据了绝大多数的管脚,但是有的管脚天生就不平凡被安排了更牛逼的工作那就是下载程序用,如果想要它由牛逼变成普通就要对本事下载接口的管脚进行功能重新映射。

  映射的关系由寄存器进行控制也可以库函数来实现,但是映射的方式不多,也就三种

  §全功能 SWJJTAG没有JTRST

  §禁用JTAG,启用SWJ(PB3/PB4/PA15 可重映射为其他功能)

  §完全禁用 SWJJTAG(PB3/PB4/PA13/PA14/PA15 均可重映射为其他功能)

  §为什么要这样搞?

  因为这样设计可以允许更多的GPIO被解放出来。

  比如

  第一种可以解放PB4

  第二种可以解放PB3 PB4 PA15

第三种可以解放PB3 PB4 PA13 PA14 PA15

 

 

为什么可以这样搞?

  

7.png8.png

  

如何解放对应的IO?

    STM32F103单片机IO不够用应该这么来

  先说为什么会不够用

  一般在项目开发阶段需求都是慢慢的添加的,预计需要18IO结果20个还不够,甚至有的时候已经全部用完了现有的资源,还需要多出一个或者两个IO来做一个系统运行指示灯这样的功能,就没必要换一款更高性能的单片机来做了,这时候就会想能不能再压榨一下单片机把多余的资源释放出来。其实STM32F103单片机JTAG端口重映射可以完成这样的事情。

  STM32F103单片机JTAG端口重映射

  JTAG接口

  简单理解这是一个下载程序用的接口使用的工具是Jlink

  SWD接口

  简单理解就是一个下载程序的接口使用的工具是STlink

  IO

  简单理解就是一个可以进行输入输出的普通接口

  STM32IO

  STM32有很多IO口,IO口占据了绝大多数的管脚,但是有的管脚天生就不平凡被安排了更牛逼的工作那就是下载程序用,如果想要它由牛逼变成普通就要对本事下载接口的管脚进行功能重新映射。

  映射的关系由寄存器进行控制也可以库函数来实现,但是映射的方式不多,也就三种

  §

  全功能 SWJJTAG没有JTRST

  §

  §

  禁用JTAG,启用SWJ(PB3/PB4/PA15 可重映射为其他功能)

  §

  §

  完全禁用 SWJJTAG(PB3/PB4/PA13/PA14/PA15 均可重映射为其他功能)

  §

  §

  为什么要这样搞?

  因为这样设计可以允许更多的GPIO被解放出来。

  比如

  第一种可以解放PB4

  第二种可以解放PB3 PB4 PA15

  第三种可以解放PB3 PB4 PA13 PA14 PA15

  为什么可以这样搞?

  

9.png10.png 

 

如何解放对应的IO?

 

进行端口复用

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  AFIO -> MAPR &= ~(0x7 << 24); //1、清除[26 : 24]AFIO -> MAPR |= (0x4 << 24); //2、关闭JTAG-DP,关闭SW-DP

  AFIO -> MAPR &= ~(0x7 << 24); //1、清除[26 : 24]AFIO -> MAPR |= (0x2 << 24) ; //2、关闭JTAG-DP,开启SW-DP

  AFIO -> MAPR &= ~(0x7 << 24); //1、清除[26 : 24]AFIO -> MAPR |= (0x1 << 24) ; //2JTAG-DP + SW-DP NOJNRST

  AFIO -> MAPR &= ~(0x7 << 24); //1、清除[26 : 24]AFIO -> MAPR |= (0x0 << 24) ; //2、都被占用

  库函数写法

  

 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

AFIO -> MAPR &=  ~(0x7 << 24);   //1、清除[26 : 24]AFIO -> MAPR |=   (0x4 << 24);   //2、关闭JTAG-DP,关闭SW-DP
AFIO -> MAPR &=  ~(0x7 << 24);   //1、清除[26 : 24]AFIO -> MAPR |=   (0x2 << 24) ;  //2、关闭JTAG-DP,开启SW-DP
AFIO -> MAPR &=  ~(0x7 << 24);   //1、清除[26 : 24]AFIO -> MAPR |=   (0x1 << 24) ;  //2、JTAG-DP + SW-DP NOJNRST
AFIO -> MAPR &=  ~(0x7 << 24);   //1、清除[26 : 24]AFIO -> MAPR |=   (0x0 << 24) ;  //2、都被占用

 

库函数写法

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

//开启AFIO时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //Full SWJ Disabled (JTAG-DP + SW-DP)GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
 //开启AFIO时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//JTAG-DP Disabled and *SW-DP Enabled*GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //开启AFIO时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRSTGPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE);

 

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  AFIO -> MAPR &= ~(0x7 << 24); //1、清除[26 : 24]AFIO -> MAPR |= (0x4 << 24); //2、关闭JTAG-DP,关闭SW-DP

  AFIO -> MAPR &= ~(0x7 << 24); //1、清除[26 : 24]AFIO -> MAPR |= (0x2 << 24) ; //2、关闭JTAG-DP,开启SW-DP

  AFIO -> MAPR &= ~(0x7 << 24); //1、清除[26 : 24]AFIO -> MAPR |= (0x1 << 24) ; //2JTAG-DP + SW-DP NOJNRST

  AFIO -> MAPR &= ~(0x7 << 24); //1、清除[26 : 24]AFIO -> MAPR |= (0x0 << 24) ; //2、都被占用

  库函数写法

  

 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

AFIO -> MAPR &=  ~(0x7 << 24);   //1、清除[26 : 24]AFIO -> MAPR |=   (0x4 << 24);   //2、关闭JTAG-DP,关闭SW-DP
AFIO -> MAPR &=  ~(0x7 << 24);   //1、清除[26 : 24]AFIO -> MAPR |=   (0x2 << 24) ;  //2、关闭JTAG-DP,开启SW-DP
AFIO -> MAPR &=  ~(0x7 << 24);   //1、清除[26 : 24]AFIO -> MAPR |=   (0x1 << 24) ;  //2、JTAG-DP + SW-DP NOJNRST
AFIO -> MAPR &=  ~(0x7 << 24);   //1、清除[26 : 24]AFIO -> MAPR |=   (0x0 << 24) ;  //2、都被占用

库函数写法

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

//开启AFIO时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //Full SWJ Disabled (JTAG-DP + SW-DP)GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
 //开启AFIO时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//JTAG-DP Disabled and *SW-DP Enabled*GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //开启AFIO时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRSTGPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE);

 

  • 一文读懂芯讯通GNSS模组产品特点、运用
  • 芯讯通(SIMCom Wireless Solutions)是中国领先的物联网无线通信模组供应商,成立于2002年,总部位于上海。其产品涵盖2G/3G/4G/5G、NB-IoT、Cat-M、Wi-Fi、蓝牙及GNSS定位模组,广泛应用于车载、智能表计、共享设备、工业物联网等领域。芯讯通的GNSS模组以“通信+定位一体化”为特色,尤其适合需要实时数据传输与高精度定位的物联网场景。
    2025-04-28 26次
  • 一文读懂GNSS模组产品分类、品牌、运用
  • 全球导航卫星系统(GNSS,Global Navigation Satellite System)是一种通过卫星信号提供地理定位、导航和时间同步服务的技术。常见的GNSS包括美国的GPS、俄罗斯的GLONASS、欧盟的伽利略(Galileo)和中国的北斗(BDS)。以下从产品、品牌和应用领域三个方面进行介绍:
    2025-04-28 47次
  • 時科再获华强电子网优秀国产品牌荣誉
  • 2025年4月11日,2025年半导体产业发展趋势大会暨2024年度(第十七届)华强电子网优质供应商&电子元器件行业优秀国产品牌颁奖盛典在深圳华侨城洲际大酒店成功举办。此次盛典吸引了业内众多领先企业与专家学者参与,分享产业发展趋势和未来机遇。时科公司历时四个月,经过企业提名、专家筛选、公众投票和专家评审四大环节,最终脱颖而出,荣获“2024年度华强电子网优秀国产品牌企业”大奖。这一殊荣的获得,不仅是对时科多年努力的肯定,更是对其在行业中的卓越贡献的认可。
    2025-04-17 44次
  • 英伟达Jetson各系列区别
  • 一、性能与硬件对比 1、Jetson AGX Orin 算力:275 TOPS(INT8),旗舰级性能,支持多传感器融合。 GPU:Ampere 架构,2048 CUDA 核心 + 64 Tensor 核心,支持高并行计算。 CPU:12 核 Arm Cortex-A78AE,主频 2.2 GHz。 内存:32GB/64GB LPDDR5,带宽 204.8 GB/s。 功耗:15-60W,适用于工业级场景(如自动驾驶、智慧城市)。
    2025-04-17 89次
  • 一文读懂什么是MEMS压力传感器?
  • MEMS压力传感器是一种基于微机电系统(Micro-Electro-Mechanical Systems, MEMS)技术制造的微型传感器,主要用于测量气体或液体的压力。凭借其小型化、高灵敏度和低成本等优势,MEMS压力传感器被广泛应用于汽车、医疗、工业、消费电子和航空航天等领域。
    2025-04-17 40次

    万联芯微信公众号

    元器件现货+BOM配单+PCBA制造平台
    关注公众号,优惠活动早知道!
    10s
    温馨提示:
    订单商品问题请移至我的售后服务提交售后申请,其他需投诉问题可移至我的投诉提交,我们将在第一时间给您答复
    返回顶部