V3.5库函数下SysTick的学习使用
来源:互联网 发布:老九门社交软件 编辑:程序博客网 时间:2024/06/05 07:29
V3.5库函数下SysTick的学习使用
最初浅浅的学过一些STM32,因为当初刚从51单片机过来,还不是很适应库函数这种开发方法,所以当时我是跟着原子哥的寄存器写法做的项目,当时我还无知的认为学硬件就应该用寄存器操作,现在过了8个月我重新拾起了STM32,也渐渐地明白了库函数开发方式的优越性,于是我决定重新开始学习库函数版STM32.
我看的书是<<STM32自学笔记>>,上面的库函数版本是V2.0版本的,而如今库函数已经发展到V3.5版本,起初发现问题不是很大,当用到SysTick时才发现两个版本的差别.在V2.0版本中意法半导体提供了很多关于SysTick的驱动函数,并且有一个stm32f10x_systick.c文件,而在V3.5版本中则没有了这个文件,搜索整个库,只发现了SysTick_Config()函数和SysTick_CLKSourceConfig()函数,显然V3.5版本对SysTick的操作就不太灵活了,为什么要做这样的改动呢,这我想应该要从SysTick的设计初衷说起吧,SysTick计时器原本是为了操作系统的”嘀嗒”产生定时中断而设计的,而且是在M3内核中,这样基于M3内核的MCU都可以方便的移植RTOS,但是在很多书中都将SysTick当成定时器使用,就违背了SysTick的设计初衷了,为此ST的工程师们才削减了SysTick的函数.
废话说多了,开始正题.打开V3.5版本库函数~/Project/STM32F10x_StdPeriph_Examples/Systick文件夹,里面有关于SysTick的样例程序,打开我们可以看到
/* Setup SysTick Timer for 1 msecinterrupts.
------------------------------------------
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 callingthe
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8) just after the
SysTick_Config() function call. The SysTick_CLKSourceConfig() is defined
inside the 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_cm3.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
如果我们需要配置1ms延时,V3.5版本只需要调用一个函数即可,而且参数也只有一个重载值,相比V2.0版本来说要简单许多,现在来仔细阅读一下说明,SysTick_Config函数是如何配置SysTick的,首先重载值有参数提供,将SysTick中断优先级设置为最低优先级,时钟配置为HCLK,使能SysTick中断,开启SysTick,也就是说这个函数默认开启了中断,因此我们就无法再使用查询方式来进行延时,如果你真要用,那就只能使用寄存器方式了,这样就未免让人觉得不舒服了.当然ST的工程师还留给了我们一个改变SysTick时钟源的函数SysTick_CLKSourceConfig(定义在misc.c中),可以将时钟源频率改为HCLK一分频或者是八分频,还告诉我们如何更改SysTick的中断优先级通过调用NVIC_SetPriority函数,我想这应该是属于法外开恩了吧.此外ST的工程师们还清楚明了的告诉了我们如何填重载值,重载值=时钟频率(Hz)x 延时时间(s).
比如说要产生1ms的延时,则我们就调用SysTick_Config(SystemCoreClock/1000);即可.
同时也给出了延时的方法:
/**
*@brief Inserts a delay time.
*@param nTime: specifies the delay timelength, in milliseconds.
*@retval None
*/
void Delay(__IO uint32_t nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}
我们可以在中断函数中写nTime—即可
void SysTick_Handler(void)
{
nTime--;
}
这样子就实现了nTime毫秒的延时.
- V3.5库函数下SysTick的学习使用
- STM32 v3.5固件库systick ms延时
- STM32 v3.5固件库systick ms延时
- Linux下mysql库函数的使用
- Linux下使用库函数
- 常用库函数的学习
- 在Linux下如何使用自己的库函数
- 在Linux下如何使用自己的库函数
- Linux下的termios库函数使用和密码实现
- STM32学习笔记——使用SysTick定时器做延时
- ctime库函数的使用
- readline库函数的使用
- ctime库函数的使用
- 库函数的使用
- ctime库函数的使用
- ctype库函数的使用
- mysql库函数的使用
- STM32之SysTick学习
- C#日期格式转换大全
- SEO外链的数量与质量哪个更重要
- 类似百度文库在线预览文档flash swf文库预览
- 从头到尾彻底理解傅里叶变换算法、下
- ICE for NAT
- V3.5库函数下SysTick的学习使用
- 注释驱动的 Spring cache 缓存介绍
- PeopleSoft笔记 - 客户端下几个重要的exe文件
- 探究SEO内优高手的密招
- JSP中获取当前访问URL、URL参数等信息的小结
- udhcpc和udhcpd移植
- 如何迎合搜素引擎优化
- shell脚本中cd无法切换目录
- 命运是一只沦落在鸡窝里的鹰