OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 35|回复: 0

如何将默认非GPIO的Pin设置为GPIO

[复制链接]

15

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2024-12-9
在线时间
4 小时
发表于 昨天 09:50 | 显示全部楼层 |阅读模式
Questions如何将以下默认非GPIO的Pin设置为GPIO
  
默认非GPIO的Pin(主功能)
  
GPIO
HEXT_IN
PD0
HEXT_OUT
PD1
JTMS-SWDIO
PA13
JTCK-SWCLK
PA14
JTDI
PA15
JTDO
PB3
NJTRST
PB4
TAMPER-RTC
PC13
LEXT_IN
PC14
LEXT_OUT
PC15
Answer
将以上IO设置为GPIO,需要开启对应GPIO时钟、开启复用时钟、将IO配置为输入/输出/复用功能、设置重映射、关闭入侵检测、关闭外部时钟等相应的操作。
1.      将HEXT_IN、HEXT_OUT设置为GPIO
此处以AT32F403A为例
  
gpio_init_type gpio_init_struct;
  
  
/* enable the clock of gpiod, iomux */
  
crm_periph_clock_enable(CRM_IOMUX_PERIPH_CLOCK, TRUE);
  
crm_periph_clock_enable(CRM_GPIOD_PERIPH_CLOCK, TRUE);
  
  
crm_clock_source_enable(CRM_CLOCK_SOURCE_HEXT, FALSE);
  
crm_hext_bypass(FALSE);
  
  
/* set default parameter */
  
gpio_default_para_init(&gpio_init_struct);
  
  
/* configure pd0 (hext_in) and pd1 (hext_out) as output push-pull */
  
gpio_init_struct.gpio_pins = GPIO_PINS_0 | GPIO_PINS_1;
  
gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
  
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
  
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  
gpio_init(GPIOD, &gpio_init_struct);
  
  
gpio_pin_remap_config(PD01_GMUX, TRUE);
  
注:如果要使用PD0PD1,则时钟初始化时不用使能HSEPLL时钟源不能选择为HEXT
2.      将SWJ设置为GPIO
此处以AT32F403A为例
  
gpio_init_type gpio_init_struct;
  
  
/* enable the clock of gpioa, gpiob, iomux */
  
crm_periph_clock_enable(CRM_IOMUX_PERIPH_CLOCK, TRUE);
  
crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
  
crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
  
  
/* set default parameter */
  
gpio_default_para_init(&gpio_init_struct);
  
  
/* configure pa13 (jtms/swdat), pa14 (jtck/swclk) and pa15 (jtdi) as  output push-pull */
  
gpio_init_struct.gpio_pins = GPIO_PINS_13 | GPIO_PINS_14 |  GPIO_PINS_15;
  
gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
  
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
  
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  
gpio_init(GPIOA, &gpio_init_struct);
  
  
/* configure pb3 (jtdo) and pb4 (jtrst) as output push-pull */
  
gpio_init_struct.gpio_pins = GPIO_PINS_3 | GPIO_PINS_4;
  
gpio_init(GPIOB, &gpio_init_struct);
  
  
/* disable the serial wire jtag debug port swj-dp */
  
gpio_pin_remap_config(SWJTAG_MUX_100, TRUE);
  
关于SWJ重映射说明:
  
/* full swj enabled (jtag-dp + sw-dp) but without jtrst */
  
#define SWJTAG_MUX_001                   SWJTAG_GMUX_001
  
/* jtag-dp disabled and sw-dp enabled */
  
#define SWJTAG_MUX_010                   SWJTAG_GMUX_010
  
/* full swj disabled (jtag-dp + sw-dp) */
  
#define SWJTAG_MUX_100                   SWJTAG_GMUX_100
  
3.      将TAMPER-RTC、LEXT_IN、LEXT_OUT设置为GPIO
此处以AT32F403A为例
  
gpio_init_type gpio_init_struct;
  
  
/* enable the clock of gpioc, bpr, pwc */
  
crm_periph_clock_enable(CRM_GPIOC_PERIPH_CLOCK, TRUE);
  
crm_periph_clock_enable(CRM_BPR_PERIPH_CLOCK, TRUE);
  
crm_periph_clock_enable(CRM_PWC_PERIPH_CLOCK,  TRUE);
  
  
pwc_battery_powered_domain_access(TRUE);
  
bpr_tamper_pin_enable(FALSE);
  
crm_lext_bypass(FALSE);
  
crm_clock_source_enable(CRM_CLOCK_SOURCE_LEXT,  FALSE);
  
pwc_battery_powered_domain_access(FALSE);
  
  
/*  configure pc13 (tamper-rtc), pc14 (lext_in) and pc15 (lext_out) as output push-pull */
  
gpio_init_struct.gpio_pins  = GPIO_PINS_13 | GPIO_PINS_14 | GPIO_PINS_15;
  
gpio_init_struct.gpio_mode  = GPIO_MODE_OUTPUT;
  
gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
  
gpio_init_struct.gpio_drive_strength  = GPIO_DRIVE_STRENGTH_STRONGER;
  
gpio_init(GPIOC, &gpio_init_struct);
  
1:如果要使用PC14PC15,则时钟初始化时不用使能LEXT
2:根据Datasheet描述,PC13 PC14PC15引脚通过电源开关进行供电,而这个电源开关只能够推动有限的电流(3 mA ,因此这三个引脚作为输出引脚时不能作为电流源(如驱动LED
适用型号:AT32F403,AT32F413, AT32F415, AT32F403A, AT32F407, AT32A403A

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-10-10 22:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表