赞
踩
关于GPIO的复用。
STM32F10x系列及AT32F4xx的MCU复位后,PA13/14/15/ PB3/PB4默认配置为JTAG功能。那么为了充分利用芯片的I/O口资源,就会把这些端口设置为通用I/O口,意味着将这些引脚复用为普通I/O功能。以AT32F4xx系列为例。
在数据手册有以下介绍:
在用户手册里复用功能I/O章节和调试设置章节有关复用说明:
根据以上手册内容可知:
1、默认JTAG调试功能,那么PA13/PA14/PA15 /PB3/PB4都不能做普通I/O口使用;
2、关闭JTAG-DP且同时关闭SW-DP,则PA13/PA14/PA15/PB3/PB4窦可做普通I/O口使用。
以PB3为例:可以选择SWJTAG_GRMP[2: 0]位 的010和100,优先选择关闭少的,即选择010所对应的(AFIO_MAP)的设置。尽量不要关闭SW-DP,关闭SW-DP就不能使用SWD下载(无法使用J-LINK调试),给调试带来不便。
将PB3作为普通I/O的设置包括以下步骤:
1、时钟配置:添加 RCC_APB2Periph_AFIO
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
2、添加调试I/O配置寄存器AFIO_MAP
GPIO_PinsRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //AFIO_MAP的SWJTAG_GRMP[2: 0]位 为010(优先)
或
GPIO_PinsRemapConfig(GPIO_Remap_SWJ_ALLDisable, ENABLE); //AFIO_MAP的SWJTAG_GRMP[2: 0]位 为100
//一般在库文件的xx_gpio.h中会有关于AFIO_MAP_define
3、其他代码就是普通引脚配置了;(选择芯片不同,配置GPOI也会有些差异)
4、配置好后,若此IO口控制输出就用万用表测量输出器件状态;也可直接测量MCU引脚PB3的对地电压变化,在0V/3.3V切换。
若是STM的请参考:
1、若你使用的仿真器支持SWD仿真模式,就不受这个禁止JTAG功能的影响。但受SW-DP影响。在重新上电的之前,保证BOOT0为高电平,BOOT1为低电平(可将BOOT0引脚直接和高电平相连),此时禁止程序从烧写过的代码启动,重新烧写程序即可。
2、若使用JTAG-DP,则
设置启动模式为ISP模式(BOOT0=1、BOOT1=0),用ISP程序将FLASH擦除,之后恢复JTAG功能。
或设置启动模式为RAM运行模式(BOOT0=1、BOOT1=1)。将开发板断电后重新上电,此时就因不是在用户程序模式,所以不会执行禁用JTAG的语句,JTAG-DP可用。
三种启动模式对应的存储介质均是芯片内置。控制启动模式的管脚BOOT0和BOOT1,它们在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序。
1) BOOT0=0 BOOT1=x从用户闪存启动,为正常的工作模式,用户闪存=芯片内置的Flash。
2)BOOT0=1 BOOT1=1从内置SRAM启动,SRAM掉电后数据就丢失,这种模式可用于调试。SRAM=芯片内置的RAM区,即内存。
3)BOOT0=1 BOOT1=0 从系统存储器启动,这种模式启动的程序功能由厂家设置;系统存储器=芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROROMM区。
参考文章:
STM32芯片的PB3 PB4 PA15引脚如何用作普通端口
程序禁用swd-jtag功能,如何用swd下载
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。