OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5757|回复: 2

发一个我做的stm32多定时器,欢迎拍砖

[复制链接]

9

主题

147

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
376
金钱
376
注册时间
2012-11-7
在线时间
35 小时
发表于 2013-1-29 09:42:26 | 显示全部楼层 |阅读模式

delay.c文件
#include "stm32f10x.h"
#include "delay.h"

u32 T_ok=0;//T0~T7为1ms定时时基OK,T8~T15为10ms定时时基OK,T16~T23为100ms定时时基OK,T24~T31为1s定时时基OK
u8 f_1ms_ok=0;//
u16 T_now[32]={0};//将数组元素的高位定义为定时完成标志位,后面的15位定义为延时过去的时间,
//注意1、延时计数范围在1~32767之间;
//2、如果计数值超出这个范围,取下一个定时期间的定时器
//3、如果(T_now & 0x8000)==0x8000,表明设定的定时时间到;

void Stick_Init(void)//SysTick初始化
{
//SystemCoreClock/100 10ms中断一次
//SystemCoreClock/200 5ms中断一次
//SystemCoreClock/1000 1ms中断一次
//SystemCoreClock/100000 10us中断一次
//SystemCoreClock/1000000 1us中断一次
if(SysTick_Config(SystemCoreClock/1000))
{
while(1);
}
else
SysTick->CTRL |=SysTick_CTRL_ENABLE_Msk;//开systick中断使能
}

void T(u8 i,u16 delay_num)//定时器函数,注意i不能大于31,delay_num不能大于32767
{
if((T_now & 0x8000)!=0x8000)
{
if((T_ok & (1<<i))==(1<<i))//时基时间到
{
T_ok &=~(1<<i);
if(delay_num>T_now)
T_now++;
else
T_now=0x8000;
}
}
}

void Init_T(u8 i)//定时器初始化,注意i不能大于31
{
T_now=0;
}

void tick_interrupt(void)//SysTick中断函数中调用的函数
{
static u16 t_num=0;
T_ok |=0x000000ff;//1ms
t_num++;
f_1ms_ok=0xff;
if(t_num % 10==0)
T_ok |=0x0000ff00;//10ms
if(t_num % 100==0)
T_ok |=0x00ff0000;//100ms
if(t_num % 1000==0)
{
T_ok |=0xff000000;//1s
t_num=0;
}
}

delay.h文件
#ifndef __DELAY_H
#define __DELAY_H

extern void Stick_Init(void);
extern void T(u8 i,u16 delay_num);
extern void tick_interrupt(void);
extern void Init_T(u8 i);

extern u8 f_1ms_ok;
extern u16 T_now[32];

#endif

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-1-29 10:26:52 | 显示全部楼层
回复 支持 反对

使用道具 举报

3

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2012-5-17
在线时间
3 小时
发表于 2013-9-14 21:59:08 | 显示全部楼层
这个挺特别的,好好看看。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-13 04:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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