设为首页
收藏本站
开启辅助访问
登录
注册
只需一步,快速开始
首页
BBS
在线充值
搜索
工控币获得方法
联系方式
搜索
搜索
本版
帖子
用户
工控论坛
»
首页
›
电子技术
›
STM32/8
›
利用stm32 systic定时器用作时钟基线实现多个定时器定时 ...
返回列表
发新帖
利用stm32 systic定时器用作时钟基线实现多个定时器定时
[复制链接]
1
|
0
|
2020-5-20 23:52:54
|
显示全部楼层
|
阅读模式
systick时钟基线运用,充分利用cpu性能,拒绝延时等浪费cpu时间行为
完整源码:
systick时钟基线运用.7z
(453.11 KB, 售价: 1 工控币)
2020-5-20 23:51 上传
点击文件名下载附件
代码片段:
/*****************************************************************************************************/
SOFT_TMR g_Tmr[COUNT_TIM];
/* cpu运行时间,单位ms */
__IO uint32_t g_iRunTime = 0;
static void Soft_TimerDec(SOFT_TMR *_tmr);
/*
*********************************************************************************************************
* 函 数 名:Systick_Init
* 功能说明:初始化Systick定时器
* 形 参:无
* 返 回 值:无
*********************************************************************************************************
*/
void Systick_Init(void)
{
/* 清零所有的软件定时器 */
memset(g_Tmr,0,COUNT_TIM * sizeof(g_Tmr));
/*
配置systic中断周期,并启动systick中断。
这个函数在 \Libraries\CMSIS\CM3\CoreSupport\core_cm3.h
Systick中断向量在(\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm\
startup_stm32f10x_hd.s 文件中定义为 SysTick_Handler。
SysTick_Handler函数的实现在stm32f10x_it.c 文件。
SysTick_Handler函数调用了SysTick_ISR()函数,在本文件末尾。
*/
SysTick_Config(SystemCoreClock / 1000 * Systick_tim);
}
/*
*********************************************************************************************************
* 函 数 名: SysTick_ISR
* 功能说明:SysTick中断服务程序,在SysTick_Handler中调用
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
void SysTick_ISR(void)
{
static uint8_t s_count = 0;
uint8_t i;
for (i = 0; i < COUNT_TIM; i++)
{
Soft_TimerDec(&g_Tmr[ i]);
}
g_iRunTime += Systick_tim; /* cpu运行时间增Systick_tim*/
if (g_iRunTime >= 0x9A7EC800) /* 30天清零 */
{
g_iRunTime = 0;
}
s_count += Systick_tim;
if (s_count >= 10)
{
s_count = 0;
/*
此处可加入按键的检测。按键检测每隔10ms一次就行了,一般做40ms的滤波处理就可以
有效过滤掉机械动作造成的按键抖动。
*/
// Key_Scan();
}
}
/*
*********************************************************************************************************
* 函 数 名: delay_ms
* 功能说明: ms级延迟,延迟精度为正负1ms
* 形 参:n : 延迟长度,单位 ms。
* 返 回 值: 无
*********************************************************************************************************
*/
void Delay_Ms(int32_t n)
{
// /* 避免 n = 1 出现主程序死锁 */
// if (n <= 1)
// {
// n = 2;
// }
__set_PRIMASK(1); /* 关中断 */
g_Tmr[DELAY_TIM].count = n;
g_Tmr[DELAY_TIM].flag = 0 ;
__set_PRIMASK(0); /* 开中断 */
while (1)
{
CPU_IDLE(); /* 此处是空操作。用户可以定义,让CPU进入IDLE状态,以降低功耗;或实现喂狗 */
/* 等待延迟时间到 */
if (g_Tmr[DELAY_TIM].flag == 1)
{
return;
}
}
}
systick.h中的代码
/*********************************************************************************************/
#define SYSTICK_MODE 0 //0中断模式,1查询模式
/* 软件延时 */
void SoftDelay_Ms(uint16_t nms);
void SoftDelay_Us(uint16_t nus);
/**********************************************中断模式**********************************************/
#if SYSTICK_MODE == 0
/* 目前是空操作,用户可以定义让CPU进入IDLE状态的函数和喂狗函数 */
#define CPU_IDLE()
#define Systick_tim 1 //Systic中断时间(时钟基线),单位:ms
/*
可在此处枚举中增加若干个软件定时器
注意:变量在中断和主程序中同时被访问,有可能造成编译器错误优化,必须增加__IO 即 volatile。
*/
enum enum_tim_id{
DELAY_TIM = 0, //第1个保留给Delay_Ms()使用
USER_TIM1,
USER_TIM2,
USER_TIM3,
COUNT_TIM //软件定时器的个数
};
/* 定时器结构体 */
typedef struct
{
volatile int32_t count; //计数器
volatile uint8_t flag; //定时到达标志
}SOFT_TMR;
/* 供外部调用的函数声明 */
void Systick_Init(void);
void SysTick_ISR(void);
复制代码
systic
,
定时器
,
时钟
,
stm32
相关帖子
•
Labview电子时钟设计课程设计报告
•
labview做的秒表程序
•
LabVIEW电子时钟全套资料下载
•
用labview做的一个简单的数字时间显示
•
STM32+LabVIEW的USB数据采集与显示源程序
•
用labview设计的数字电子时钟
•
VB上位机设置时间 51单片机DS1302时钟的proteus仿真程序
•
基于STM32的通用定时器使用 Proteus仿真程序
•
STM32示波器程序ILI9341_IO模拟源程序+Proteus仿真
•
STM32F407 FLAC软解压 源程序
回复
使用道具
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
路漫漫
194
主题
199
帖子
74
积分
初级会员
初级会员, 积分 74, 距离下一级还需 426 积分
初级会员, 积分 74, 距离下一级还需 426 积分
工控币
74
加好友
发消息
回复楼主
返回列表
电子技术综合讨论
单片机嵌入式
EDA设计仿真
STM32/8
51单片机
上位机开发及系统管理
Labview
Multisim仿真
图文推荐
用Fanuc Karel语言实现三点建坐标系
2021-01-04
用CH341A做的USB转SPI_232_485_TTL转换器 PCB+SCH文件 烧写器源
2020-12-14
51单片机采集温度通过串口发送到labview上位机采集曲线显示
2020-12-13
基于组态王的占空比PID算法温度控制系统设计 含源码和文档
2020-12-13
基于LabVIEW的电动车速度监测和控制系统上位机程序设计
2020-12-08
热门排行
1
哈哈,网站很好,来支持一下
2
6000CHM废气处理EPLAN电气图纸
3
300多个常用的Multisim仿真电路资料分享
4
谁那有施耐德PES软件 本人愿意提供一定积分
5
交通信号灯电子线路实验Multisim仿真电路图
6
Multisim14仿真PIC16f84单片机驱动led
7
基于labview的电子秤
8
哪位大佬能看看logix5571以太网通信故障这
9
WINCC 7.5+SP1+UPD3
10
基于LabVIEW的猜数字游戏