打印

stm32调试

[复制链接]
6739|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
LDTEST| | 2013-3-7 09:24 | 只看该作者
调试开始的地址是?

使用特权

评论回复
板凳
jlass| | 2013-3-7 10:25 | 只看该作者
MOVS r0 r0应该是nop指令,不会停住的,要么是你的芯片没运行,要么前一句是死循环

使用特权

评论回复
地板
jay517217|  楼主 | 2013-3-7 10:26 | 只看该作者
jlass 发表于 2013-3-7 10:25
MOVS r0 r0应该是nop指令,不会停住的,要么是你的芯片没运行,要么前一句是死循环 ...

程序跑不起来,我不知道该检查硬件什么方面,电源、晶振、VSSA VDDA 复位都没问题啊,还应该 检查什么问题呢 我的板子没有敷铜

使用特权

评论回复
5
jay517217|  楼主 | 2013-3-7 10:37 | 只看该作者
LDTEST 发表于 2013-3-7 09:24
调试开始的地址是?

0x20000000 BE00      BKPT     0x00一直停在这  点RUN也进不去

使用特权

评论回复
评论
LDTEST 2013-3-7 11:48 回复TA
问题明显了,这是在RAM中,不是ROM中,检查boot0 boot1电位 BOOT1=x BOOT0=0 从用户闪存启动,这是正常的工作模式。 BOOT1=0 BOOT0=1 从系统存储器启动,  
6
LDTEST| | 2013-3-7 11:49 | 只看该作者
:L回复变成了 点评

使用特权

评论回复
7
LDTEST| | 2013-3-7 11:50 | 只看该作者
jay517217 发表于 2013-3-7 10:37
0x20000000 BE00      BKPT     0x00一直停在这  点RUN也进不去

BOOT1=x   BOOT0=0   从用户闪存启动,这是正常的工作模式。

BOOT1=0   BOOT0=1   从系统存储器启动,这种模式启动的程序功能由厂家设置。
BOOT1=1   BOOT0=1   从内置SRAM启动,这种模式可以用于调试。

使用特权

评论回复
8
加油吧小鱼儿| | 2013-3-8 00:10 | 只看该作者
正在学习中,这个问题没有遇到过

使用特权

评论回复
9
jay517217|  楼主 | 2013-3-8 09:12 | 只看该作者
LDTEST 发表于 2013-3-7 11:49
回复变成了 点评

您方便加一下我的QQ吗?517217451  谢谢了

使用特权

评论回复
10
inurl| | 2013-3-8 09:20 | 只看该作者
JP1还有个跳线 ,应该是BOOT方式不对了

使用特权

评论回复
11
jay517217|  楼主 | 2013-3-8 09:23 | 只看该作者
LDTEST 发表于 2013-3-7 11:50
BOOT1=x   BOOT0=0   从用户闪存启动,这是正常的工作模式。

BOOT1=0   BOOT0=1   从系统存储器启动,这 ...

现在是BOOT=0 BOOT1=0

使用特权

评论回复
12
jay517217|  楼主 | 2013-3-8 09:24 | 只看该作者
LDTEST 发表于 2013-3-7 11:49
回复变成了 点评

用ULINKE下载调试 不是设置BOOT0=0  BOOT1=0吗

使用特权

评论回复
13
LDTEST| | 2013-3-8 09:31 | 只看该作者
理论上应该是  BOOT0=0  BOOT1=X ,但硬件具体应该量一下是不是

使用特权

评论回复
14
jay517217|  楼主 | 2013-3-8 09:46 | 只看该作者
LDTEST 发表于 2013-3-8 09:31
理论上应该是  BOOT0=0  BOOT1=X ,但硬件具体应该量一下是不是

我刚量了一下,这两个管脚电压都是0V

使用特权

评论回复
15
LDTEST| | 2013-3-8 10:01 | 只看该作者
:L:L:L 一开始指针就错了,然后 就飞了么  or  芯片坏了?

MOVS  r0,r0 指令是  0x0000,FLASH 被完全擦除 后是 x0FF  ,调试显示的汇编是  DCD      0xFFFFFFFF  
楼主方便的话 贴一下代码,以及 调试设置

使用特权

评论回复
16
jay517217|  楼主 | 2013-3-8 10:07 | 只看该作者
LDTEST 发表于 2013-3-8 10:01
一开始指针就错了,然后 就飞了么  or  芯片坏了?

MOVS  r0,r0 指令是  0x0000,FLASH 被完全擦除 ...

/**
  ******************************************************************************
  * @file    RCC/main.c
  * @author  MCD Application Team
  * @version V1.0.0
  * @date    09/13/2010
  * @brief   Main program body.
  ******************************************************************************
  * @copy
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2010 STMicroelectronics</center></h2>
  */


/* Includes ------------------------------------------------------------------*/
#include "main.h"


/** @addtogroup Examples
  * @{
  */

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
#define DELAY_COUNT    0x3FFFF

/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
GPIO_InitTypeDef GPIO_InitStructure;
RCC_ClocksTypeDef RCC_ClockFreq;
ErrorStatus HSEStartUpStatus;

/* Private function prototypes -----------------------------------------------*/
void NVIC_Configuration(void);
void Delay(__IO uint32_t nCount);

void SetSysClock(void);
#ifdef SYSCLK_HSE
  void SetSysClockToHSE(void);
#elif defined SYSCLK_FREQ_24MHz
  void SetSysClockTo24(void);
#endif

/* Private functions ---------------------------------------------------------*/

/**
  * @brief  Main program.
  * @param  None
  * @retval None
  */
int main(void)
{
  /*!< At this stage the microcontroller clock setting is already configured,
       this is done through SystemInit() function which is called from startup
       file (startup_stm32f10x_xx.s) before to branch to application main.
       To reconfigure the default setting of SystemInit() function, refer to
       system_stm32f10x.c file
     */     
      
  /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */
  SetSysClock();

  /* This function fills the RCC_ClockFreq structure with the current
     frequencies of different on chip clocks (for debug purpose) */
  RCC_GetClocksFreq(&RCC_ClockFreq);

  /* Initialize Leds mounted on STM32VLDISCOVERY board --------------------------*/
  STM32vldiscovery_LEDInit(LED3);
  STM32vldiscovery_LEDInit(LED4);

  /* Output HSE clock on MCO pin ---------------------------------------------*/
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  RCC_MCOConfig(RCC_MCO_HSE);
  
  while (1)
  {
    /* Toggle LED3 */
    STM32vldiscovery_LEDToggle(LED3);
    /* Insert delay */
    Delay(DELAY_COUNT);

    /* Toggle LED4 */
    STM32vldiscovery_LEDToggle(LED4);
    /* Insert a delay */
    Delay(DELAY_COUNT);
  }
}

/**
  * @brief  Configures the System clock frequency, HCLK, PCLK2 and PCLK1
  *   prescalers.
  * @param  None
  * @retval None
  */
void SetSysClock(void)
{   
/* The System clock configuration functions defined below assume that:
        - For Low, Medium and High density devices an external 8MHz crystal is
          used to drive the System clock.
        - For Connectivity line devices an external 25MHz crystal is used to drive
          the System clock.
     If you are using different crystal you have to adapt those functions accordingly.*/

#if defined SYSCLK_HSE
  SetSysClockToHSE();
#elif defined SYSCLK_FREQ_24MHz
  SetSysClockTo24();  
#endif

/* If none of the define above is enabled, the HSI is used as System clock
    source (default after reset) */
}

/**
  * @brief  Selects HSE as System clock source and configure HCLK, PCLK2
  *   and PCLK1 prescalers.
  * @param  None
  * @retval None
  */
void SetSysClockToHSE(void)
{
  /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------------*/   
  /* RCC system reset(for debug purpose) */
  RCC_DeInit();

  /* Enable HSE */
  RCC_HSEConfig(RCC_HSE_ON);

  /* Wait till HSE is ready */
  HSEStartUpStatus = RCC_WaitForHSEStartUp();

  if (HSEStartUpStatus == SUCCESS)
  {
    /* Flash 0 wait state */
    FLASH_SetLatency(FLASH_Latency_0);

    /* HCLK = SYSCLK */
    RCC_HCLKConfig(RCC_SYSCLK_Div1);
  
    /* PCLK2 = HCLK */
    RCC_PCLK2Config(RCC_HCLK_Div1);

    /* PCLK1 = HCLK */
    RCC_PCLK1Config(RCC_HCLK_Div1);

    /* Select HSE as system clock source */
    RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);

    /* Wait till PLL is used as system clock source */
    while (RCC_GetSYSCLKSource() != 0x04)
    {
    }
  }
  else
  { /* If HSE fails to start-up, the application will have wrong clock configuration.
       User can add here some code to deal with this error */   

    /* Go to infinite loop */
    while (1)
    {
    }
  }
}

/**
  * @brief  Sets System clock frequency to 24MHz and configure HCLK, PCLK2
  *   and PCLK1 prescalers.
  * @param  None
  * @retval None
  */
void SetSysClockTo24(void)
{
  /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------------*/   
  /* RCC system reset(for debug purpose) */
  RCC_DeInit();

  /* Enable HSE */
  RCC_HSEConfig(RCC_HSE_ON);

  /* Wait till HSE is ready */
  HSEStartUpStatus = RCC_WaitForHSEStartUp();

  if (HSEStartUpStatus == SUCCESS)
  {
        /* Flash 0 wait state */
    FLASH_SetLatency(FLASH_Latency_0);
    /* HCLK = SYSCLK */
    RCC_HCLKConfig(RCC_SYSCLK_Div1);
  
    /* PCLK2 = HCLK */
    RCC_PCLK2Config(RCC_HCLK_Div1);

    /* PCLK1 = HCLK */
    RCC_PCLK1Config(RCC_HCLK_Div1);
   
    /* PLLCLK = (8MHz/2) * 6 = 24 MHz */
    RCC_PREDIV1Config(RCC_PREDIV1_Source_HSE, RCC_PREDIV1_Div2);
    RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_6);

    /* Enable PLL */
    RCC_PLLCmd(ENABLE);

    /* Wait till PLL is ready */
    while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    {
    }

    /* Select PLL as system clock source */
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    /* Wait till PLL is used as system clock source */
    while (RCC_GetSYSCLKSource() != 0x08)
    {
    }
  }
  else
  { /* If HSE fails to start-up, the application will have wrong clock configuration.
       User can add here some code to deal with this error */   

    /* Go to infinite loop */
    while (1)
    {
    }
  }
}



/**
  * @brief  Inserts a delay time.
  * @param  nCount: specifies the delay time length.
  * @retval None
  */
void Delay(__IO uint32_t nCount)
{
  for(; nCount!= 0;nCount--);
}

#ifdef  USE_FULL_ASSERT
/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t* file, uint32_t line)
{
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  /* Infinite loop */
  while (1)
  {
  }
}
#endif

/**
  * @}
  */

/**
  * @}
  */

/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/

使用特权

评论回复
17
大秦正声| | 2013-3-8 10:10 | 只看该作者
带232串口的话可以用bootloader!
当然有条件也可以用jtag测试工具!
我的博客:
http://yang96381.blog.163.com

使用特权

评论回复
18
jay517217|  楼主 | 2013-3-8 10:16 | 只看该作者
LDTEST 发表于 2013-3-8 10:01
一开始指针就错了,然后 就飞了么  or  芯片坏了?

MOVS  r0,r0 指令是  0x0000,FLASH 被完全擦除 ...

使用特权

评论回复
19
LDTEST| | 2013-3-8 10:58 | 只看该作者
把 run  to  main  选项去掉,然后单步调试 ,看哪里挂了

使用特权

评论回复
20
jay517217|  楼主 | 2013-3-8 16:20 | 只看该作者
LDTEST 发表于 2013-3-8 10:58
把 run  to  main  选项去掉,然后单步调试 ,看哪里挂了

去掉run to main 后成这样了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

30

帖子

0

粉丝