h1_key

當前位置:首頁 >新聞資訊 > 行業(yè)資訊>STM32F103單片機IO不夠用應該這么來
STM32F103單片機IO不夠用應該這么來
2022-06-23 563次


 

先說為什么會不夠用

  一般在項目開發(fā)階段需求都是慢慢的添加的,預計需要18IO結果20個還不夠,甚至有的時候已經全部用完了現有的資源,還需要多出一個或者兩個IO來做一個系統(tǒng)運行指示燈這樣的功能,就沒必要換一款更高性能的單片機來做了,這時候就會想能不能再壓榨一下單片機把多余的資源釋放出來。其實STM32F103單片機JTAG端口重映射可以完成這樣的事情。

  STM32F103單片機JTAG端口重映射

  JTAG接口

  簡單理解這是一個下載程序用的接口使用的工具是Jlink

  SWD接口

  簡單理解就是一個下載程序的接口使用的工具是STlink

  IO

  簡單理解就是一個可以進行輸入輸出的普通接口

  STM32IO

  STM32有很多IO口,IO口占據了絕大多數的管腳,但是有的管腳天生就不平凡被安排了更牛逼的工作那就是下載程序用,如果想要它由牛逼變成普通就要對本事下載接口的管腳進行功能重新映射。

  映射的關系由寄存器進行控制也可以庫函數來實現,但是映射的方式不多,也就三種

  §全功能 SWJ,JTAG沒有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不夠用應該這么來

  先說為什么會不夠用

  一般在項目開發(fā)階段需求都是慢慢的添加的,預計需要18IO結果20個還不夠,甚至有的時候已經全部用完了現有的資源,還需要多出一個或者兩個IO來做一個系統(tǒng)運行指示燈這樣的功能,就沒必要換一款更高性能的單片機來做了,這時候就會想能不能再壓榨一下單片機把多余的資源釋放出來。其實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);

 

  • 成興光丨LED燈珠點亮壁燈,綻放獨特光彩
  • 成興光LED壁燈作為一種獨特的照明裝飾燈具,在家居裝飾中扮演著越來越重要的角色。它不僅提供必要的照明,還能為家居環(huán)境增添溫馨與時尚感,成為家居裝飾的新寵。LED壁燈以其獨特的設計和多樣化的風格,滿足了各種家居裝飾的需求。無論是簡約現代還是古典奢華,LED壁燈都能完美融入,為空間增添一抹獨特的韻味。
    2024-10-31 214次
  • 時科榮獲“國際影響力品牌”大獎,引領半導體行業(yè)創(chuàng)新發(fā)展
  • 5月29日,2024電子信息產業(yè)新質生產力交流大會暨第七屆“藍點獎”頒獎盛典在深圳龍華隆重舉行。本次大會匯聚了來自政府、學術界、產業(yè)界及企業(yè)界的近600位嘉賓,共同探討和展望電子信息產業(yè)新質生產力的發(fā)展趨勢與前景,并表彰了在電子信息創(chuàng)新發(fā)展、品牌價值提升及技術競爭等方面做出卓越貢獻的企業(yè)
    2024-06-03 23051次
  • 瑞薩收購Transphorm擴展電源產品陣容
  • 瑞薩與Transphorm宣布雙方已達成最終協(xié)議,根據該協(xié)議,瑞薩子公司將以每股5.10美元現金收購Transphorm所有已發(fā)行普通股,較Transphorm在2024年1月10日的收盤價溢價約35%,較過去十二個月的成交量加權平均價格溢價約56%,較過去六個月的成交量加權平均價格溢價約78%。
    2024-01-11 23250次
  • 瑞薩電子預先公布了第五代R-Car SoC
  • 瑞薩電子預先公布了第五代R-Car SoC的相關信息,該SoC面向高性能應用,采用先進的Chiplet小芯片封裝集成技術,將為車輛工程師在設計時帶來更大的靈活度。舉例來說,若高級駕駛輔助系統(tǒng)(ADAS)需要兼顧更突出的AI性能時,工程師可將AI加速器集成至單個芯片中。
    2023-12-12 23536次
  • ROHM羅姆半導體采用SOT-223-3小型封裝的600V耐壓Super Junction MOSFET
  • ROHM羅姆半導體開發(fā)出采用SOT-223-3小型封裝(6.50mm×7.00mm×1.66mm)的600V耐壓Super Junction MOSFET*1,新產品非常適用于照明用小型電源、電泵和電機等應用。
    2023-12-12 1374次

    萬聯(lián)芯微信公眾號

    元器件現貨+BOM配單+PCBA制造平臺
    關注公眾號,優(yōu)惠活動早知道!
    10s
    溫馨提示:
    訂單商品問題請移至我的售后服務提交售后申請,其他需投訴問題可移至我的投訴提交,我們將在第一時間給您答復
    返回頂部