目前共有5篇帖子。 內容轉換:不轉換▼
 
點擊 回復
398 4
【讲解】关于普中开发板上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口。

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
(快捷鍵:Ctrl+Enter)
 

本帖信息

點擊數:398 回複數:4
評論數: ?
作者: 巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2016-6-30 22:19
 
©2010-2024 Arslanbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。