你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32单片机进行除零运算,为何程序不崩溃?

[复制链接]
flyingstar 发布时间:2025-12-19 16:22
众所周知,在C语言中,当一个数除以0的时候会导致除法运算异常,程序也会因此崩溃。
为了避免程序崩溃,我们需要在代码中包含对0的判断。
但是,在STM32单片机上运行除零运算的C程序代码时,却不会出现程序崩溃的现象。这是怎么回事呢?
今天,我们就来简单聊一聊这个问题。
聊一聊:
按照常规的认知,如果C语言程序代码中出现除以零的操作时,会进入异常处理,而导致程序出现异常。
有小伙伴遇到过这种场景,除零操作后续的代码可以正常执行,其单片机为STM32系列单片机。
我们通过查阅Cortex-M3指南可以看到,除以零操作会导致用法异常(Usage Fault)。
微信图片_2025-12-19_162027_888.png
从中可以得知,进入Usage Fault是有前提条件的,即:只有在 DIV_0_TRP 置位时才会发生。
通过 DIV_0_TRP 配置,打开除零异常中断捕获。这个位寄存器在 SCB->CCR 寄存器中。
微信图片_2025-12-19_162031_239.png
默认状态下,DIV_0_TRP 为 0,除零操作不会产生异常,并且得到的结果总是为0;当 DIV_0_TRP 配置为1时,将会触发除零异常中断。 微信图片_2025-12-19_162034_227.png
好了,到此可以解释“为什么STM32单片机默认情况下进行除零操作不会出现程序异常崩溃”了。
另外,除零异常触发UsageFault,但在默认情况下,UsageFault处于被禁用状态。这时,除零异常会进入HardFault异常中断。
如果想使其进入UsageFault,则需要通过SHCSR寄存器bit18进行配置。
微信图片_2025-12-19_162037_024.png
好了,今天就这些,感谢阅读!
收藏 评论0 发布时间:2025-12-19 16:22

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版