一、概述
说来惭愧,我到现在都没有完整的学习过STM32。接触 STM32 还是突然的一个项目,需要用到 STM32,紧急需求,只能边学边完成。不过好在 ST 的资料还是比较多的,相对也比较简单,基本上的需求都能找到对应的demo,或者直接使用 STM32CubeMX 生成代码,最后在稍微改改,写一下自己的逻辑,就能完成需求了。
说来比较庆幸,还好第一个项目只需要前后台方式即可完成,否则我应该都放弃了。后来接触到了实时操作系统,由于没有系统的学习,导致我接触的第一个实时系统居然是 RT-Thread,看着复杂的外设代码当场懵逼,好在后面成功的完成了 uart 和 GPIO 的驱动移植,第一次在 STM32 跑上线程很开心,也深入的理解到了系统的底层是怎么实现的。
就在这样舒适的环境下使用了几年的 STM32,导致我忽视了基础上的学习,以为已经掌握了 STM32,直到今天一个现象让我直接懵逼了,在使用其他 GPIO 的时候都是能正常工作的,但是突然到 PB3、PB4、PA15、PA14、PA15 这几个引脚的时候,直接无法作为输出使用,刚开始以为是硬件上的问题,但是后来发现,之前写的另外一个工程可以使用,很明显这是程序上出了问题,可是查了 RT-Thread 整个代码都没发现有异常的地方,以为是升级版本导致的,折腾了一天后,突然发现是引脚复用问题导致的。崩溃
这里讲述我学习 STM32 的过程,希望能帮助哪些快要放弃的小伙伴,STM32 真的不难,现在网上的资料也很多,讲的也很详细。完全不用先将所有的知识点学完在做事,可以像我一样拿着任务去学习,当然在空余的时候还是有必要完整了解一下基础的知识,不然可能会想我一样,解决问题时会多花一些时间,但是这样的印象也比较深刻。
二、SWJ-DP脚分配
在查了数据手册时,才发现这个几个引脚默认被 JTAG 调试时使用,所以直接使用这个几个引脚作为输出引脚是不行的,如图所示
看到这里相信大家都明白了,只是我们平时在使用的时候没有注意这个细节问题,遇到时就比较懵逼,比如在 STM32CubeMX 配置的时候也有,如下如所示
那怎么复用了,这个就比较简单了,直接生成即可看到用法,容我再简单啰嗦一下,在使用这几个引脚时,需要是能复用时钟
__HAL_RCC_AFIO_CLK_ENABLE();
然后在使用自己需要的配置,释放对应的引脚即可,配置模式如下
// Enable the Serial wire JTAG configuration
__HAL_AFIO_REMAP_SWJ_ENABLE()
// Enable the Serial wire JTAG configuration
__HAL_AFIO_REMAP_SWJ_NONJTRST()
// Enable the Serial wire JTAG configuration
__HAL_AFIO_REMAP_SWJ_NOJTAG()
// Disable the Serial wire JTAG configuration
__HAL_AFIO_REMAP_SWJ_DISABLE()
标签:__,SWJ,HAL,引脚,STM32F10X,STM32,使用,JTAG
From: https://www.cnblogs.com/jzcn/p/18044592