问题:在STM32中为了将来JTAG引脚作为普通IO口用,将禁用JTAG 启用SWD后,再编译后发现无法再下载进入编译器,显示找不到端口,如图:
解决方法:
1.修改boot位,用公母线连接将boot电位拉高置一,如图(只用看黄线位置,外边是高电压):
2.找一个新代码(切记不要再拿有禁用JTAG口的代码,用我下面这个也可以)(可省略)
#include "led.h"
void led_init (void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定义结构体
//开启硬件时钟 PB5
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA,ENABLE); //开启APB中GPIOA、GPIOB硬件时钟
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); 开启硬件时钟 PA5
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //配置PB6、PB7、PB8 推挽输出模式
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //配置GPIO模式
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_1);//控制端口寄存器输出电平
GPIO_SetBits(GPIOB,GPIO_Pin_6);
GPIO_SetBits(GPIOB,GPIO_Pin_7);
GPIO_SetBits(GPIOB,GPIO_Pin_8);
}
3.编译新代码无错误后,一直按住复位键(我图中的白色按钮),在点击下载一瞬间,放开复位按钮,显示如下图,即可
记住!!下载程序一瞬间一定要松开复位键,当keil不在提示报错的时候,那么就大功告成了!