
STM32F429 二级启动程序 (sboot) 开发难点:LD 文件 / 堆栈 / NVIC 及 startup.s 修改疑问
stm32G071RBT6跑TOUCHGFX的时候使用仪表控件,更新数值的时候会卡死,怎么解决
touchgfx添加文字不能显示,直接死(HardFault_Handler)
STM32CubeIDE 2.0 有啥新变化?
CubeIDE生成MP257的M33工程出现RCC配置问题(Bug?)
2.0 CubeIDE大概更新时间?
STM32CUBEIDE BUG
STM32CubeIDE 2.0开发下载了吗
新版STM32CubeIDE会不会提供Deepseek
STM32CubeIDE支持第三方插件了吗
该芯片默认除0不报错,结果为0。可以使能内核的相关位,如果除0,将进入hardfault。
SCB->CCR |= SCB_CCR_DIV_0_TRP_Msk;
没有设置的,这是内核决定的,要想不进错误中断,就在除法前判断一下是否为0。
jieguo = (chushu !=0) ? num/chushu : -1 ;
[md]你好,我看了G4芯片的编程手册,发现SCB的CCR寄存器复位后的默认值应该是0x200,但我用demo板跑的时候(用ST官方例程),在Reset_Handler处打了断点,发现复位后的CCR寄存器却是0x210(即默认是会进硬件中断的),请问这个是怎么回事呢?
[md]我板子默认是关闭的,用关键字找找哪里有被设置了,如果过了reset-handler,还是打开的吗?
刚刚搜了SCB->CCR,确实没有地方置位了bit4,Reset_Handler处已经是1,后续也一直是1,没有地方配置过,神奇。。。
我用的是G474RE的NUCLEO板,例程是ADC_GainCompensation
[md]程序第一句就把它bit4清零,有没有效果
可以清零,除以零不会进中断
关于除0操作是否会触发异常,这个可以配置的。这里涉及到SCR->CCR寄存器的除0控制位,DIV_0_TRP。
当该控制位配置为0时,即使发生除0操作也不触发异常,但是此时的商固定为0,不会是别的值,这些在内核手册里有明示:
When this bit is set to 0, a divide by zero returns a quotient of 0.
我们在代码里可以通过配置该寄存器进行配置,比如SCB->CCR = 0x00000200和CB->CCR = 0x00000210来关闭或开启除0事件的异常捕捉。
当该控制位配置为0时,即使发生除0操作也不触发异常,但是此时的商固定为0,不会是别的值,这些在内核手册里有明示:
When this bit is set to 0, a divide by zero returns a quotient of 0.
我们在代码里可以通过配置该寄存器进行配置,比如SCB->CCR = 0x00000200和CB->CCR = 0x00000210来关闭或开启除0事件的异常捕捉。
除数除之前判断一下就可以了,否则商也没什么意义。不能依赖于处理器本身的设定,不同处理器的处理也不同,程序移植也会留下隐患。数学上除以0等于什么