h1_key

當(dāng)前位置:首頁(yè) >新聞資訊 > 行業(yè)資訊>STM32F103單片機(jī)IO不夠用應(yīng)該這么來(lái)
STM32F103單片機(jī)IO不夠用應(yīng)該這么來(lái)
2022-06-23 614次


 

先說(shuō)為什么會(huì)不夠用

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

  STM32F103單片機(jī)JTAG端口重映射

  JTAG接口

  簡(jiǎn)單理解這是一個(gè)下載程序用的接口使用的工具是Jlink

  SWD接口

  簡(jiǎn)單理解就是一個(gè)下載程序的接口使用的工具是STlink

  IO

  簡(jiǎn)單理解就是一個(gè)可以進(jìn)行輸入輸出的普通接口

  STM32IO

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

  映射的關(guān)系由寄存器進(jìn)行控制也可以庫(kù)函數(shù)來(lái)實(shí)現(xiàn),但是映射的方式不多,也就三種

  §全功能 SWJJTAG沒(méi)有JTRST。

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

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

  §為什么要這樣搞?

  因?yàn)檫@樣設(shè)計(jì)可以允許更多的GPIO被解放出來(lái)。

  比如

  第一種可以解放PB4

  第二種可以解放PB3 PB4 PA15

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

 

 

為什么可以這樣搞?

  

7.png8.png

  

如何解放對(duì)應(yīng)的IO?

    STM32F103單片機(jī)IO不夠用應(yīng)該這么來(lái)

  先說(shuō)為什么會(huì)不夠用

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

  STM32F103單片機(jī)JTAG端口重映射

  JTAG接口

  簡(jiǎn)單理解這是一個(gè)下載程序用的接口使用的工具是Jlink

  SWD接口

  簡(jiǎn)單理解就是一個(gè)下載程序的接口使用的工具是STlink

  IO

  簡(jiǎn)單理解就是一個(gè)可以進(jìn)行輸入輸出的普通接口

  STM32IO

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

  映射的關(guān)系由寄存器進(jìn)行控制也可以庫(kù)函數(shù)來(lái)實(shí)現(xiàn),但是映射的方式不多,也就三種

  §

  全功能 SWJ,JTAG沒(méi)有JTRST

  §

  §

  禁用JTAG,啟用SWJ。(PB3/PB4/PA15 可重映射為其他功能)

  §

  §

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

  §

  §

  為什么要這樣搞?

  因?yàn)檫@樣設(shè)計(jì)可以允許更多的GPIO被解放出來(lái)。

  比如

  第一種可以解放PB4

  第二種可以解放PB3 PB4 PA15

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

  為什么可以這樣搞?

  

9.png10.png 

 

如何解放對(duì)應(yīng)的IO?

 

進(jìn)行端口復(fù)用

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  ·

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

  AFIO -> MAPR &= ~(0x7 << 24); //1、清除[26 : 24]AFIO -> MAPR |= (0x2 << 24) ; //2、關(guān)閉JTAG-DP,開(kāi)啟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、都被占用

  庫(kù)函數(shù)寫(xiě)法

  

 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

AFIO -> MAPR &=  ~(0x7 << 24);   //1、清除[26 : 24]AFIO -> MAPR |=   (0x4 << 24);   //2、關(guān)閉JTAG-DP,關(guān)閉SW-DP
AFIO -> MAPR &=  ~(0x7 << 24);   //1、清除[26 : 24]AFIO -> MAPR |=   (0x2 << 24) ;  //2、關(guān)閉JTAG-DP,開(kāi)啟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、都被占用

 

庫(kù)函數(shù)寫(xiě)法

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

//開(kāi)啟AFIO時(shí)鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //Full SWJ Disabled (JTAG-DP + SW-DP)GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
 //開(kāi)啟AFIO時(shí)鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//JTAG-DP Disabled and *SW-DP Enabled*GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //開(kāi)啟AFIO時(shí)鐘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、關(guān)閉JTAG-DP,關(guān)閉SW-DP

  AFIO -> MAPR &= ~(0x7 << 24); //1、清除[26 : 24]AFIO -> MAPR |= (0x2 << 24) ; //2、關(guān)閉JTAG-DP,開(kāi)啟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、都被占用

  庫(kù)函數(shù)寫(xiě)法

  

 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

AFIO -> MAPR &=  ~(0x7 << 24);   //1、清除[26 : 24]AFIO -> MAPR |=   (0x4 << 24);   //2、關(guān)閉JTAG-DP,關(guān)閉SW-DP
AFIO -> MAPR &=  ~(0x7 << 24);   //1、清除[26 : 24]AFIO -> MAPR |=   (0x2 << 24) ;  //2、關(guān)閉JTAG-DP,開(kāi)啟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、都被占用

庫(kù)函數(shù)寫(xiě)法

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

//開(kāi)啟AFIO時(shí)鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //Full SWJ Disabled (JTAG-DP + SW-DP)GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
 //開(kāi)啟AFIO時(shí)鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//JTAG-DP Disabled and *SW-DP Enabled*GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //開(kāi)啟AFIO時(shí)鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRSTGPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE);

 

  • 時(shí)科再獲華強(qiáng)電子網(wǎng)優(yōu)秀國(guó)產(chǎn)品牌榮譽(yù)
  • 2025年4月11日,2025年半導(dǎo)體產(chǎn)業(yè)發(fā)展趨勢(shì)大會(huì)暨2024年度(第十七屆)華強(qiáng)電子網(wǎng)優(yōu)質(zhì)供應(yīng)商&電子元器件行業(yè)優(yōu)秀國(guó)產(chǎn)品牌頒獎(jiǎng)盛典在深圳華僑城洲際大酒店成功舉辦。此次盛典吸引了業(yè)內(nèi)眾多領(lǐng)先企業(yè)與專家學(xué)者參與,分享產(chǎn)業(yè)發(fā)展趨勢(shì)和未來(lái)機(jī)遇。時(shí)科公司歷時(shí)四個(gè)月,經(jīng)過(guò)企業(yè)提名、專家篩選、公眾投票和專家評(píng)審四大環(huán)節(jié),最終脫穎而出,榮獲“2024年度華強(qiáng)電子網(wǎng)優(yōu)秀國(guó)產(chǎn)品牌企業(yè)”大獎(jiǎng)。這一殊榮的獲得,不僅是對(duì)時(shí)科多年努力的肯定,更是對(duì)其在行業(yè)中的卓越貢獻(xiàn)的認(rèn)可。
    2025-04-17 16次
  • 英偉達(dá)Jetson各系列區(qū)別
  • 一、性能與硬件對(duì)比 1、Jetson AGX Orin 算力:275 TOPS(INT8),旗艦級(jí)性能,支持多傳感器融合。 GPU:Ampere 架構(gòu),2048 CUDA 核心 + 64 Tensor 核心,支持高并行計(jì)算。 CPU:12 核 Arm Cortex-A78AE,主頻 2.2 GHz。 內(nèi)存:32GB/64GB LPDDR5,帶寬 204.8 GB/s。 功耗:15-60W,適用于工業(yè)級(jí)場(chǎng)景(如自動(dòng)駕駛、智慧城市)。
    2025-04-17 22次
  • 一文讀懂什么是MEMS壓力傳感器?
  • MEMS壓力傳感器是一種基于微機(jī)電系統(tǒng)(Micro-Electro-Mechanical Systems, MEMS)技術(shù)制造的微型傳感器,主要用于測(cè)量氣體或液體的壓力。憑借其小型化、高靈敏度和低成本等優(yōu)勢(shì),MEMS壓力傳感器被廣泛應(yīng)用于汽車、醫(yī)療、工業(yè)、消費(fèi)電子和航空航天等領(lǐng)域。
    2025-04-17 16次
  • NVIDIA Jetson嵌入式AI平臺(tái)介紹
  • NVIDIA Jetson 是英偉達(dá)推出的嵌入式人工智能計(jì)算平臺(tái),專為邊緣計(jì)算、自主機(jī)器和工業(yè)應(yīng)用設(shè)計(jì),結(jié)合了高性能GPU加速計(jì)算與低功耗特性,廣泛應(yīng)用于實(shí)時(shí)AI推理、計(jì)算機(jī)視覺(jué)和復(fù)雜算法處理場(chǎng)景。
    2025-04-17 18次
  • XBLW/芯伯樂(lè)產(chǎn)品應(yīng)用在數(shù)字萬(wàn)用表上的開(kāi)發(fā)設(shè)計(jì)
  • XBLW-TL072運(yùn)算放大器扮演著電壓跟隨器的角色,其主要任務(wù)是提供一個(gè)穩(wěn)定的1.4V參考電壓。這個(gè)電壓是通過(guò)一個(gè)由34.8kΩ上拉電阻和15kΩ下拉電阻形成的分壓器產(chǎn)生的。XBLW-TL072的高輸入阻抗和低輸出阻抗特性使其成為理想的緩沖器,能夠保護(hù)前級(jí)電路不受負(fù)載效應(yīng)的影響,同時(shí)為后續(xù)電路提供穩(wěn)定的電壓源。
    2025-04-10 46次

    萬(wàn)聯(lián)芯微信公眾號(hào)

    元器件現(xiàn)貨+BOM配單+PCBA制造平臺(tái)
    關(guān)注公眾號(hào),優(yōu)惠活動(dòng)早知道!
    10s
    溫馨提示:
    訂單商品問(wèn)題請(qǐng)移至我的售后服務(wù)提交售后申請(qǐng),其他需投訴問(wèn)題可移至我的投訴提交,我們將在第一時(shí)間給您答復(fù)
    返回頂部