打印
[应用相关]

雅特力AT32默认非GPIO的Pin如何设置为GPIO(FAQ0016)

[复制链接]
3464|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
onlycook|  楼主 | 2021-5-10 16:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

[url=]Questions[/url]如何将以下默认非GPIOPin设置为GPIO

OSC_IN               PD0

OSC_OUT           PD1

JTMS-SWDIO    PA13

JTCK-SWCLK     PA14

JTDI                   PA15

JTDO                 PB3

NJTRST             PB4

TAMPER-RTC    PC13

OSC32_IN         PC14

OSC32_OUT     PC15

Answer将以上IO设置为GPIO,需要开启对应GPIO时钟、开启复用时钟、将IO配置为输入/输出/复用功能、设置重映射、关闭入侵检测、关闭外部时钟等相应的操作。

1.         将OSC_IN、OSC_OUT设置为GPIO输出,需要设置如下:

//开启GPIOD时钟、开启复用时钟

RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOD | RCC_APB2PERIPH_AFIO, ENABLE);

//关闭外部高速时钟

RCC_HSEConfig(RCC_HSE_DISABLE);

//设置PD0、PD1为推挽输出

GPIO_InitStructure.GPIO_Pins = GPIO_Pins_0 | GPIO_Pins_1;

GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;

GPIO_Init(GPIOD, &GPIO_InitStructure);

//设置重映射 JTAG-DP Disabled and SW-DP Enabled

GPIO_PinsRemapConfig(GPIO_Remap_PTD01, ENABLE);

注:如果要使用PD0PD1,则时钟初始化时不用使能HSEPLL时钟源不能选择为HSE

2.         将SWJ设置为GPIO,例如将JTDI、JTDO、NJTRST设置为GPIO输出,需要设置如下:

//开启GPIOA、GPIOB时钟、开启复用时钟

RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOA | RCC_APB2PERIPH_GPIOB | RCC_APB2PERIPH_AFIO, ENABLE);

//设置PA15、PB3、PB4为推挽输出

         GPIO_InitStructure.GPIO_Pins = GPIO_Pins_15;

       GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_2MHz;

       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;

       GPIO_Init(GPIOA, &GPIO_InitStructure);

       GPIO_InitStructure.GPIO_Pins = GPIO_Pins_3 | GPIO_Pins_4;

       GPIO_Init(GPIOB, &GPIO_InitStructure);

//设置重映射 JTAG-DP Disabled and SW-DP Enabled

       GPIO_PinsRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);



关于SWJ重映射说明:

/*!< Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST */

#define GPIO_Remap_SWJ_NoJNTRST     ((uint32_t)0x01000000)

/*!< JTAG-DP Disabled and SW-DP Enabled */

#define GPIO_Remap_SWJ_JTAGDisable  ((uint32_t)0x02000000)

/*!< Full SWJ Disabled (JTAG-DP + SW-DP) */

#define GPIO_Remap_SWJ_AllDisable   ((uint32_t)0x04000000)

3.         将TAMPER-RTC、OSC32_IN、OSC32_OUT设置为GPIO输出,需要设置如下:

//开启GPIOC时钟、开启备份接口时钟、开启电源接口时钟

RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOC, ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1PERIPH_BKP, ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1PERIPH_PWR, ENABLE);

//关闭入侵检测和外部低速时钟

PWR_BackupAccessCtrl(ENABLE);

BKP_TamperPinCmd(DISABLE);       //关闭入侵检测

RCC_LSEConfig(RCC_LSE_DISABLE);   //关闭外部低速时钟

PWR_BackupAccessCtrl(DISABLE);

//设置PC13、PC14、PC15为推挽输出

GPIO_InitStructure.GPIO_Pins = GPIO_Pins_13 | GPIO_Pins_14 | GPIO_Pins_15;

GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;

GPIO_Init(GPIOC, &GPIO_InitStructure);

注:如果要使用PC14PC15,则时钟初始化时不用使能LSE

类型:MCU 应用

适用型号:全系列(AT32F403, AT32F403A, AT32F413,AT32F415, AT32F407

主功能:GPIO


使用特权

评论回复
沙发
sky8023| | 2021-9-3 15:30 | 只看该作者
AT32F415 PC13 配置成输入模式。 BKP_TamperPinCmd(DISABLE);       //关闭入侵检测
宏定义没有开启。

使用特权

评论回复
板凳
数据采集存储| | 2021-9-8 10:44 | 只看该作者
学会一招,感谢楼主。

使用特权

评论回复
地板
hoop| | 2021-9-9 09:09 | 只看该作者
sky8023 发表于 2021-9-3 15:30
AT32F415 PC13 配置成输入模式。 BKP_TamperPinCmd(DISABLE);       //关闭入侵检测
宏定义没有开启。 ...

在415上,BKP不再是一个独立的IP,其与ERTC做在了一起,所以对应BKP相关的功能函数还请去at32f4xx_ertc.h里面找。

使用特权

评论回复
5
豌豆爹| | 2021-9-18 09:33 | 只看该作者
学会一招,感谢楼主

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

389

主题

1464

帖子

3

粉丝