前面花了近一周的时间完成了STM32中关于复位与体系时钟的学习,终于,如今可以开始下一个任务了:SysTick。也不知道接着学这个对不对,但是感觉全都是跟时钟有关的东东,就放一起来学学,应该没什么题目吧。
好吧,我不得不承认本身程度还不敷,在第一个板子(金牛STM32F107VCT6)上跑了一个程序,但是没能乐成,继承找缘故起因吧。
接下来,我还是不断念,在别的一块板子(ALIENTEKSTM32F103RBT6)上面写了一个利用SysTick定时的代码,结果运行乐成,在这里分享出来,以作以后复习只用。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Delay_SysTick.H
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
**文件名称:Delay_SysTick.H
**功能形貌:体系滴答及其延时的利用声明
**硬件平台:STM32F10x
**编译环境:Keiluversion4IDE
**库版本:v3.5.0
**版本信息:v0.0
**编写作者:
**编写时间:2011-11-26
**附加阐明:无
**修改记录:无
**/
#ifndef_DELAY_SYSTICK_H
#define_DELAY_SYSTICK_H
#include"stm32f10x.h"
/*Privatefunctionprototypes-----------------------------------------------*/
voidSysTick_Configuration(void);
voidSysTickDelay(__IOuint32_tnTime);
voidTimingDelay_Decrement(void);
voidSysTick_Handler(void);
#endif
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Delay_SysTick.C
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
**文件名称:Delay_SysTick.C
**功能形貌:体系滴答及其延时的利用
**硬件平台:STM32F10x
**编译环境:Keiluversion4IDE
**库版本:v3.5.0
**版本信息:v0.0
**编写作者:
**编写时间:2011-11-26
**附加阐明:无
**修改记录:2011-11-26将TimingDelay数据范例改为volatile
**/
/*Includes------------------------------------------------------------------*/
//#include"main.h"
#include"delay_systick.h"
#include"stm32f10x.h"
/*Privatetypedef-----------------------------------------------------------*/
/*Privatedefine------------------------------------------------------------*/
/*Privatemacro-------------------------------------------------------------*/
/*Privatevariables---------------------------------------------------------*/
volatileuint32_tTimingDelay;
/*Privatefunctionprototypes-----------------------------------------------*/
/*Privatefunctions---------------------------------------------------------*/
/*SetupSysTickTimerfor1msecinterrupts.
------------------------------------------
1.TheSysTick_Config()functionisaCMSISfunctionwhichconfigure:
-TheSysTickReloadregisterwithvaluepassedasfunctionparameter.
-ConfiguretheSysTickIRQprioritytothelowestvalue(0x0F).
-ResettheSysTickCounterregister.
-ConfiguretheSysTickCounterclocksourcetobeCoreClockSource(HCLK).
-EnabletheSysTickInterrupt.
-StarttheSysTickCounter.
2.YoucanchangetheSysTickClocksourcetobeHCLK_Div8bycallingthe
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8)justafterthe
SysTick_Config()functioncall.TheSysTick_CLKSourceConfig()isdefined
insidethemisc.cfile.
3.YoucanchangetheSysTickIRQprioritybycallingthe
NVIC_SetPriority(SysTick_IRQn,...)justaftertheSysTick_Config()function
call.TheNVIC_SetPriority()isdefinedinsidethecore_cm3.hfile.
4.ToadjusttheSysTicktimebase,usethefollowingformula:
ReloadValue=SysTickCounterClock(Hz)xDesiredTimebase(s)
-ReloadValueistheparametertobepassedforSysTick_Config()function
-ReloadValueshouldnotexceed0xFFFFFF
*/
/**
*@briefConfiguretheSysTickclock.
*@paramNone
*@retvalNone
*/
voidSysTick_Configuration(void)
{
/*SysTickclocksourceselect*/
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
/*Initializeandstartsystickclockanditsinterrupt*/
if(SysTick_Config(SystemCoreClock/1000))
{
/*Captureerror*/
while(1);
}
}
/**
*@briefInsertsadelaytime.
*@paramnTime:specifiesthedelaytimelength,inmilliseconds.
*@retvalNone
*/
voidSysTickDelay(__IOuint32_tnTime)
{
TimingDelay=nTime;
while(TimingDelay!=0);
}
/**
*@briefDecrementstheTimingDelayvariable.
*@paramNone
*@retvalNone
*/
voidTimingDelay_Decrement(void)
{
if(TimingDelay!=0x00)
{
TimingDelay--;
}
}
/**
*@briefThisfunctionhandlesSysTickHandler.
*@paramNone
*@retvalNone
*/
voidSysTick_Handler(void)
{
TimingDelay_Decrement();
}
阐明:本次没有直接对寄存器操纵,由于是入门,以是没那么深入,先让板子跑起来再说吧,下面给出的参考资料中有对寄存器的讲授,很有代价,盼望能帮上各人。
原文链接:https://www.eeworld.com.cn/mcu/article_2016101030295.html
我要评论