stm32F103 使用cubeMx配置timer3 pwm输出后无法调试分析

STM32 电子创客营 6376次浏览 已收录 0个评论 扫描二维码

    有客户提出来这个问题,按照我正常的反应,一般都是客户的代码的问题。cubeMx配置能出现这个问题?我们另一个fae确认过之后我觉得有必要深究一下。看个究竟……我自己按照可以重现的配置在stm32F103c8t6这个芯片上试了一下也没有。但是当在stm32F103ze上面测试之后这个现象就出现了。cubemx配置很简单,就做下图配置:

stm32F103 使用cubeMx配置timer3 pwm输出后无法调试分析

 

时钟选择外部晶振72mhz

stm32F103 使用cubeMx配置timer3 pwm输出后无法调试分析

下面就是timer3的具体配置:stm32F103 使用cubeMx配置timer3 pwm输出后无法调试分析

然后生成代码编译烧录进去单片机。然后再次点烧录,已经烧录不进去了(前提是也没有接reset复位脚,接了的话stlink会强制给单片机复位时能烧录进去的)。

然后就只能从代码分析了。调试以后发现运行在如下图所示这个地方swd自动就断开了:

stm32F103 使用cubeMx配置timer3 pwm输出后无法调试分析

找到这个代码定义的地方,如下代码:

#define __HAL_AFIO_REMAP_TIM3_PARTIAL() MODIFY_REG(AFIO->MAPR, AFIO_MAPR_TIM3_REMAP, AFIO_MAPR_TIM3_REMAP_PARTIALREMAP)

从上面可以看到是修改到了AFIO-MAPR寄存器。打开手册,查找这个寄存器定义的地方:

stm32F103 使用cubeMx配置timer3 pwm输出后无法调试分析

看到了吧。控制swd调试功能的使能和失能正好也在这个寄存器。那就不奇怪了。修改MAPR寄存器的时候应该是修改到了这26:24这三个位。再次找到

MODIFY_REG()

这个函数宏定义的地方:

stm32F103 使用cubeMx配置timer3 pwm输出后无法调试分析

这个MODIFY_REG是先读取寄存器,然后修改,最后再写进去。整个操作是经历这三个步骤。

stm32F103 使用cubeMx配置timer3 pwm输出后无法调试分析

再看下三个位我圈起来的地方是只写,读出来的值是没有定义的。所以这就造成先读再写值可能就变了,是不确定的。这样就可能正好失能了swd功能而出现我们所观察到的配置timer3的复用功能却导致swd功能用不了。

这么看来也是cubeMx的一个bug,希望st尽快给修复一下。


转载请注明转自电子创客营:stm32F103 使用cubeMx配置timer3 pwm输出后无法调试分析! 了解我们点击这里

微信扫一扫关注我们的公众号:eemaker

stm32F103 使用cubeMx配置timer3 pwm输出后无法调试分析


喜欢 (5)or分享 (0)
电子创客营
关于作者:

您必须 登录 才能发表评论!