作者共发了5篇帖子。 内容转换:不转换▼
 
点击 回复
431 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)
 

本帖信息

点击数:431 回复数:4
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2016-6-30 22:19
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。