有沒有小伙伴遇到這種情況:在使用GD32F303的時候,想要將PA13~15以及PB3和PB4作為IO口來使用,卻怎么也不成功呢?下面小編就來告訴大家原因。
我們先來看下GD32F303 datasheet中這幾個引腳的定義:


原來,這幾個引腳比較特殊,它們在默認情況下,是用于調試的JTAG/SWD口功能,想要當做普通IO口或者其他復用功能來使用需要進行“remap”。
那么如何進行remap呢?我們再來看下GD32F303 用戶手冊中的《GPIO和AFIO》章節(jié)中的JTAG/SWD 備用功能重映射介紹:


可以看到,remap有多種模式可以選擇,比如將SWJ_CFG設置為“010”,那么就可以保留SWD功能,即PA13和PA14還可以用于調試,而PA15、PB3和PB4則被“釋放”,從而可以當做普通IO或者其他復用功能引腳使用;若設置SWJ_CFG為“100”,那么PA13~PA15、PB3、PB4都可以當做普通IO口來使用,但注意,這個時候要想再用SWD模式去調試MCU會失敗哦。
現(xiàn)在來教大家如何通過庫函數(shù)實現(xiàn)JATG/SWD的remap功能。
通過用戶手冊我們可以看到SWJ_CFG【2:0】位于AFIO_PCF0中,所以必須要先打開AF時鐘:

關鍵字:GD32F303 IO口 復用功能
引用地址:
GD32F303想控制PA13~15、PB3和PB4不成功?
推薦閱讀最新更新時間:2025-04-17 06:36
GD32F303固件庫開發(fā)(2)----讀保護與寫保護
概述 芯片讀保護以后,flash將不可以從外部讀取,這樣可以防止別人讀取或者盜取芯片代碼,如果想再次燒錄代碼,需要解除保護,有時候在代碼調試的過程中,也有可能會觸發(fā)讀保護,解除讀保護也可以使用代碼,也可以使用軟件進行讀保護解鎖。 在我們的KEIL燒寫和編譯過程中,有可能會觸發(fā)讀保護,導致程序無法下載進入到芯片內部,故需要進行解鎖操作。 芯片申請 芯片和開發(fā)板都可免費申請,暫時只能以公司名義免費申請,填下下面表格即可。 軟件進入讀保護 打開GD-Link Programmer,點擊Target- Security可以進入讀保護模式。 這時候會提示是否進入讀保護。 進入讀保護模式后,點擊Target- Program進行
[單片機]
GD32F303固件庫開發(fā)(8)----USART收發(fā)配置
概述 本章主要配置printf進行打印。 查閱手冊可以得知,PA9、PA10為串口0的輸出和輸入口。 樣品申請 https://www.wjx.top/vm/wFGhGPF.aspx# 硬件準備 這里準備了1塊開發(fā)板進行驗證,分別是GD32303C_START開發(fā)板。 keil配置 microlib 進行了高度優(yōu)化以使代碼變得很小。 它的功能比缺省 C 庫少,并且根本不具備某些 ISO C 特性。 某些庫函數(shù)的運行速度也比較慢,如果要使用printf(),必須開啟。 串口初始化 對串口進行配置。 使用串口時候,需要對GPIO進行復用這里把串口的 Tx 引腳配置為復用推挽輸出,Rx 引腳為浮空輸入。 設置USART0 通
[單片機]
STM32單片機的八種GPIO口模式
GPIO 是通用輸入/輸出端口的簡稱,本文以STM32為例進行說明,其他的單片機功能上都是大同小異,學會STM32的GPIO,我們可以觸類旁通。 GPIO 的引腳與外部硬件設備連接,可實現(xiàn)與外部通訊、控制外部硬件或者采集外部硬件數(shù)據的功能。 STM32的八種GPIO口模式 1) GPIO_Mode_AIN 模擬輸入; 2) GPIO_Mode_IN_FLOATING 浮空輸入; 3) GPIO_Mode_IPD 下拉輸入; 4) GPIO_Mode_IPU 上拉輸入; 5) GPIO_Mode_Out_OD 開漏輸出; 6) GPIO_Mode_Out_PP 推挽輸出; 7) GPIO_Mode_AF_OD 復用開漏輸
[單片機]
使用單片機3個IO口+74HC595驅動驅動控制LCD1602液晶
此內容有一定的深度,初學者不建議看。 最近一直在研究數(shù)碼管驅動芯片 74HC595 ,發(fā)現(xiàn)一件很好玩的事情,那就是 用74HC595做驅動調試程序時,發(fā)現(xiàn)它只能輸出,不能輸入。 查找大量資料,從某個網友制作的mylib.c(NES)中獲得了一條指令: #define bin(_a,_b,_c,_d,_e,_f,_g,_h) ((_a) 7|(_b) 6|(_c) 5|(_d) 4|(_e) 3|(_f) 2|(_g) 1|(_h)) 分別是8 7 6 5 4 3 2 1位 我就想既然情況是這樣的,那么能不能完全用74595來控制整個1602呢?于是…就有個下面這個有趣的過程了 廢話不多說,先上電路系統(tǒng)仿
[單片機]
STM32 關閉JTAG 使用相應GPIO口 簡單記錄
STM32 的PA13-PA14-PA15-PB3-PB4-PB5主要是用來JTAG調試用的,于是在默認下是啟動后為JTAG模式,但是對于不需要JTAG而需要充分利用GPIO口時,就需要將JTAG關閉,設置為GPIO模式。 GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //打開PA時鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //打開PB時鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFI
[單片機]
MSP430F2272 IO口中斷使用的幾點總結
這幾天調試430,要求用IO中斷喚醒系統(tǒng)。總結了以下幾點經驗,在使用IO口中斷時應該注意。 一、多源中斷中斷標志需要軟件清零。 在TI數(shù)據手冊指出多源中斷中斷標志需要由軟件清理。但是我在線仿真發(fā)現(xiàn)定時器的時鐘中斷和捕獲中斷好像會自動清零。不過最好還是加上軟件清零。而IO口中斷必須使用軟件清零。 二、在中斷關閉的情況下中斷標志仍然會被置位。 當IO口配置為中斷功能后,不管是否開啟中斷允許(PxIE.n),當中斷條件滿足時,相應的中斷標志PxIFG.n都會由硬件自動置1。這樣能最大限度的減少丟失中斷。如果在程序中要經常開關中斷,建議在每次開中斷之前先清零對應的中斷標志位。不然可能會有問題。例如,在我的項目中需要用輸入脈
[單片機]
ARM筆記: GPIO口LED程序
leds.bin:crt0.S leds.c arm-linux-gcc -g -c -o crt0.o crt0.S arm-linux-gcc -g -c -o leds.o leds.c arm-linux-ld -Ttext 0x00000000 -g crt0.o leds.o -o leds_elf arm-linux-objcopy -O binary -S leds_elf leds.bin arm-linux-objdump -D -m arm leds_elf leds.dis clean: rm -f leds.dis leds.bin leds_elf *.o .text .gl
[單片機]
STM8S PWM輸出停止后 IO口電平輸出
STM8S有許多定時器支持PWM輸出,但在停止定時器后,IO口電平到底是多少呢?或高或低。 因此,為了確定PWM停止輸出電平后其對應的值是多少,我們在停止PWM輸出時需要對CCMR1寄存器進行設置。 例如, TIM2_Cmd(DISABLE); /*停止PWM后將電平拉為低電平*/ TIM2_ForcedOC1Config(TIM2_FORCEDACTION_INACTIVE); GPIO_WriteLow(GPIOC, GPIO_PIN_5); 即可。 恢復時候需要重新將定時器初始化 TIM2_DeInit(); TIM2_TimeBaseInit(TIM2_PRESCALER_16,uFr
[單片機]