您在使用GD32E103 PA15可能会发现这个管脚怎么配置都不好使,不能当普通的GPIO用。查手册和网上的文章都没有一个清晰的解决方案,只好下次硬件设计时避开这个管脚。
理论上用以下配置语句应该能正确配置当作输入管脚使用:
gpio_init(GPIOA, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_15);
理论上用以下配置语句应该能正确配置当作输出管脚使用:
gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);
可是调试起来咋都不好使。
没有那么高深,点到为止。仔细查阅手册会发现这个管脚的Default 功能是 JTDI 。而PA15 (GPIO) 是 Remap功能:
Default: JTDI
Alternate: SPI2_NSS , I2S2_WS
Remap: TIMER1_CH0, TIMER1_ETI PA15 , SPI0_NSS
所以应该按照以下方式配置输入:
rcu_periph_clock_enable(RCU_AF);
rcu_periph_clock_enable(RCU_GPIOA);
//Disable JTAG for PA15
gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP, ENABLE);
gpio_init(GPIOA, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_15);
应该按照以下方式配置输出:
rcu_periph_clock_enable(RCU_AF);
rcu_periph_clock_enable(RCU_GPIOA);
//Disable JTAG for PA15
gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP, ENABLE);
gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);
网上看到的文章多半推荐以下语句,是不好使的:
gpio_pin_remap_config(GPIO_SWJ_DISABLE_REMAP,ENABLE);
如果GPIO资源紧张,要使用 PA13(JTMS, SWDIO) , PA14(JTCK, SWCLK) 。方法一样,但其初始化和使用需要放到SWD基本可以不用的控制逻辑里。如需观察,需要用撤掉SWD调试器,用逻辑分析仪+串口LOG的方式调试。
GD32 的其他系列以及STM32也存在类似问题。网友可以举一反三。
————————————————
版权声明:本文为CSDN博主「小庐知行」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tideyin123/article/details/150874551
|