STM32 中JTAG 引腳作為普通IO口設定方法

2021-06-22 13:16:17 字數 1508 閱讀 1104

第一次畫stm32 的pcb ,因為採用了swd 除錯,認為jtag的引腳pb3,pb4,沒有用到就做了普通io口,麻煩從此引起了。

設定pb3,pb4均為輸出口,且輸出高電平,用萬用表測量,pb4為高,pb3不是高電平,在看mdk 中的暫存器值,pb3,pb4都是高啊?暫存器的值怎麼和實際的值不一樣了?

唉,都讓我懷疑是不是引腳接錯了,反覆測量後發現引腳確實是對的,但為什麼pb3能輸出高,而pb4不可呢?

首先,stm32f10x系列的mcu復位後,pa13/14/15 & pb3/4預設配置為jtag功能。有時我們為了充分利用mcu i/o口的資源,會把這些

埠設定為普通i/o口。具體方法如下:

在gpio_configuration(); // 配置使用的 gpio 口:

gpio_pinremapconfig(gpio_remap_swj_disable, enable);

// 改變指定管腳的對映 gpio_remap_swj_disable swj 完全禁用(jtag+sw-dp)

gpio_pinremapconfig(gpio_remap_swj_jtagdisable , enable);

// 改變指定管腳的對映 gpio_remap_swj_jtagdisable ,jtag-dp 禁用 + sw-dp 使能

gpio_initstructure.gpio_pin = gpio_pin_3 | gpio_pin_4;

gpio_initstructure.gpio_speed = gpio_speed_50mhz;

gpio_initstructure.gpio_mode = gpio_mode_out_pp;

gpio_init(gpiob, &gpio_initstructure);

gpio_initstructure.gpio_pin = gpio_pin_11 | gpio_pin_12 | gpio_pin_13;

gpio_initstructure.gpio_speed = gpio_speed_50mhz;

gpio_initstructure.gpio_mode = gpio_mode_out_pp;

gpio_init(gpioa, &gpio_initstructure); 

注意:不要忘記在rcc_configuration()中開啟afio時鐘,

//afio時鐘

rcc_apb2periphclockcmd(rcc_apb2periph_afio, enable);

(以上**出自 

我就按照上面抄了一遍,發現沒有效果,後來發現有個專家說了句:

afio 時鐘未設定,gpio_pinremapconfig(gpio_remap_swj_disable, enable) 這句不會生效,也就是要先設定時鐘,才能配置相應埠

後變換了下順序,先設rcc_apb2periphclockcmd(rcc_apb2periph_afio, enable);,再呼叫gpio_pinremapconfig(gpio_remap_swj_disable, enable)  就完美可以了

STM32 中JTAG 引腳作為普通IO口設定方法

看上面的資料手冊,可以知道一般的io口,其預設功能就是io口。可是pb3 pb4 pa13 pa14 pa15這幾個io口的預設功能是jtag功能,io口功能反而是他們的重對映功能。因此要把他們作為普通io口使用,要把他們的重對映功能開啟。只需要把pb3,pb4,pa15當成io使用,設定 rcc ...

STM32 中JTAG 引腳作為普通IO口設定方法

第一次畫stm32 的pcb 因為採用了swd 除錯,認為jtag的引腳pb3,pb4,沒有用到就做了普通io口,麻煩從此引起了。設定pb3,pb4均為輸出口,且輸出高電平,用萬用表測量,pb4為高,pb3不是高電平,在看mdk 中的暫存器值,pb3,pb4都是高啊?暫存器的值怎麼和實際的值不一樣了...

都是stm32的JTAG引腳惹的禍

最近在除錯08介面的led顯示屏,使用的是自己做的stm32板子。除錯的時候,突然發現顯示屏,怎麼都不亮,我就開始懷疑人生了。難道是程式問題?吧啦吧啦的查詢時序圖,修改修改,加延時。然而並沒有什麼卵用!唉,都讓我懷疑是不是引腳接錯了,反覆測量後發現引腳確實是對的 難道是硬體問題?我把不需要的程式全部...