2011-10-11 10:55 AM
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>© 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****/2011-10-11 03:28 PM
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.cHope this helps other people.