实验内容:配置嘀嗒定时器,产生0.01毫秒的中断,结合中断函数,使LED灯每隔0.25毫秒闪烁一次。
实验目的:熟悉滴答定时器的配置与应用。简单了解一下STM32的时钟结构。
简单介绍:
SysTick定时器被捆绑在NVIC中,用于产生SysTick异常,Cortex-M3在内核部分 包含了一个简单的定时器——SysTick timer。该定时器的时钟源可以是内部时钟(FCLK,CM3上的自由运行时钟),或者是外部时钟( CM3处理器上的STCLK信号)。不过,STCLK的具体来源则由芯片设计者决定,因此不同产品之间的时钟频率可能会大不相同。因此,需要阅读芯片的使用手册来确定选择什么作为时钟源。
在STM32中SysTick 以 HCLK(AHB时钟)或HCLK/8 作为运行时钟。此函数中8分频。
SysTick是一个24位的向下计数定时器。
SysTick_Init() 这个函数,它是由用户在SysTick.c这个文件中实现的,其功能是启动系统滴答定时器SysTick,对嘀嗒定时器进行应用时只需要调用函数SysTick_Config()就可以了,此后SysTick定时器就被开启了。
SysTick_Config()函数,它是属于内核层的Cortex-M3通用函数,位于core_cm3.h文件中。具体配置请参考野火的相关技术文档。
相关代码:
main.c 代码
#include "stm32f10x.h"
#include "gpioledinit.h"
#include "systick.h"
//因为在启动文件中加载了系统时钟配置函数,故此处不再配置时钟
int main(void)
{
Gpio_Led_Init();
SysTick_Init();
while (1);
}
systick.c代码
#include "stm32f10x.h"
unsigned char sys_nub;
void SysTick_Init(void)
{
if (SysTick_Config(90000)) //0.01s 中断一次
{
while (1);
}
}
gpioledinit.c代码
#include "stm32f10x.h"
void Gpio_Led_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOF,&GPIO_InitStructure);
GPIO_SetBits(GPIOF,GPIO_Pin_6 | GPIO_Pin_7 |GPIO_Pin_9 |GPIO_Pin_10 );
}
STM32F10x_it.c中断处理函数代码
void SysTick_Handler(void)
{
sys_nub++;
if(sys_nub==25)
{
GPIO_SetBits(GPIOF,GPIO_Pin_9); //LED1
}
if(sys_nub>49)
{
sys_nub=0;
GPIO_ResetBits(GPIOF,GPIO_Pin_9); //LED1
}
}
STM32学习笔记(Systick)

关键词: STM32 学习 笔记 Systick 时钟 Sy
回复
打赏帖 | |
---|---|
【Zephyr】MCXN947 Zephyr 开发入门适配shell被打赏20分 | |
【我要开发板】6.联合MATLAB记录数据被打赏50分 | |
【瑞萨RA2E1开发板】:使用ADC功能实现位移传感器采集方案被打赏20分 | |
【nRF7002DK】基于sht30的温湿度计被打赏20分 | |
【nRF7002DK】日志打印被打赏20分 | |
rtthread硬件加密-5hash加密分析被打赏10分 | |
【STM32F769】SD卡驱动及其调试经验分享被打赏32分 | |
【分享开发笔记,赚取电动螺丝刀】使用看门狗降低系统隐藏bug触发概率被打赏18分 | |
【STM32F769】调试SD驱动,由于其时钟配置不对引起的错误以及排查记录被打赏35分 | |
【分享开发笔记,赚取电动螺丝刀】MCUXpressoConfigTools配置外设时的异常解决被打赏24分 |