基于STM32CubeIDE的调试配置

发布时间:2023-08-01  

有人使用STM32芯片从事产品开发,代码中有涉及到除以0操作。他们发现基于相同的代码,使用不同IDE会出现不同结果。在IAR或ARM MDK环境下除以0操作所得结果为0,而在STM32CubeIDE环境下的运行时则产生HardFault异常。他们对这个结果感觉很奇怪,甚至怀疑是不是CubeIDE环境有bug。


根据ARM内核相关手册描述,关于除以0事件或非对齐访问事件是否进行捕捉并触发异常是可以配置的。如下图所示:

77fa8d4e-4609-11ed-96c9-dac502259ad0.png

其中,除以0事件由内核的配置控制寄存器CCR的DIV_0_TRP控制。该位清0时,系统不对除以0事件触发异常,结合下面截图描述得知,此时硬性返回0值作为结果。

78270e14-4609-11ed-96c9-dac502259ad0.png

也就是说,只有控制位配置为1并发生除以0事件时才触发异常。另外,上图最后一句明确说明,复位后该位值为0.

结合客户的描述,感觉在ARM MDK和IAR环境下,该位默认值或者说复位值为0,而STM32CubeIDE环境下该位复位默认值则为1。这似乎有点说不通。因为这个默认复位值应该是跟着内核芯片走,不会跟着开发环境走。【用户代码一样】

我随手找个STM32开放板,先基于IAR环境做了个测试。在测试代码里制造了除以0事件,的确没有触发异常,而且还返回了结果0。查看IAR开发环境下了SCB->CCR->DIV_0_TRP控制位,如下图所示,其值为0。结合内核资料描述,这点跟测试结果吻合。

785fe806-4609-11ed-96c9-dac502259ad0.png

我尝试将该控制位改为1后再运行除以0代码,立即触发异常。如下图所示:

78d129f8-4609-11ed-96c9-dac502259ad0.png

当我将测试代码转到CubeIDE去调试,也马上触发异常,并明确提示发生除以0事件。

79974d36-4609-11ed-96c9-dac502259ad0.png

顺便在SFR寄存器里查看SCB->CCR->DIV_0_TRP位的值,果真是1,见下图:

7a49c754-4609-11ed-96c9-dac502259ad0.png

我在用户代码里并未对该控制位进行改写,按理其复位值应该是0。难道哪里改写它了?

我尝试到STM32CubeIDE的用户手册UM2609找找,看看能否找到相关信息。在里面搜索DIV_0还真找到相关信息了。

7e8be52c-4609-11ed-96c9-dac502259ad0.png

这里的文字表明,调试状态下关于除以0事件的异常捕获是默认使能的,目的是为了帮助用户在调试时及时发现除以0异常。这个说法没毛病,问题是在哪里对其使能置位的呢?ARM内核复位后可是清零了的。

继续查找相关信息,看到了该段文字上方有个截图,如下图所示:

7ee56ca0-4609-11ed-96c9-dac502259ad0.png

从上图可以看出,关于除以0操作或非对齐访问是否触发异常,这里可以选择配置。在STM32CubeIDE调试状态下,除以0操作的异常捕获默认被使能,基于该配置并在工程启动时借助调试部件修改了相关寄存器。


当我把这个地方取消勾选后,使用前面相同代码做验证调试,此时不再触发异常并返回0值结果。到此,也就解释了发生除以0操作时,为什么STM32CubeIDE会出现与MDK、IAR不同的调试结果。


显然,STM32CubeIDE默认调试状态下使能除以0事件的捕获,这样的确便于我们在调试时就能及时发现除以0事件,若是不该出现的,赶紧查错纠错,避免其发生。如果是允许出现的特别应用场景,调试时可以通过CubeIDE配置关闭其异常捕获。


相比其它IDE,STM32CubeIDE在这个地方显得更为方便些。我们只需基于调试环境做简单的勾选即完成修改,每次程序启动时即生效,在IAR、ARM MDK环境下往往需要事先添加用户代码修改SCB->CCR寄存器内容。


讲到这里,我要特别提醒下,对于除以0事件或对齐事件的捕获与否,最终取决于用户代码。


STM32CubeIDE只是在调试状态下根据配置修改了相关控制寄存器位,不等于用户代码对其做了修改。


前面提过,除以0事件相关寄存器控制位复位后默认值为0,即默认不触发除以0异常。如果说CubeIDE的调试配置跟其芯片复位后默认值一致倒没什么,如果CubeIDE里的调试配置是使能除以0异常的捕获,而在用户代码里却没有相应实现代码,这时代码运行若有除以0事件,调试时自然可以发现,但全速运行时还是不会触发异常【此时代码运行脱离了调试组件】。所以,要保证全速运行时也能对除以0事件进行异常捕获,我们终究还得在用户代码里对SCB->CCR寄存器的DIV_0_TRP位进行置位。


STM32CubeIDE这里的调试配置为我们提供了方便,同时个人认为其默认的调试配置也是合理的,毕竟并非所有人都知道芯片复位后默认除以0事件不触发异常,当然,一般来讲编译时会有警告。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    初学者是否要弄懂底层函数初学者没必要弄懂底层函数。项目需要用到什么再去研究什么。比如你的项目只要点亮一个LED灯,那你只研究怎么配置GPIO就好了,没必要去研究什么PWM了。现在有个神器叫STM32CubeMX,直接生成一些底层初始化代码......
    一定要要有自己的思想,   完成了我觉得就算入门了。------Llinuxu   六、关于初学者是否要弄懂底层函数   初学者没必要弄懂底层函数。项目需要用到什么再去研究什么。比如你的项目只要点亮一个LED灯,那你只研究怎么配置......
    18xx_high_accuracysrc目录下的.c,.h文件里搜索“68”关键字,并替换为“18”。 4. 在配置初始化校准时,需要设定校准的频率范围。由于IWR6843和IWR1843的工作频率范围不同,所以相关代码需要......
    使用RAM调试断电再上电,程序会从FLASH运行,会认为程序依然在运行,从而影响判断。 Ⅲ、RAM调试配置方法 本节主要讲述配置方法的过程,为什么这么配置,以及配置的原理将会在下一章节讲述。 1.修改......
    系数,配置外部晶振分频系数,从而根据外部晶振的频率配置系统时钟。 有思路之后一切就都很简单了,找到时钟配置的代码块,然后将它修改一下就好了,但是这个神秘的代码块在哪里?经过一番研究,终于知道怎么配置......
    理图可知,VDDIO2已经与VDD相连了。 那软件上还需要添加些什么配置呢?因为要操作VDDIO2域,电源接口时钟要使能。另外,还要对一个跟VDDIO2供电有效的寄存器位【IOSV】进行置位,申明VDDIO2......
    MSP432新手入坑(2022-12-21)
    MSP432新手入坑;前几天刚拿到的launchpad MSP432P401R ,摸索了好几天  踩了一些坑 这个什么配置就不说了 自行百度 我用的是CCS编译器,第一个新建工程的时候,一定要注意那个要注意库函数的配置......
    很不适合他们;我的这个很简单(本帖不适合不熟悉配置STM32串口的玩家),他只是说串口的DMA怎么配置,还有我用的是DMA1_通道4,因为我的是串口1的TX长话短说:直接po代码......
    = ENABLE;//IRQ通道使能NVIC_Init(&NVIC_InitStructure);//根据指定的参数初始化VIC寄存器 左右滑动,查看代码 4)串口使能 就是你需要什么......
    实。更多的时候,情况是:敲代码时需要什么你就去找相应的“部分知识”,然后搞明白,解决当前的问题。就是这样。 2. 学习STM32需要什么基础 理论上,需要数字电路,模拟电路,C语言编程基础,单片......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>