历史上的今天
返回首页

历史上的今天

今天是:2025年04月23日(星期三)

正在发生

2018年04月23日 | STM32硬件调试过程遇中到Delay_ms()函数卡死的问题

2018-04-23 来源:eefocus

程序在LCD初始化过程中卡死,通过硬件调试发现卡在Delay_ms()函数,转到定义发现其为Delay_us的宏定义函数:


#define Delay_ms(x) Delay_us(1000*x)//单位ms  

即延迟x单位ms,转到Delay_us()函数定义:


void Delay_us(__IO u32 nTime)  

{   

    TimingDelay = nTime;      

    while(TimingDelay != 0);  

}  

可以发现若参数TimingDelay不为零则此处为while死循环,通过研究发现TimingDelay参数需要在系统滴答定时器中断中递减,即:


/**@filename stm32f10x_it.c  

  * @brief  This function handles SysTick Handler. 

  * @param  None 

  * @retval None 

  */  

void SysTick_Handler(void)  

{  

    TimingDelay_Decrement();  

}  

函数TimingDelay_Decrement()定义如下:


/*------------------------------------------------------------------------------- 

程序名称:TimingDelay_Decrement 

程序描述:数字递减直到0   

输入参数:无 

返回参数:无 

备    注:需要在中断函数SysTick_Handler()中调用 

---------------------------------------------------------------------------------*/  

void TimingDelay_Decrement(void)  

{  

    if (TimingDelay != 0x00)  

    {   

    TimingDelay--;  

    }  

}  

程序卡死的原因就是中断函数SysTick_Handler(void)中没有对TimingDelay进行递减(没有调用函数TimingDelay_Decrement())从而跳不出死循环。

另外值得注意的是SysTick使用前必须初始化,以使能中断:


void SysTick_Init(void)  

{  

     // SystemFrequency / 1000       1ms中断一次  

     // SystemFrequency / 100000     10us中断一次  

     // SystemFrequency / 1000000    1us中断一次  

  

    if (SysTick_Config(SystemCoreClock / 1000000))    // 1us ST3.5.0库版本  

    {   

        /* Capture error */   

        while (1);  

    }  

}  

若不使能中断会导致无法进入定时器中断函数,也会卡死在while循环中。


推荐阅读

史海拾趣

E-San Electronic Co Ltd公司的发展小趣事

随着全球环保意识的提高和可持续发展的呼声日益高涨,E-San Electronic Co Ltd积极响应这一趋势,将环保和可持续发展理念融入企业的日常运营中。公司采用环保材料和节能技术生产电子产品,减少了对环境的污染和资源的浪费。同时,公司还积极参与各种环保公益活动和社会责任项目,为社会做出了积极的贡献。这些举措不仅提升了企业的社会形象和声誉,也为企业赢得了更多消费者的信任和支持。

Deutsch公司的发展小趣事

Deutsch公司自创立之初,就注重技术创新和产品研发。在早期阶段,公司成功开发出一款具有突破性的电子元件,这款元件以其高性能和低成本迅速在市场上获得了认可。随着技术的不断进步,Deutsch公司不断推出创新产品,满足日益增长的市场需求。这些技术突破和产品创新不仅提升了公司的竞争力,也推动了整个电子行业的发展。

Broadcom(博通)公司的发展小趣事

1991年,加州大学洛杉矶分校的工程学教授亨利·山缪利和他的博士班学生亨利·尼古拉斯,以各出资5000美元的方式,在美国加州尔湾小镇共同创立了博通公司。初创时期,博通主要致力于开发机顶盒的宽带通信芯片。随着技术的不断进步和市场需求的增长,博通的产品逐渐受到业界的认可,销售额稳步上升。

Gigavac LLC公司的发展小趣事

进入21世纪,随着网络泡沫的破灭,博通陷入了严重的财务困境。亏损累计高达65亿美元,股价大幅下跌,公司甚至不得不裁员以维持运营。然而,正是在这样的困境中,博通展现出了坚韧不拔的精神。通过优化产品结构、调整市场策略,博通逐渐走出了低谷,并在2003年推出了全球第一个802.11b单片机,重新赢得了市场的关注。

C&K公司的发展小趣事

为了进一步加强在全球市场的地位,C&K在2011年进行了一次重要的收购。这次收购不仅扩大了公司的业务范围,还提升了其设计和制造能力。通过这次收购,C&K得以在全球范围内提供更广泛的产品和服务,进一步巩固了其在电子行业中的领先地位。

Accetek公司的发展小趣事

Accetek公司创立之初,面临着激烈的市场竞争和技术挑战。然而,创始人凭借对电子行业的深刻理解和前瞻性的眼光,选择了数控雕刻机和激光雕刻机作为公司的主营业务。通过不断的技术研发和市场调研,Accetek成功推出了一系列高质量、高性能的产品,逐渐在市场中站稳脚跟。

问答坊 | AI 解惑

半导体材料瓶颈

本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 半导体支撑材料瓶颈有待突破 2006-7-6    国际半导体设备暨材料协会(SEMI)今年初预测认为,2006年总体材料市场增长7.2%,将从2005年的179.53亿美元增长至192.4亿美元。在300毫米晶圆技 ...…

查看全部问答>

请各位高手指教,下面的电路能不能成立,不能成立的原因是什么?

电路是我自己画的,个人分析如下,有不对的地方希望大家指正:谢谢~ 1》通电,12V经R1到Q1的C极,经R2加至Q1的B极,Q1饱和导通,C极等于0 此时Q2,Q3,Q4的B极全部为0 Q2为PNP管,此时是导通状态,但对电路没影响 2》按S1, ...…

查看全部问答>

基于DSP的孤立词语音识别系统的设计

基于DSP的孤立词语音识别系统的设计…

查看全部问答>

单片机实验板

本帖最后由 paulhyde 于 2014-9-15 09:21 编辑 单片机实验板  …

查看全部问答>

高手相救啊,关于QuartusII 的Verilog正弦波波形仿真问题

   刚接触Verilog时间不长,想弄个正弦波。其中rom用于存储波形数据,addr产生地址数据寻址。但是一直得不到想要的结果?不管是仿真还是用signaltapII,发现地址和数据时钟对不上,差两个时钟节拍,不知道是为什么?另外,quartusii仿真 ...…

查看全部问答>

wince内存占用问题

现在系统一起来就占用了20M左右内存,想问下.net compact framework3.5和2.0在内存占用方面大吗? 我这边用的是3.5,基本没有用到3.5特性,想换成2.0,是否在这方面会有改善? 还是说有其他方面可以看下节省的地方?…

查看全部问答>

请教关于EBOOT和VIVI的bootloader

请教各位高手:     WINCE启动内核的方式有:bootloader(vivi)和eboot(bsp自带) 现在我想从WINCE42升级到wince50 可是boot这还不了解 请问: 1、bootloader(vivi方式)的跟BSP中自带的eboot有关系吗?也就是说我如果拿开发板的 ...…

查看全部问答>

关于WINCE编译的问题

wince在编译的过程中,只看到了生成了许多LIB文件,比如netui.lib,但最后他是怎样将这些LIB文件又生成DLL文件的呢?比如netui.dll。…

查看全部问答>

如何用c#实现wince4.2窗口最大化(隐藏任务栏),谢谢大家!!!

如何用c#实现wince4.2窗口最大化(隐藏任务栏),谢谢大家!!!…

查看全部问答>

请教PIC单片机,怎样从串口显示浮点数

从ADC得到的浮点数,想从串口输到电脑上看一下呢? PIC单片机和51差不多,不是一个字节一个字节的发送,可是我怎样在电脑上直接显示出浮点数呢?…

查看全部问答>