eg:
系统定时时间 = SysTick_Config(SystemCoreClock / 100000)中的参数(SystemCoreClock / 100000)*(1/SystemCoreClock )
延时时间 = Delay_us(100000) 中参数100 000 * 系统定时时间
注意:不过 1us 的中断没啥意义,整个程序的重心都花在进出中断上了,根本没有时间处理其他的任务
/********************************************************************************* @file main.c* @author fire* @version V1.0* @date 2014-xx-xx* @brief 使用SysTick进行精确延时******************************************************************************* @attention** 实验平台:秉火 STM32 F429 开发板* 论坛 :http://www.firebbs.cn* 淘宝 :http://firestm32.taobao.com********************************************************************************/#include "stm32f4xx.h"
#include "./led/bsp_led.h"
#include "./systick/bsp_SysTick.h"/*** @brief 主函数* @param 无* @retval 无*/
int main(void)
{/* LED 端口初始化 */LED_GPIO_Config(); /* 配置SysTick 为10us中断一次,时间到后触发定时中断,*进入stm32fxx_it.c文件的SysTick_Handler处理,通过数中断次数计时*/SysTick_Init();while(1){LED_RED; Delay_us(100000); // 10000 * 10us = 1000ms//Delay_ms(1000);LED_GREEN;Delay_us(100000); // 10000 * 10us = 1000ms//Delay_ms(1000);LED_BLUE;Delay_us(100000); // 10000 * 10us = 1000ms//Delay_ms(1000);}
}/*********************************************END OF FILE**********************/
/********************************************************************************* @file bsp_SysTick.c* @author fire* @version V1.0* @date 2015-xx-xx* @brief SysTick 系统滴答时钟10us中断函数库,中断时间可自由配置,* 常用的有 1us 10us 1ms 中断。 ******************************************************************************* @attention** 实验平台:秉火 STM32 F429 开发板* 论坛 :http://www.firebbs.cn* 淘宝 :http://firestm32.taobao.com********************************************************************************/#include "./systick/bsp_SysTick.h"static __IO u32 TimingDelay;/*** @brief 启动系统滴答定时器 SysTick* @param 无* @retval 无*/
void SysTick_Init(void)
{/* SystemFrequency / 1000 1ms中断一次* SystemFrequency / 100000 10us中断一次* SystemFrequency / 1000000 1us中断一次*/if (SysTick_Config(SystemCoreClock / 100000))//{ /* Capture error */ while (1);}
}/*** @brief us延时程序,10us为一个单位* @param * @arg nTime: Delay_us( 1 ) 则实现的延时为 1 * 10us = 10us* @retval 无*/
void Delay_us(__IO u32 nTime)
{ TimingDelay = nTime; while(TimingDelay != 0);
}/*** @brief 获取节拍程序* @param 无* @retval 无* @attention 在 SysTick 中断函数 SysTick_Handler()调用*/
void TimingDelay_Decrement(void)
{if (TimingDelay != 0x00){ TimingDelay--;}
}
/*********************************************END OF FILE**********************/
/********************************************************************************* @file Project/STM32F4xx_StdPeriph_Templates/stm32f4xx_it.c * @author MCD Application Team* @version V1.5.0* @date 06-March-2015* @brief Main Interrupt Service Routines.* This file provides template for all exceptions handler and * peripherals interrupt service routine.******************************************************************************* @attention** <h2><center>© COPYRIGHT 2015 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 "stm32f4xx_it.h"extern void TimingDelay_Decrement(void);/** @addtogroup STM32F429I_DISCOVERY_Examples* @{*//** @addtogroup FMC_SDRAM* @{*/ /* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*//******************************************************************************/
/* Cortex-M4 Processor Exceptions Handlers */
/******************************************************************************//*** @brief This function handles NMI exception.* @param None* @retval None*/
void NMI_Handler(void)
{
}/*** @brief This function handles Hard Fault exception.* @param None* @retval None*/
void HardFault_Handler(void)
{/* Go to infinite loop when Hard Fault exception occurs */while (1){}
}/*** @brief This function handles Memory Manage exception.* @param None* @retval None*/
void MemManage_Handler(void)
{/* Go to infinite loop when Memory Manage exception occurs */while (1){}
}/*** @brief This function handles Bus Fault exception.* @param None* @retval None*/
void BusFault_Handler(void)
{/* Go to infinite loop when Bus Fault exception occurs */while (1){}
}/*** @brief This function handles Usage Fault exception.* @param None* @retval None*/
void UsageFault_Handler(void)
{/* Go to infinite loop when Usage Fault exception occurs */while (1){}
}/*** @brief This function handles Debug Monitor exception.* @param None* @retval None*/
void DebugMon_Handler(void)
{}/*** @brief This function handles SVCall exception.* @param None* @retval None*/
void SVC_Handler(void)
{}/*** @brief This function handles PendSV_Handler exception.* @param None* @retval None*/
void PendSV_Handler(void)
{}/*** @brief This function handles SysTick Handler.* @param None* @retval None*/
void SysTick_Handler(void)
{TimingDelay_Decrement();
}/******************************************************************************/
/* STM32F4xx Peripherals Interrupt Handlers */
/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */
/* available peripheral interrupt handler's name please refer to the startup */
/* file (startup_stm32f429_439xx.s). */
/******************************************************************************//*** @}*/ /*** @}*/ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/