在MDK中 写基于STM32的程序是有 ErrorStatus HSEStartUpStatus; u8 count=0; 这么两个语句 啥意思

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在MDK中 写基于STM32的程序是有 ErrorStatus HSEStartUpStatus; u8 count=0; 这么两个语句 啥意思相关的知识,希望对你有一定的参考价值。

参考技术A ErrorStatus 和 u8就和你学C语言中的int 、char一样,后面定义的HSEStartUpStatus和count是这个变量。要问这个 u8 等具体是什么类型,你要参考“STM32F101xx 与 STM32F103xx 的固件函数库”,举例,你的ErrorStatus 代表bool类型的0或者1,u8是unsigned char,还有u32,uv8.......还是参考固件函数库吧
typedef enum

ERROR = 0,
SUCCESS = !ERROR
ErrorStatus;

参考资料:STM32F101xx 与 STM32F103xx 的固件函数库

本回答被提问者和网友采纳
参考技术B 定义两个变量啊~

STM32 ~ MDK环境下调试程序 HardFault_Handler 相关

STM32出现HardFault_Handler故障的原因主要有两个方面:

1、内存溢出或者访问越界。这个需要自己写程序的时候规范代码,遇到了需要慢慢排查。

2、堆栈溢出。增加堆栈的大小。

出现问题时排查的方法:

1、添加软件断点,一旦在调试过程中出现Hard Fault 则会停在__breakpoint(0)处。

void HardFault_Handler(void)  
{  
   
   if (CoreDebug->DHCSR & 1)
   { 
      //check C_DEBUGEN == 1 -> Debugger 
      Connected  
      __breakpoint(0);  // halt program execution here         
    }  
    while (1)  
    {  
    }  
}  

  当进入HardFault断点后,菜单栏Peripherals >Core Peripherals >FaultReports打开异常发生的报告,查看发生异常的原因。

 

上面的报告发生了BUS FAULT,并将Fault的中断服务转向Hard Fault。


相对于检测发生了什么异常,定位异常发生位置显得更重要。
(1)打开Call Stack窗口(如下图左侧,断点停在Hard Fault服务程序中)

(2)在Call Stack的HardFault_Handler上右键Show CallerCode(有的Keil版本也可以直接双击)

这时将跳转到发生异常的源代码位置(如上图),异常发生在p->hour=0这一行。这里错误很明显:指针p尚未为成员变量分配内存空间,直接访问未分配的内粗空间肯定出错。

补充:
[1] 在复杂的情况下,即使定位了异常发生位置也很难容易的改正错误,要学会使用Watch窗口对发生错误的指针变量进行跟踪;
[2]在问题不明晰的情况下,尝试分析反汇编代码,就自己遇到的,部分情况下的异常发生在BL等跳转指令处,BL跳转到了不合法的内存地址产生异常

 

以上是关于在MDK中 写基于STM32的程序是有 ErrorStatus HSEStartUpStatus; u8 count=0; 这么两个语句 啥意思的主要内容,如果未能解决你的问题,请参考以下文章

MDK st-link下载STM32程序出现Internal command error和Error:Flash download failed. Target DLL

基于STM32的汇编程序

如何通过JLINK烧写STM32程序

mdk硬件仿真STM32 怎么查看当前系统时钟

MDK中在stm32下载出现error:flash download failed “cortex-m3”的问题

STM32 ~ MDK环境下调试程序 HardFault_Handler 相关