历史上的今天
返回首页

历史上的今天

今天是:2025年02月13日(星期四)

正在发生

2019年02月13日 | STM32F0非对齐访问引起的硬件错误及其排除

2019-02-13 来源:eefocus

前段时间在用STM32L0芯片时遇到一个硬件错误,主要是内存的非对齐访问导致的。


注:CM3内核支持非对齐访问,而CM0不支持非对齐访问。


先科普一下,什么是非对齐访问

如上图所示,若要访问的变量是int、float、u32类型的(占4字节),则这些变量在内存中,只能以图中0、4、8为起始地址;


若要访问的变量是u16类型的(占2字节),则这些变量在内存中,只能以0、2、4、6、8、10为起始地址;


如上图所示,像*(u16 * )0x20000001这样读取数据的话,在CM0内核的芯片上就会直接进hardfault。


故事是这样的,我用了两片595来驱动数码管,用SPI方式。我想,反正一片595就是一个8位的移位寄存器,每次发送一个u8类型的数据要发送两次,我干嘛不把两个595当成一个16位的移位寄存器,发一个u16类型的数据就好了。所以我就把SPI初始化成这样:


 hspi1.Instance = SPI1;


 hspi1.Init.Mode = SPI_MODE_MASTER;


 hspi1.Init.Direction = SPI_DIRECTION_1LINE;


 hspi1.Init.DataSize = SPI_DATASIZE_16BIT;


和数码管有关的,我还定义了两个结构体


typedef   struct


{


         u8  buf[4];


         u8  no;


} Display_TypeDef;


 


typedef   struct


{


         u8   buf[2];


         u8   no;


} SPI_LED_TX_TypeDef;


Display_TypeDef               Display_structure;


SPI_LED_TX_TypeDef       SPILED_TxStructure;


然后定时器中断中,每隔一段时间往595发送数据,代码如下


void TIM1_CC_IRQHandler(void)


{


         u16capture = 0;


         HAL_TIM_IRQHandler(&htim1);


         capture= TIM_GetCapture1(TIM1);


         TIM_SetCompare1(TIM1,capture + 10);


         HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET);


         if(Display_structure.no< 4)


         {


                   SPILED_TxStructure.buf[1]=   0x0a;


         }


         SPILED_TxStructure.buf[0]=   0x0b;                 


         HAL_SPI_Transmit_IT(&hspi1,SPILED_TxStructure.buf,1);  


}


除了初始化的代码,就上面这一小段代码,然而一运行,就直接跳到hardfault里面。


这个现象当时让我大为不解。在纠结了两个下午之后,终于知道了问题所在(原谅我第一次遇到hardfault)。


当出现hardfault这类异常时,在调试状态下,点开view中call stack window,如下图:

在HardFault_Handler处右击鼠标,见下图


选择Show Caller,会出现下图,即hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr)这句引起了Hardfault。

知道是哪里引起的就好办了,经过分析,发现*((uint16_t *)hspi->pTxBuffPtr)这里面的hspi->pTxBuffPtr就是指向0x20000005,引发了hardfault。让我们来看一下内存分布:


最后怎么搞定的呢。发现Display_TypeDef这个结构体占了5个字节,SPI_LED_TX_TypeDef这个结构体占了3个字节,把他们定义成如下就OK了:


typedef   struct


{


         u8  buf[4];


         u16  no;


} Display_TypeDef;


 


typedef struct


{


         u8  buf[2];


         u16  no;


} SPI_LED_TX_TypeDef;


恩,就写到这里把。坚持把工作遇到的一些问题记录下来。


推荐阅读

史海拾趣

Erocore Enterprise Co Ltd公司的发展小趣事

随着全球化趋势的加速,Erocore开始实施国际化战略。公司积极拓展海外市场,通过建立海外生产基地、设立销售办事处等方式,实现产品的全球布局。同时,Erocore也加强了与国际知名企业的合作与交流,引进先进的技术和管理经验,提升公司的整体竞争力。

Gumstix公司的发展小趣事
检查电路连接是否松动或断裂,重新连接或更换损坏的部件。
法思特(FAST)公司的发展小趣事
顺序延时启动可以避免部分热水器因过度加热而浪费能源,从而提高整体能源利用效率。
Elpida Memory公司的发展小趣事

尽管有政府的支持,但Elpida Memory的经营状况并未得到根本性的改善。在经历了多年的亏损和重组后,Elpida Memory最终于2012年被美国的美光科技(Micron Technology)收购。这一收购标志着Elpida Memory正式退出了日本半导体产业的舞台,但也为其未来的发展提供了新的机遇。

维峰电子(WCON)公司的发展小趣事

随着科技的不断进步和市场需求的变化,维峰电子始终将技术创新作为公司发展的核心驱动力。公司投入大量资金和人力,在研发方面取得了显著成果。近年来,公司成功申请并获得了多项国家专利,包括外观设计专利、发明专利和实用新型专利等。这些专利的获得不仅提升了公司的技术竞争力,也为客户提供了更加优质的产品和服务。

C-MEDIA公司的发展小趣事

在2000年代初,C-MEDIA以其在音频处理领域的专业技术而知名。然而,随着市场竞争的加剧和技术的快速发展,公司意识到需要调整战略以适应市场变化。于是,C-MEDIA在与瑞昱(Realtek)达成收购协议后,决定将AC97、HD Audio板载音频芯片技术转让给Realtek,并退出板载声卡领域。这一决策使得C-MEDIA能够专注于中高端音频处理芯片的研发,进一步巩固了其在独立声卡市场的地位。

问答坊 | AI 解惑

历年电子大赛原件清单

本帖最后由 paulhyde 于 2014-9-15 09:12 编辑 历年电子大赛原件清单  …

查看全部问答>

请教一下I/F是什么意思啊

请教一下I/F是什么意思啊 例如DRAM I/F,PCI I/F,都是些什么意思呢?…

查看全部问答>

请教香主,RTC电池供电时间不准

EK-STM32F开发板,JP7跳至VBAT端,电池供电。USB供电时RTC准确的,拔掉USB后板上电池供电工作,24小时之后插上USB,时间慢了大约8小时10分钟,拔掉USB后测电池电压,为3.2V,电量应该可以的,请问这是什么原因?…

查看全部问答>

无源干扰设备二线检测维修的测试诊断系统

 基于PXI总线和LabVIEW技术,构建了无源干扰设备测试诊断系统,可完成无源干扰设备各种功能、性能参数快速、准确地测试,并依据测试结果,进行故障诊断,给出维修策略。硬件平台基于高性价比的PXI,测试程序采用LabVIEW开发,故障诊断程序采用 ...…

查看全部问答>

80C51单片机片内RAM低128个存储单元划分为哪4个主要部分?各部分主要功能是什么?

80C51单片机片内RAM低128个存储单元划分为哪4个主要部分?各部分主要功能是什么?…

查看全部问答>

34063 5v升12v

就是这样的电路图,Proteus中可以到12v,为什么实际中只有4.3v?洞洞板上做了两遍了,都是4.3,参数也是那个网页版计算器得来的,小弟不才,请高手指点一二!…

查看全部问答>

while(!TI);TI=0;是什么意思啊

while(!TI);TI=0;是什么意思啊…

查看全部问答>

DSP28335+AIC23能收发数据,但数据貌似不对,听起来全是噪声,请教是否硬件问题

我现在使用的硬件是研旭的开发板,软件是TI给的Interfacing the TMS320F2833x to the AIC23B Stereo Audio Codec.zip,改一下控制接口和数据接口。 通过控制接口改变采样率,经过示波器测试,控制接口正常;MCBSP的接收和发送中断都能进去,数据接 ...…

查看全部问答>

[转] 大牛给你介绍《信号与系统》

第一课 什么是卷积 卷积有什么用 什么是傅利叶变换 什么是拉普拉斯变换 引子很多朋友和我一样,工科电子类专业,学了一堆信号方面的课,什么都没学懂,背了公式考了试,然后毕业了。    先说\"卷积有什么用\"这个问题。(有人抢答,\"卷 ...…

查看全部问答>