STM32 JTAG引脚(JTDO、JNTRST、JTDI)作为普通IO口使用注意
最近开发一个项目的软件,主控MCU用的是STM32F103VCT6。其中使用了PA15作为一个SPI的软件片选控制引脚,即用PA15的GPIO功能控制SPI的CS片选。 软件调试时发现,CS引脚的电平不受控制。开始以为引脚搞错,可是原理图上标识的很清楚。  后来又怀疑是硬件线路不通,可用万用表量了之后,也排除了这个疑点。再后来怀疑芯片坏了,可是换了一块板子,现象仍然存在。总之反复折腾了个把小时,仍未解决问题。 歇了会儿之后,突然想到“PA15要是专用引脚的话,普通GPIO初始化就会不起作用”。对照datatsheet一看,PA15果然是JTAG下载口的JTDI引脚。问题找到了,这里也是给自己和硬件设计人员提个醒,原理图设计时,引脚标注信息尽量完整,特别有些专用引脚,这样可以避免软件开发时,出现不必要的时间浪费。另外一方面,由于很少拿这些专用引脚做GPIO使用,因此自己对这些引脚也不敏感。
网上有很多关于JTAG引脚作为GPIO使用的文章,在这里做个补充说明:初始化时,需要先开启AFIO时钟,再关闭JTAG功能,否则GPIO功能仍然不起作用。我的初始化代码如下:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
|