cancel
Showing results for 
Search instead for 
Did you mean: 

lease help me something about delay function in stm32f303 discovery

chauvoluuhuong
Associate II
Posted on May 08, 2015 at 07:05

hi!

i have learned about how to use systick timer according to example systick_example that st provide this is source code


/**

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

* @file SysTick_Example/main.c 

* @author MCD Application Team

* @version V1.1.0

* @date 20-September-2012

* @brief Main program body

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

* @attention

*

* <
h2
><
center
>© COPYRIGHT 2012 STMicroelectronics</
center
></
h2
>

*

* Licensed under MCD-ST Liberty SW License Agreement V2, (the ''License'');

* You may not use this file except in compliance with the License.

* You may obtain a copy of the License at:

*

* http://www.st.com/software_license_agreement_liberty_v2

*

* Unless required by applicable law or agreed to in writing, software 

* distributed under the License is distributed on an ''AS IS'' BASIS, 

* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and

* limitations under the License.

*

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

*/ 


/* Includes ------------------------------------------------------------------*/

#include ''main.h''


/** @addtogroup STM32F3_Discovery_Peripheral_Examples

* @{

*/


/** @addtogroup SysTick_Example

* @{

*/ 


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

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

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

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

GPIO_InitTypeDef GPIO_InitStructure;

static __IO uint32_t TimingDelay;


/* 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_stm32f30x.s) before to branch to application main.

To reconfigure the default setting of SystemInit() function, refer to

system_stm32f30x.c file

*/ 


/* Initialize Leds mounted on STM32F3-discovery */

STM_EVAL_LEDInit(LED3);

STM_EVAL_LEDInit(LED4);

STM_EVAL_LEDInit(LED5);

STM_EVAL_LEDInit(LED6);

STM_EVAL_LEDInit(LED7);

STM_EVAL_LEDInit(LED8);

STM_EVAL_LEDInit(LED9);

STM_EVAL_LEDInit(LED10);


/* Turn On LED3 */

STM_EVAL_LEDOn(LED3);

/* Turn On LED7 */

STM_EVAL_LEDOn(LED7);

/* Turn On LED6 */

STM_EVAL_LEDOn(LED6);

/* Turn On LED10 */

STM_EVAL_LEDOn(LED10);


/* Setup SysTick Timer for 1 msec interrupts.

------------------------------------------

1. The SysTick_Config() function is a CMSIS function which configure:

- The SysTick Reload register with value passed as function parameter.

- Configure the SysTick IRQ priority to the lowest value (0x0F).

- Reset the SysTick Counter register.

- Configure the SysTick Counter clock source to be Core Clock Source (HCLK).

- Enable the SysTick Interrupt.

- Start the SysTick Counter.


2. You can change the SysTick Clock source to be HCLK_Div8 by calling the

SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8) just after the

SysTick_Config() function call. The SysTick_CLKSourceConfig() is defined

inside the stm32f30x_misc.c file.


3. You can change the SysTick IRQ priority by calling the

NVIC_SetPriority(SysTick_IRQn,...) just after the SysTick_Config() function 

call. The NVIC_SetPriority() is defined inside the core_cm0.h file.


4. To adjust the SysTick time base, use the following formula:


Reload Value = SysTick Counter Clock (Hz) x Desired Time base (s)


- Reload Value is the parameter to be passed for SysTick_Config() function

- Reload Value should not exceed 0xFFFFFF

*/

if (SysTick_Config(SystemCoreClock / 1000))

{ 

/* Capture error */ 

while (1);

}


while (1)

{

/* Toggle LED3 */

STM_EVAL_LEDToggle(LED3);

/* Toggle LED7 */

STM_EVAL_LEDToggle(LED7);

/* Toggle LED6 */

STM_EVAL_LEDToggle(LED6);

/* Toggle LED10 */

STM_EVAL_LEDToggle(LED10);


/* Insert 100 ms delay */

Delay(100);


/* Toggle LED4 */

STM_EVAL_LEDToggle(LED4);

/* Toggle LED5 */

STM_EVAL_LEDToggle(LED5);

/* Toggle LED9 */

STM_EVAL_LEDToggle(LED9);

/* Toggle LED8 */

STM_EVAL_LEDToggle(LED8);


/* Insert 150 ms delay */

Delay(150);

}

}


/**

* @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 STMicroelectronics *****END OF FILE****/

that i can't know is how the Delay() , andTimingDelay_Decrement() function relate . ex : if i call delay(150) that meaning to according to declare delay() function void Delay(__IO uint32_t nTime) { TimingDelay = nTime; while(TimingDelay != 0); } i will have timemingDelay= 150 and i can't to imagine for steps after that the program work thank for yours help !!!!
1 REPLY 1
AvaTar
Lead
Posted on May 08, 2015 at 08:53

...and i can't to imagine for steps after that the program work

Usually, you call your

TimingDelay_Decrement()

function from the SysTick interrupt routine. Or, you can implement that functionality directly in the SysTick handler.