STM32F10x 使用SysTick的延时函数
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->/*
* STM32F10x 使用SysTick的延時函數
* 版本.........: 1.0
* 作者.........: 陳利棟
* 文件名.......: delay.h
* 創建時間.....: 2010.06.26
* 最后修改.....: 2010.06.26
*
* 共4個延時函數,其中delay可以直接使用,其余3個需要先調用初始化函數delay_init
*
* 參數最大值:
* delay : 0xffffffff
* delay_us : 0xffffff / (HCLK / 8000000)
* delay_ms : 0xffffff / (HCLK / 8000) 特別注意主頻72M時為1864
* delay_s : 0xffff
*/
#ifndef __DELAY_H
#define __DELAY_H
#include "stm32f10x_type.h"
#include "stm32f10x_systick.h"
#include "stm32f10x_rcc.h"
extern void delay(u32 i);
extern void delay_init(void);
extern void delay_us(u32 i);
extern void delay_ms(u16 i);
extern void delay_s(u16 n);
#endif /* __DELAY_H */
?
?
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->/*
* STM32F10x 使用SysTick的延時函數
* 版本.........: 1.0
* 作者.........: 陳利棟
* 文件名.......: delay.c
* 創建時間.....: 2010.06.26
* 最后修改.....: 2010.06.26
*/
#include "delay.h"
static u8 delay_fac_us = 0; // us延時倍乘數
static u16 delay_fac_ms = 0; // ms延時倍乘數
static FlagStatus Status;
void delay(u32 i)
{
while (--i);
}
void delay_init(void)
{
RCC_ClocksTypeDef RCC_ClocksStatus;
RCC_GetClocksFreq(&RCC_ClocksStatus);
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
SysTick_ITConfig(DISABLE);
delay_fac_us = RCC_ClocksStatus.HCLK_Frequency / 8000000;
delay_fac_ms = RCC_ClocksStatus.HCLK_Frequency / 8000;
}
void delay_us(u32 n)
{
SysTick_SetReload(delay_fac_us * n);
SysTick_CounterCmd(SysTick_Counter_Clear);
SysTick_CounterCmd(SysTick_Counter_Enable);
do
{
Status = SysTick_GetFlagStatus(SysTick_FLAG_COUNT);
}while (Status != SET);
SysTick_CounterCmd(SysTick_Counter_Disable);
}
// 最大值 0xffffff / (HCLK / 8000)
// 主頻72M時,n最大值只能是1864
void delay_ms(u16 n)
{
u32 temp = delay_fac_ms * n;
if (temp > 0x00ffffff)
{
temp = 0x00ffffff;
}
SysTick_SetReload(temp);
SysTick_CounterCmd(SysTick_Counter_Clear);
SysTick_CounterCmd(SysTick_Counter_Enable);
do
{
Status = SysTick_GetFlagStatus(SysTick_FLAG_COUNT);
}while (Status != SET);
SysTick_CounterCmd(SysTick_Counter_Disable);
}
void delay_s(u16 n)
{
while (n--)
{
delay_ms(1000);
}
}
?
轉載自:https://www.cnblogs.com/chenlidong/archive/2010/06/28/1766637.html
轉載于:https://www.cnblogs.com/will-king0308/p/9243190.html
總結
以上是生活随笔為你收集整理的STM32F10x 使用SysTick的延时函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python面向对象:多态与多态性
- 下一篇: 接口设计的幂等性考虑