引出来的引脚再特殊也是GPIO
在PCB设计时,并没有去看手册,而是直接用嘉立创里的封装直接设计电路,导致用上了3个特别阴的引脚 PA15 PA12 PA11,在编程控制PA15的时候,发现无法控制,查文章之后发现这个引脚默认是用于JTDI调试的引脚,需要先失能默认使用的JTDI功能,再重定义到PA15的GPIO功能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);// 使能复用时钟和引脚GPIO时钟
DBGMCU->CR = DBGMCU->CR & ~((uint32_t)1<<5); // 不分配跟踪引脚,释放PB3
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); // 切换到SWJ调试,释放PA15
上面两句就是失能了JTAG,只用SW调试,也够用了
这样PA15再进行开时钟,设置GPIO结构体后就可以正常输入输出了。
接下来是PA12 PA11,我在工程开始的时候无法控制这两个引脚,由于PA15的前车之鉴,我又去查了资料 这两个引脚有人说默认是用于USB外设的,接了几K的上拉电阻,无法作为GPIO使用,从原理图上能看到是用于UD+,UD-
就给我了我误区,让我以为也要先失能USB,DisableUSB外设才能用,我去ST官网下了关于USB外设的库,一顿搞下来发现没用,这时候万用表出场了,一测发现,只是经过正常的GPIO结构体配置后,能够正常输出了,回头才发现是自己应用代码写错了,但是IO是正常输出的,这下明白了默认的那一栏是GPIO就代表了只需要最简单的配置就可以控制,而不是其他的花里胡哨,只有默认不是GPIO的才需要去折腾。
PC13这个引脚也比较特殊,默认是连接LED灯的,我由于没注意看,直接接了一个按键,因为要设置为上拉输入,LED和按键出现了冲突,就是我在按下按键中断后无法进行第二次中断。
灯也会隐隐亮,我在中断里再次配置GPIO发现,按键正常了,可以多次中断了,应该是有LED的存在导致的电路问题不过也算解决了,
还有一个问题STM32的GPIO无法正常控制PNP三极管,但是可以正常控制NPN,之前的这个电路我用的是PNP型三极管,这里出现了一个问题,我把IO拉高以后,最高只能到3.8V,PNP低电平导通,高电平截止,虽然我在STM32的控制里已经拉高了,但是5V-3.8>0.7 仍然是导通状态,我查了之后说外接一个上拉电阻到5V,再配置为开漏输出,可惜,仍然拉不高,我选用了5K-10K内的4种电阻,仍然无法截至PNP
于是我直接替换成了NPN三极管只需要反转三极管的安装方向,不需要更改PCB设计,接上后更改配置,能够正常控制导通,果然 PNP是我最讨厌的东西,如果集电极接3.3V就能正常控制了
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_46015224/article/details/145017182
|