2015-05-07 10:05 PM
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 !!!!
2015-05-07 11:53 PM
...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.