cancel
Showing results for 
Search instead for 
Did you mean: 

Systick not working???

pritz1
Associate II
Posted on October 11, 2011 at 19:55

Hello,

I am trying to integrate the SysTick example into some code that I am developing and I can't seem to get it to work.  I even tried just pulling the code from the example and loading it onto the microcontroller and it still doesn't seem to work.  I am missing something very basic, I am sure.  I believe that the TimingDelay_Decrement function is not being associated with the interrupts.  Below is the code I am trying to run.  It seems to hang on the first Delay call.

/**

  ******************************************************************************

  * @file    SysTick/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 ''stm32f10x.h''

#include ''STM32vldiscovery.h''

/** @addtogroup Examples

  * @{

  */

/* Private typedef -----------------------------------------------------------*/

/* Private define ------------------------------------------------------------*/

/* Private macro -------------------------------------------------------------*/

/* Private variables ---------------------------------------------------------*/

static __IO uint32_t TimingDelay;

void TimingDelay_Decrement(void);

/* Private function prototypes -----------------------------------------------*/

void Delay(__IO uint32_t nTime);

/* 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

     */

  /* Initialize Leds LD3 and LD4 mounted on STM32VLDISCOVERY board */

  STM32vldiscovery_LEDInit(LED3);

  STM32vldiscovery_LEDInit(LED4);

  /* Turn on LD3 and LD4 */

  STM32vldiscovery_LEDOn(LED3);

  STM32vldiscovery_LEDOn(LED4);

  /* Setup SysTick Timer for 1 msec interrupts  */

  if (SysTick_Config(SystemCoreClock / 1000))

  {

    /* Capture error */

    while (1)

    {

    STM32vldiscovery_LEDOff(LED3);

    STM32vldiscovery_LEDOff(LED4);

    }

  }

  while (1)

  {

    /* Toggle LD3 */

    STM32vldiscovery_LEDToggle(LED3);

    /* Insert 50 ms delay */

    Delay(50);

    /* Toggle LD4 */

   STM32vldiscovery_LEDToggle(LED4);

    /* Insert 100 ms delay */

    Delay(100);

  }

}

/**

  * @brief  Inserts a delay time.

  * @param  nTime: specifies the delay time length, in milliseconds.

  * @retval None

  */

void Delay(__IO uint32_t nTime)

{

  TimingDelay = nTime;

  while(TimingDelay != 0);

}

/**

  * @brief  Decrements the TimingDelay variable.

  * @param  None

  * @retval None

  */

void TimingDelay_Decrement(void)

{

  if (TimingDelay != 0x00)

  {

    TimingDelay--;

  }

}

#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****/

1 REPLY 1
pritz1
Associate II
Posted on October 12, 2011 at 00:28

Nevermind - I figured it out.  I had to put:

TimingDelay_Decrement(void);

in the Systick handler:

void SysTick_Handler(void)

in the file stm32f10x_it.c

Hope this helps other people.