STM32技术细节(问题)总结

STM32F1系列如何将JTAG或SWD当做GPIO端口来使用?

如果想屏蔽SWD和JTAG调试端口为普通GPIO(PA13,PA14,PA15,PB3,PB4为GPIO,不用调试功能):

void EXLEDKEY_GPIO_Config(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
        GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable , ENABLE);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
}

注意

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable , ENABLE);

时钟使能顺序,不然不能使用,如果想用SWD,用PA15,PB3,PB4为GPIO(PA13,PA14为调试端口,)将上述:

GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable , ENABLE);

换为:

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);

如果想恢复所有的端口(PA13,PA14,PA15,PB3,PB4为调试端口),执行:

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , DISABLE);

STM32如何使用串口下载?

STM32全系列好像都是可以使用串口下载程序的,步骤是:
  • 让核心板进入BOOT0置1重新上电,或复位进入isp下载模式
  • 打开软件加载一般是HEX文件下载就好
  • 重新上电就运行新程序了

ps:我们店的核心板现在大部分都是boot0按键,进入isp下载模式只需,按住boot0按键按一下复位就OK。

STM32系列如何实现USB线下载程序?

我经验中STM32F4 F7 H7 STM32F105和STM32F107系列可以使用USB线下载的,具体方法,左侧点击PYB利用USB线刷入固件。