野火电子论坛

 找回密码
 注册

扫一扫,访问微社区

查看: 73|回复: 2

[F1-指南者] 刚写的systick中断延时发给大家看看,请多指教。

[复制链接]
发表于 2020-3-22 17:35:20 | 显示全部楼层 |阅读模式
/*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);
}
}

回复

使用道具 举报

发表于 2020-3-22 20:15:14 | 显示全部楼层
全局变量定义是用extern还是static?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-22 21:51:10 | 显示全部楼层
在所有函数外部定义的变量称为全局变量。
static修饰全局变量:无法被同一工程其他源文件访问,需要头文件。
extern修饰全局变量:可被同一工程其他源文件访问。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

野火电子公众号

手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号-2 大学生ARM嵌入式2群

GMT+8, 2020-4-4 09:39 , Processed in 0.171974 second(s), 28 queries , Gzip On.

野火电子论坛

© 2014-2016 www.firebbs.cn

快速回复 返回顶部 返回列表