[导读]有人使用STM32G4系列芯片开发产品。他发现程序中如果遇到除以0的操作时,会跑进出错异常中断而影响程序运行。他想知道能否通过设置,即使发生除以0操作也不让程序跑进异常中断,并期望此时的除法运行结果【也就是商】直接等于当前变量类型所支持的最大值,比如,若被除数为16位变量,则经过...
有人使用STM32G4系列芯片开发产品。他发现程序中如果遇到除以0的操作时,会跑进出错异常中断而影响程序运行。他想知道能否通过设置,即使发生除以0操作也不让程序跑进异常中断,并期望此时的除法运行结果【也就是商】直接等于当前变量类型所支持的最大值,比如,若被除数为16位变量,则经过该除以零操作后直接为其赋值为0xffff。【实际应用中客户的需求往往也是五彩斑斓的。^_^】
事实上是否可以如该STM32用户所愿呢?我们不妨一起看看。
首先,这个问题不属于STM32外设相关的,而是内核相关的。客户选用的是Cortex M4的内核STM32芯片,那我们就从M4内核手册中寻找相关内容。
我们通过查看ARM M4的内核手册,可以看到除以0操作会导致用法异常[UsageFault],同时它又说了,该操作和非对齐访问操作是否触发异常是可以配置的。详见下方绿色方框内文字。
那么对该用法异常的监测控制是通过哪个寄存器进行配置的呢?经浏览手册得知它是通过配置控制寄存器[SCB->CCR]进行配置的。
根据上面描述可知,当CCR寄存器的DIV_0_TRP位被配置0时,即使发生除以0操作也不会触发异常,只有当该位被置1前提下,当发生除以0操作时才触发异常事件并产生相应中断。
下面我们具体验证下。我找了块M4内核的STM32芯片的开发板。我们先使用ARM MDK来验证。
测试代码很简单,就是下面截图中的几行,简单的闪灯操作,里面夹了一句除法操作。SCB->CCR被赋值0x00000210即置位了DIV_0_TRP,当被赋值0x00000200时对其进行清零。
经过测试,当我们置位上面CCR寄存器的DIV_0_TRP位,在发生除以0操作时就会进入HardFault中断,同时被除数的结果【Result】即商变为0.
而当我们对DIV_0_TRP位清零,即SCB->CCR被赋值0x00000200时发生除以0操作不会触发Hardfault中断,但被除数除以0后其结果依然保持为0。整个程序运行起来感觉不到任何阻滞。
上面是基于ARM MDK环境测试的,我们换为IAR IDE测试看看。
我们依然先验证CCR寄存器的DIV_0_TRP位被置1的情况。经测试,结果跟ARM MDK环境下的测试结果完全一致。
当我们对CCR寄存器的DIV_0_TRP位清零时,测试结果也跟ARM MDK环境下的一致。
显然,结合Cortex M4内核手册的描述和实际验证,当发生除以0操作时是否触发异常事件是可以配置的,至于发生除以0操作后的商,它始终是0,这个结果其实在上面截图有明确提及,这里再单独截图出来。
不过,这个结果跟开篇客户所期望的不一致,这是由硬件决定的,不同的硬件在这个地方处理不尽相同。其实,其它Cortex M内核芯片这个地方约定是一样的。
聊到这里,或许有人发现了一个问题。从手册上看,这个除以0操作触发的应该是用法异常【UsageFault】,而我们在实际测试时进入的中断却是HardFault异常,这两个异常并不一样啊?
这是怎么回事呢?在此抛砖引玉吧,有兴趣的话不妨查找相关资料继续寻找相关答案。
【注:上面部分截图来自于Cortex™-M4的各种手册,有需要可以到arm网站自行搜索下载】
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
串口作为单片机开发的一个常用的外设,应用范围非常广。大部分时候,串口需要接收处理的数据长度是不定的。那么怎么才能判断一帧数据是否结束呢,今天就以STM32单片机为例,介绍几种接收不定长数据的方法。
关键字:
单片机
串口
STM32
脉冲宽度调制(PWM) 是一种数字信号,最常用于控制电路。该信号在预定义的时间和速度中设置为高(5v或3.3v)和低(0v)。通常,我们将PWM的高电平称为1,低电平为0。
关键字:
STM32
PWM
控制
摘要:随着计算机技术与电子科技的快速发展,人工智能、云计算等技术的不断进步,智能家居新型产业模式也得到了巨大的发展,至今国内智能家居市场投资达到了2396亿元,市场规模占比不断增大,未来十年内家居智能化将实现大规模应用。...
关键字:
STM32
嵌入式
人工智能
GD32作为国产MCU里的佼佼者,产品线也比较丰富,是替代STM32的一个很好的选择。前段时间有个项目用到GD32的单片机,今天来说说使用的一些体会。
关键字:
国产MCU
STM32
单片机
STM32 用户界面设计环境新增屏幕旋转和纹理映射功能,支持性能强大的Neochrom图形加速器
关键字:
意法半导体
STM32
MCU
意法半导体(ST)发布了STM32Cube.AIversion7.2.0,这是微控制器厂商推出的首款支持超高效深度量化神经网络的人工智能(AI)开发工具。
关键字:
意法半导体
STM32
2022年是意法半导体STM32家族问世15周年。在全球疫情阻止人们面对面沟通交流的当下,7月18-22日,意法半导体举办首届暨2022年STM32中国线上技术周,庆祝与生态合作伙伴共同创新的十五载。 在这个为期五天的线...
关键字:
意法半导体
STM32
摘要:根据四旋翼飞行器工作原理,以STM32控制器为基础,对四旋翼飞行器飞行控制系统的软硬件设计进行了分析,可有效调整四旋翼飞行器飞行姿态与飞行位置,实现了控制模块与地面站的有效联系。
关键字:
STM32
控制系统
软件设计
摘要:研究一类基于STM32的数据采集系统,采集并储存有轨电车车载超级电容的电压/电流数值。首先介绍该数据采集系统中硬件部分的各个功能区域,随后设计了数据采集系统的软件部分,编写了ADC采集的程序并通过GPRS4G无线通...
关键字:
STM32
数据采集系统
寿命预测
作为单片机领域芯片的领军代表,STM32的应用可以说是无处不在,从生活快消到工业产品,再到各种炫酷的前沿应用,我们几乎都可以看到它的身影。与此同时,为了迎接万物互联时代的到来,STM32的产品能力也在不断升维。
关键字:
STM32
单片机领域
意法半导体
当前,单片机芯片,正广泛用于消费电子、计算机与网络、物联网、智能家居等领域,尤其是消费电子领域,单片机芯片无处不在。而作为一家专注电子产品领域的MCU方案开发服务商,深圳宇凡微凭借实力,成为众多生产厂商的选择。
关键字:
单片机
STM32
MCU
猛男如何学嵌入式,关注@我要学嵌入式,嵌入式男人的加油站。01 前言大家好,我是张巧龙。今天转载的这篇文章来自一个本科生,在嵌入式学习上有自己独到的心得体会。以下是正文:发这篇文章主要是针对大学刚接触嵌入式的同学。很多新...
关键字:
嵌入式
硬件
STM32
BSP
1、AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备。2、Stm32f10x.h相当于reg52.h(里面有基本的位操作定义),另一个为stm32f10x_conf....
关键字:
STM32
电平
FSMC
GB
单片机用处这么广,尤其是STM32生态这么火!如何快速上手学习呢?你要考虑的是,要用STM32实现什么?为什么使用STM32而不是用8051?是因为51的频率太低,无法满足计算需求?是51的管脚太少,无法满足众多外设的I...
关键字:
STM32
[导读]大家好,我是逸珺。之前用STM32的SPI需要控制很多外部芯片,可是一个SPI的外设只有一个片选,要实现独立片选一主多从,怎么实现呢?SPI总线拓扑一般地,SPI总线按照下图方式进行连接,一主多从。如上图:每个从...
关键字:
STM32
摘 要 :参与道路交通的行人会受车辆和其他快速移动物体的威胁,且行人规避车辆撞击伤害的方式几乎都是
被动的。从行人的角度出发,提出了一种智能穿戴设备设计,使行人可以对运动车辆或物体的撞击做出早期预警,
主动规避撞击伤...
关键字:
主动安全预警
智能穿戴设备
毫米波雷达
蓝牙通信
STM32
APP
关注、星标公众号,直达精彩内容文章来源:FreeRTOS1、AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备。2、Stm32f10x.h相当于reg52.h(里面有基...
关键字:
STM32
摘 要 :智能车载儿童守护系统以 STM32 单片机为核心,由温度传感器、CO2 传感器、压力传感器、红外传感器、蜂鸣器、液晶显示、GSM、手机报警 APP 等模块组成。该系统能够实时监测车内环境,进行人体探测,当车内空...
关键字:
STM32
车内环境监测
GSM
传感器
人体探测
APP 报警