h1_key

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


 

先说为什么会不够用

  一般在项目开发阶段需求都是慢慢的添加的,预计需要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);

 

  • 瑞萨收购Transphorm扩展电源产品阵容
  • 瑞萨与Transphorm宣布双方已达成最终协议,根据该协议,瑞萨子公司将以每股5.10美元现金收购Transphorm所有已发行普通股,较Transphorm在2024年1月10日的收盘价溢价约35%,较过去十二个月的成交量加权平均价格溢价约56%,较过去六个月的成交量加权平均价格溢价约78%。
    2024-01-11 558次
  • 瑞萨电子预先公布了第五代R-Car SoC
  • 瑞萨电子预先公布了第五代R-Car SoC的相关信息,该SoC面向高性能应用,采用先进的Chiplet小芯片封装集成技术,将为车辆工程师在设计时带来更大的灵活度。举例来说,若高级驾驶辅助系统(ADAS)需要兼顾更突出的AI性能时,工程师可将AI加速器集成至单个芯片中。
    2023-12-12 702次
  • ROHM罗姆半导体采用SOT-223-3小型封装的600V耐压Super Junction MOSFET
  • ROHM罗姆半导体开发出采用SOT-223-3小型封装(6.50mm×7.00mm×1.66mm)的600V耐压Super Junction MOSFET*1,新产品非常适用于照明用小型电源、电泵和电机等应用。
    2023-12-12 695次
  • MPS全系列电机驱动产品
  • MPS芯源系统在上海举办了一场电机驱动产品媒体发布会。MPS 公司模拟产品线总监瞿松(Song Qu)协同 MPS 公司中国区负责电机驱动和传感器产品的 BD 经理潘兴卓(Patrick Pan)分享了在汽车电子,特别是汽车电机驱动的发展方向、技术及市场优势,以及未来的布局和规划,并介绍了一些新产品。
    2023-11-06 899次
  • 美国柏恩汽车电子元件全系列介绍
  • 美国柏恩日前出版最新汽车零组件选型指南, 展示公司多元的AEC-Q200认证零组件, 内容涵盖调节及过滤电子电路的电阻和磁性产品。此外还有Bourns专为汽车应用而设计的大量电路保护产品, 这些产品满足新一代照明、舒适性、定位、网路、电气和娱乐应用对零组件的需求。
    2023-11-02 348次

    万联芯微信公众号

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