|
众所周知,在C语言中,当一个数除以0的时候会导致除法运算异常,程序也会因此崩溃。 为了避免程序崩溃,我们需要在代码中包含对0的判断。 但是,在STM32单片机上运行除零运算的C程序代码时,却不会出现程序崩溃的现象。这是怎么回事呢? 今天,我们就来简单聊一聊这个问题。 聊一聊: 按照常规的认知,如果C语言程序代码中出现除以零的操作时,会进入异常处理,而导致程序出现异常。 有小伙伴遇到过这种场景,除零操作后续的代码可以正常执行,其单片机为STM32系列单片机。 我们通过查阅Cortex-M3指南可以看到,除以零操作会导致用法异常(Usage Fault)。
从中可以得知,进入Usage Fault是有前提条件的,即:只有在 DIV_0_TRP 置位时才会发生。 通过 DIV_0_TRP 配置,打开除零异常中断捕获。这个位寄存器在 SCB->CCR 寄存器中。
好了,到此可以解释“为什么STM32单片机默认情况下进行除零操作不会出现程序异常崩溃”了。 另外,除零异常触发UsageFault,但在默认情况下,UsageFault处于被禁用状态。这时,除零异常会进入HardFault异常中断。 如果想使其进入UsageFault,则需要通过SHCSR寄存器bit18进行配置。
好了,今天就这些,感谢阅读! |
STM32F745 USART1 Bootloader启动失败排查与解决的流程分析
吃透:STM32WB 上 Zigbee 睡眠终端设备开发攻略
STM32 无线 MCU HSE 频率与启动时间精确调谐实战指南
深度解读:STM32WB 2.4GHz 低成本 PCB 蛇形天线设计实战指南
经验分享 | STM32WB 双核无线 MCU 开发全流程实战指南
STM32WB 基于 Custom Template 实现 BLE 私有协议 实操开发指南
安全篇:STM32L5/U5—— 高性能 + 高安全超低功耗 MCU
stm32cube_pwm配置
stm32f334驱动1.69寸SPI LED屏
stm32f334c8t6实现一个简单的温度湿度检测器
微信公众号
手机版