iis搭建网站怎么做前端,网站如何做问卷调查报告,wordpress模板定制,wordpress 电子商务关于GD32引脚PA13、PA15、PB3、PB4配置为普通引脚的问题
在实际开发中#xff0c;经常会遇到引脚资源受限需要将一些具有特定功能的引脚配置为普通引脚或其他引脚功能使用的情况。
博主之前遇到过类似的情况#xff0c;都正常解决了。但偶尔也会出现在配置引脚时少了一些配…关于GD32引脚PA13、PA15、PB3、PB4配置为普通引脚的问题
在实际开发中经常会遇到引脚资源受限需要将一些具有特定功能的引脚配置为普通引脚或其他引脚功能使用的情况。
博主之前遇到过类似的情况都正常解决了。但偶尔也会出现在配置引脚时少了一些配置结果导致代码运行时偶尔出现问题最终排查出了是引脚配置问题因此特地记录下来供有需求的同学参考。
以GD32F307为例在使用外置sram芯片时使用了PB3、PB4作为SPI通讯的SCK和MISO引脚。 在代码编写和调试时忽视了PB3和PB4的默认功能是JTDO和NJTRST功能直接将PB3、PB4当做普通SPI引脚使用由于我调试时一致使用JLINK连接芯片进行在线调试在这个时候sram芯片的驱动一直正常读写数据也正常也导致我再一开始没有发现这个问题。
后来交给测试人员测试功能时反馈有时候出现数据丢失的情况。博主排查后发现是sram读写数据失败导致用示波器排查波形发现在在读写sram时SCK没有时钟信号发出。博主很奇怪为何之前调试时没有出现过这种情况于是乎连接上JILNK在线调试用示波器一看果然此时sram读写数据都是SCK线上是有正常时钟发出的。。。
在这种情况下排查了数据手册datasheet上SPI相关的引脚结果发现了问题的根本所在PB3引脚默认功能为JTDOPB4引脚默认功能是NJTRST他们是JTAG调试方式时用的博主使用的是SWD的方式且这两个引脚要配置为SPI功能需要做重定向处理即将关闭这两个引脚JTAG相关功能这样配置之后测试发现一切正常了。
#define GPIO_SWJ_NONJTRST_REMAP ((uint32_t)0x00300000U | (PCF0_SWJ_CFG(1) 16)) /*! full SWJ(JTAG-DP SW-DP),but without NJTRST */
#define GPIO_SWJ_SWDPENABLE_REMAP ((uint32_t)0x00300000U | (PCF0_SWJ_CFG(2) 16)) /*! JTAG-DP disabled and SW-DP enabled */
#define GPIO_SWJ_DISABLE_REMAP ((uint32_t)0x00300000U | (PCF0_SWJ_CFG(4) 16)) /*! JTAG-DP disabled and SW-DP disabled */
#define GPIO_SPI2_REMAP ((uint32_t)0x00200000U | (AFIO_PCF0_SPI2_REMAP 16)) /*! SPI2 remapping*/代码如下
/*** brief sram spi配置* param None* retval None*/
void sram_spi_init(void)
{spi_parameter_struct spi_init_struct;rcu_periph_clock_enable(RCU_GPIOB);rcu_periph_clock_enable(RCU_GPIOE);rcu_periph_clock_enable(RCU_SPI2);/* SPI2_SCK PB3* SPI2_MISOPB4* SPI2_MOSIPB5* SPI2_CS PE1* HOLD PE0*/gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP, ENABLE);/*PB3、PB4默认为JTAG引脚使用SPI需失能JTAG功能否则会导致SPI引脚功能异常如不DEBUG时SCK不产生时钟*/gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3 | GPIO_PIN_5);//MISO引脚可配置为推挽输出、浮空输入、上拉输入皆可gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_4);gpio_init(GPIOE, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);//此处硬件改线占用了板子DI引脚后续硬件版本会有改动gpio_init(GPIOE, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0);/*HOLD引脚设置为1禁用该功能*/spi_init_struct.trans_mode SPI_TRANSMODE_FULLDUPLEX;spi_init_struct.device_mode SPI_MASTER;spi_init_struct.frame_size SPI_FRAMESIZE_8BIT;spi_init_struct.clock_polarity_phase SPI_CK_PL_LOW_PH_1EDGE;//重要重要重要该SRAM芯片需要配置为时钟空闲时为低电平在第一个跳变沿采样spi_init_struct.nss SPI_NSS_SOFT;//默认为软件NSSspi_init_struct.prescale SPI_PSC_8;//注意SPI芯片支持的最高速率spi_init_struct.endian SPI_ENDIAN_MSB;spi_init(SPI2, spi_init_struct);SPI_SRAM_CS_HIGH();//初始拉高CSSPI_SRAM_HOLD_HIGH();//HOLD默认为高,禁用该功能,否则可能导致读写失败spi_enable(SPI2);
}因此在使用到引脚PA13、PA15、PB3、PB4等比较特殊的引脚时一定仔细查看下手册上的定义再进行配置。