打印

刚写的systick中断延时发给大家看看,请多指教。

[复制链接]
551|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
过期账户|  楼主 | 2020-4-3 21:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*bsp_systick.c*/
#include "bsp_systick.h"
static uint32_t TimingDelay;//全局变量
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
  TimingDelay--;
}
}
void SysTick_Init(uint32_t ticks,uint32_t priority)
{
SysTick->LOAD  = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;//1ms定时周期 ticks=72000
NVIC_SetPriority (SysTick_IRQn, priority);//设置中断优先级 取值为0~15
SysTick->VAL   = 0;//计数器清零
SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk | //配置AHB为时钟
                   SysTick_CTRL_TICKINT_Msk;     //使能中断
}
void SysTick_Delay_ms(uint32_t ms)
{
uint32_t i =0;

TimingDelay = ms;//赋值全局变量

  SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;     //使能计数器

for(i=0; i<ms; i++)
{
  while(TimingDelay != 0)
   ;
}
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;//关计数器
}

/*stm32f10x_it.c*/ //这里不要忘记调用自己写的#include "bsp_systick.h"文件
void SysTick_Handler(void)
{
TimingDelay_Decrement();
}

/*main.c*/
#include "stm32f10x.h"   
#include "bsp_led.h"
#include "bsp_systick.h"

int main()
{
LED_GPIO_Config();
SysTick_Init(72000,0);//定时周期72000/72M=1ms,中断优先级0~15

  LED_G(OFF);
  LED_B(OFF);
  LED_R(OFF);

while(1)
{
  LED_G(OFF);
  SysTick_Delay_ms(100);
  LED_G(ON);
  SysTick_Delay_ms(100);
}
}

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

395

主题

395

帖子

0

粉丝