設置 | 登錄 | 註冊

作者共發了5篇帖子。

【講解】關於普中開發板上STM32F10X的PB2~PB7端口不受控制的問題

1樓 巨大八爪鱼 2016-6-30 22:15

默認情況下,由於JTAG沒有關閉,因此PB3~4不能作為普通I/O口使用。此外,為了用串口方式下載程序,還需在STM32轉接板上插上BOOT1的跳線(綠色轉接板的左上角),這更是導致了PB2~7這六個I/O口都無法使用。
為了解決這個問題,需要在程序中手動將JTAG關閉:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); // 開啟AFIO時鐘
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); // 禁用JTAG功能

下載程序時需要插上BOOT1跳線,下載完畢後拔掉BOOT1的跳線,然後才能正常使用PB0~7這八個I/O口。

如果還需下載程序,那麼就得再次插上跳線。。。。

2樓 巨大八爪鱼 2016-6-30 22:16
【測試程序:在PB0~7上顯示二進制加法流水燈】
#include <stm32f10x.h>
void delay(void)
{
 uint32_t i;
 for (i = 0; i < 2000000; i++);
}
int main(void)
{
 GPIO_InitTypeDef out;
 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); // 開啟AFIO時鐘
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); // 禁用JTAG功能
 
 out.GPIO_Mode = GPIO_Mode_Out_PP;
 out.GPIO_Pin = GPIO_Pin_All;
 out.GPIO_Speed = GPIO_Speed_2MHz;
 GPIO_Init(GPIOB, &out);
 
 GPIOB->ODR = 0x00;
 while (1)
 {
  GPIOB->ODR++;
  delay();
 }
}

3樓 巨大八爪鱼 2016-6-30 22:17
4樓 巨大八爪鱼 2016-6-30 22:17

這個是通過寄存器關閉JTAG的方法。

5樓 巨大八爪鱼 2016-6-30 22:19
不過,在實際應用中,應該儘量避免使用受影響的這六個I/O口。

內容轉換:

回覆帖子
內容:
用戶名: 您目前是匿名發表。
驗證碼:
看不清?換一張
©2010-2025 Purasbar Ver3.0 [手機版] [桌面版]
除非另有聲明,本站採用知識共享署名-相同方式共享 3.0 Unported許可協議進行許可。