历史上的今天
返回首页

历史上的今天

今天是:2024年08月22日(星期四)

正在发生

2018年08月22日 | STM32程序跳转后死机现象解决

2018-08-22 来源:eefocus

正在用STM32单片机,移植了官方IAP,使用没问题,但是每次下载程序都要重启,嫌麻烦后来想发个命令直接跳转到IAP,参考官方IAP的跳转程序,将APPLICATION_ADDRESS改为0x08000000


#define APPLICATION_ADDRESS   (uint32_t)0x08000000 

typedef  void (*pFunction)(void);

pFunction Jump_To_Application;

 

void JumpToIAP(void)

{

    uint32_t JumpAddress;

    JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4); /* Jump to user application */

    Jump_To_Application = (pFunction) JumpAddress;/* Initialize user application's Stack Pointer */

     __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);

    Jump_To_Application();

}


那么问题来了,跳转完单片机就死翘翘了,后来查资料,发现要改中断向量偏移地址,于是又加了这句话:

NVIC_SetVectorTable(NVIC_VectTab_FLASH,0);


依然死翘翘,再找资料。无意间看到网友出现过同样问题,试着改一下,果然好使。那么问题出在哪呢?

原来是跳转之前的APP程序里有些中断没有关,跳转之后中断触发,但IAP程序里没有定义中断响应函数,找不到地址才导致死机。好了,跳转前关掉中断不就哦柯了。我用了RCC,TIM3,和USART1,全部关掉关掉


TIM_DeInit(TIM3);

TIM_Cmd(TIM3, DISABLE);

USART_DeInit(USART1);

USART_Cmd(USART1,DISABLE);

RCC_RTCCLKCmd(DISABLE);


再跳转,哈哈,IAP果断出现,下载程序再也不用重启了。


推荐阅读

史海拾趣

Andigilog公司的发展小趣事

Andigilog是一家专注于提供模拟和混合信号集成电路解决方案的公司,以下是该公司发展的相关故事:

  1. 公司成立与早期发展:Andigilog成立于2002年,总部位于美国加利福尼亚州的圣何塞。该公司成立之初,专注于设计和销售模拟和混合信号集成电路(IC),以满足各种市场的需求。最初,公司的产品主要应用于电源管理、温度监测和控制等领域。

  2. 技术创新与产品推出:Andigilog在成立初期就致力于技术创新和产品研发。随着市场需求的不断变化,公司不断推出新型的集成电路产品,包括温度传感器、电源监测芯片等。这些产品具有高精度、低功耗、高集成度等优点,受到了客户的青睐。

  3. 合作伙伴关系与市场拓展:为了扩大市场份额和提升品牌知名度,Andigilog与各种合作伙伴建立了紧密的合作关系。公司与全球各地的分销商、代理商、原始设备制造商(OEM)等进行合作,共同开拓市场,推广公司的产品。此外,Andigilog还与行业内的其他公司进行技术合作和产品整合,共同提供更完整的解决方案。

  4. 全球布局与生产基地:随着业务的不断扩展,Andigilog在全球建立了多个生产基地和销售办事处。除了在美国的总部外,公司还在亚洲、欧洲等地区设立了生产工厂和销售办事处,以更好地服务全球客户。这些生产基地拥有先进的制造设备和技术,能够满足客户对产品质量和交货周期的要求。

  5. 持续发展与未来展望:作为一家专注于模拟和混合信号集成电路的公司,Andigilog将继续致力于技术创新和产品发展。公司将不断推出适应市场需求的新产品,提升生产效率和产品质量,以满足客户不断变化的需求。同时,Andigilog也将继续关注行业的发展趋势和技术变革,不断调整战略,保持在行业内的竞争优势。

Cavium Networks公司的发展小趣事

随着通信网络的不断升级和转型,Cavium Networks 看到了市场的巨大潜力。在2008年,尽管全球经济风暴肆虐,但 Cavium Networks 依然保持着强劲的增长势头。同年11月,公司宣布收购 W&W Communications 公司,这一举措进一步拓展了 Cavium Networks 的业务范围,增强了其在网络通信领域的竞争力。通过收购,Cavium Networks 获得了更多的技术资源和市场份额,为其后续的发展提供了有力的支持。

Crystal Clear Technology公司的发展小趣事

随着环保意识的日益增强,Crystal Clear Technology积极响应国家号召,将环保理念融入产品研发和生产过程中。公司采用环保材料和节能技术,降低产品对环境的污染。同时,公司还加强废弃物处理和资源回收利用,努力实现可持续发展。这一举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实基础。

ENTRELECUK公司的发展小趣事

随着业务的不断发展,ENTRELEC UK开始寻求全球市场的拓展。公司通过与国外代理商建立合作关系,将产品销往世界各地。同时,公司还在海外设立研发中心和生产基地,以便更好地了解当地市场需求,提供定制化的解决方案。这些举措使ENTRELEC UK在全球电子行业中树立了良好的品牌形象。

FlexiPanel公司的发展小趣事

面对电子行业日益多样化的市场需求,FlexiPanel推出了定制化RF模块解决方案服务。公司拥有一支专业的技术团队,能够根据客户的具体需求,提供从需求分析、方案设计、样品制作到批量生产的全流程服务。这种灵活多样的服务模式不仅满足了客户对于个性化产品的需求,还帮助FlexiPanel在市场中建立了良好的口碑和品牌形象。

台湾町洋(dinkle)公司的发展小趣事

町洋始终坚守品质至上的原则,从原材料采购到生产流程再到成品检验,每一个环节都严格把关。这种对品质的执着追求使得町洋的产品在市场上享有极高的声誉。客户对町洋产品的信任和认可也成为了公司最宝贵的财富。

问答坊 | AI 解惑

关于题C的问题

本帖最后由 paulhyde 于 2014-9-15 09:30 编辑 AD603产生的自激现象严重,当用两级放大时候,第二级放大严重失真,这个是什么原因啊?我们现在在AD603前面加了OPA658做前级跟随器,希望可以减小自激  …

查看全部问答>

发个我用的元件库

这是我平常所用到的元件库…

查看全部问答>

wince 的cab 安装包问题(vs2005)

想做一个cab安装包,安装今日插件,按照网上的说明写了个安装程序setupdll.dll, 但是在模拟器上(pocket pc se 2003 Emulator)安装发现setupdll没有被调用(在函数Install_Exit中加了MessageBox,没有弹出,注册表也没写) cab安装包使用vs2005做的 ...…

查看全部问答>

GPRS连接问题

我用OPEN AT 已经建立完成了GPRS激活部分,但是为什么数据流中什么都收不到,在超级终端里使用ATD*99***1#,可以收到PPP包,如何使用OPEN AT ADL也能收到这些PPP包?请指教一二!我在软件里已经加入了AT命令,但是没有任何反应,到底是什么地方出了 ...…

查看全部问答>

用KernelIoControl获取逻辑中断号失败

我想使用EINTT4作按键中断输入.定义如下: UINT32  g_EINTIrq = IRQ_EINT4; UINT32  g_EINTSysIntr = SYSINTR_UNDEFINED; PUBLIC DWORD CPK_Init(DWORD dwContext) {             &n ...…

查看全部问答>

dshow CreateMediaType FreeMediaType 无法解析的外部符号

我在wince6.0上做dshow开发,已经包含的头文件和库 #include #include #include #include #include                                     &n ...…

查看全部问答>

请教中断问题

我在做关于MPC8260的工作.目前,我想为DMA加入中断处理程序.MPC8260的参考手册中 说,IDMA1的中断号是6,我使用如下函数: intConnect(INUM_TO_IVEC(6),dma_isr,0); 连接中断处理程序与中断源.但是一旦DMA结束,BC中断到来之后,整个EP8260板子就死掉 ...…

查看全部问答>

MCS-51单片机定时器问题

MCS-51单片机中,采用12Mhz时钟,定时器T0采用模式1(16位计数器),请问在下面程序中,p1.0的输出频率 ? MOV TMOD,#01H SETB TR0 LOOP:MOV TH0,#0B1H MOV TL0,#0E0H LOOP1:JNB TF0,LOOP1 CLR TR0 CPL P1.0 SJMP LOOP…

查看全部问答>

ADS1.2 调用strtoul(str,NULL,0,NULL),地址0的内容会被更改

strtoul的定义: unsigned long strtoul(const char *str, char **endptr, int requestedbase, int *ret) 可见ADS1.2会把NULL指针指向地址0,但是地址0放着复位向量,怎么样才能不改变0地址的内容呢?(当然在调用的时候可以不用NULL,而定义一个 ...…

查看全部问答>

晶振问题请教

今天调试STM32F103RCT6,发现一个问题,就是用以前的库程序根本不运行,用最新的3.10,发现程序总是停在 while((RCC->CR & RCC_CR_PLL2RDY) == 0)     {     }     这里而不在执行,软件仿真也是停在这里 ...…

查看全部问答>