本文介紹了如何使用GPIO固件庫(kù)來(lái)釋放SWJ-DP引腳(串行JTAG調(diào)試端口),并且重用為標(biāo)準(zhǔn)IO。SWJ-DP IO能夠用作標(biāo)準(zhǔn)IOs,它的性能可以達(dá)到標(biāo)準(zhǔn)IO的80%。
當(dāng)系統(tǒng)復(fù)位后,會(huì)默認(rèn)把以上引腳復(fù)用為調(diào)試功能:PA15引腳復(fù)位后的主要功能為 JTDI、PB3為JTDO、PB4為JNTRST;如果把這些引腳作為普通引腳使用時(shí),則需要進(jìn)行重映射。通過(guò)設(shè)置復(fù)用重映射和調(diào)試I/O配置寄存器 (AFIO_MAPR) 的SWJ_CFG[2:0]位,可以改變上述重映像配置。
1、硬件描述
把LED燈與SWJ-DP引腳相連。
2、固件描述
提供的GPIO驅(qū)動(dòng)通過(guò)一系列的函數(shù)支持所有的GPIO 特性。
首先,SWJ-DP被禁用,SWJ-DP引腳配置為輸出推挽式。5個(gè)LED連接到PA13(JTMS/SWDIO),PA14(JTCK/SWDCLK),PA15(JTDI),PB03(JTDO),PB04(JTRST),這些LED在無(wú)限循環(huán)中被翻轉(zhuǎn)。
注意:一旦SWJ-DP被禁用,和主機(jī)的調(diào)試器的連接將斷開(kāi)。只要JTAG IO仍然禁用,就不能重新建立調(diào)試連接。為了避免這種情況,PB09被連接到一個(gè)按鈕,該按鈕用來(lái)禁用或者不禁用JTAG IOs。
●在復(fù)位時(shí)按鈕按下,JTAG IO禁用。
●在復(fù)位時(shí)按鈕沒(méi)有按下,JTAG不改變。
3、注意事項(xiàng)
重映射的方式一共有三種。分別描述如下:
1.GPIO_Remap_SWJ_JTAGDisable:/*< JTAG-DP Disabled and SW-DP Enabled */ ?即能用PB3,PB4,PA15做普通IO,PA13&14用于SWD調(diào)試。
2.GPIO_Remap_SWJ_Disable:/*< Full SWJ Disabled (JTAG-DP + SW-DP) */ ?5個(gè)引腳全為普通引腳,但不能再用JTAG&SWD仿真器調(diào)試,只能用ST-Link調(diào)試。
3.GPIO_Remap_SWJ_NoJTRST:/*< Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST */PB4可為普通IO口,JTAG&SWD正常使用,但JTAG沒(méi)有復(fù)位。
如果你用到所有的五個(gè)引腳當(dāng)做普通IO口,那么上述步驟二中的重映射配置應(yīng)寫(xiě)為:
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
如果你用PB3,PB4,PA15做普通IO,PA13&14用于SWD調(diào)試,則重映射配置應(yīng)寫(xiě)為:
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
舉例:PA15管腳默認(rèn)為JTAG接口的JTDI,做普通IO口使用時(shí)需Remap,否則將出現(xiàn)一直輸出高電平的情況。
void BUZ_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//關(guān)鍵,禁用JTAG 只使用SWD GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //復(fù)用時(shí)鐘使能,開(kāi)啟AFIO時(shí)鐘 GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE);//引腳影射,禁止JTRST功能 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStruct); }
PB3這個(gè)調(diào)試引腳,比較特殊一點(diǎn),需要設(shè)置 DBGMCU_CR寄存器,這個(gè)寄存器位說(shuō)明如下:
要做的就是配置TRACE_IOEN=0,不分配跟蹤引腳。異步跟蹤功能只能在SW-DP調(diào)試接口上實(shí)現(xiàn),當(dāng)我們?cè)谲浖线x擇使用SW-DP調(diào)試時(shí),便會(huì)把一開(kāi)始默認(rèn)的JTAG-DP切換到SW-DP,而對(duì)應(yīng)的,也會(huì)開(kāi)啟異步跟蹤功能,使得我們可以在IDE上可以進(jìn)入DEBUG模式調(diào)試。
釋放PA15、PB3、PB4總的代碼就是:
//不分配跟蹤引腳,釋放PB3 DBGMCU->CR=DBGMCU->CR&~((uint32_t)1<<5);?? //使能復(fù)用時(shí)鐘和引腳 GPIO時(shí)鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA?|?RCC_APB2Periph_GPIOB?|?RCC_APB2Periph_AFIO,?ENABLE);?? //切換 SWJ調(diào)試,釋放 PA15,PB4, PB3 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);??
值得注意的是,當(dāng)釋放禁用了PB3的異步跟蹤后,就無(wú)法正常進(jìn)行DEBUG調(diào)試了。
審核編輯:湯梓紅
-
引腳
+關(guān)注
關(guān)注
16文章
1193瀏覽量
50409 -
GPIO
+關(guān)注
關(guān)注
16文章
1204瀏覽量
52051 -
STM32F10xxx
+關(guān)注
關(guān)注
0文章
25瀏覽量
8274 -
固件庫(kù)
+關(guān)注
關(guān)注
2文章
97瀏覽量
14938
原文標(biāo)題:使用STM32F10xxx SWJ引腳作為標(biāo)準(zhǔn)IO
文章出處:【微信號(hào):雨飛工作室,微信公眾號(hào):雨飛工作室】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論