0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

stm32任务调度和管理

汽车玩家 来源:CSDN 作者:CSDN 2021-07-23 09:22 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

STM32F103ZE的AHB时钟为72MHz,通过HSE的8M倍频到72M,然后APB1预分频系数为2,所以TIM2-7时钟为2*36M。由于定时器是16位,PSC寄存器最大为65536,不支持71999,所以只能以0.1ms计数。

整个系统在获取时间的累增时,定义64位变量,即可运行很久的时间,不用担心溢出或者死机。定义64位变量有2个方法,一就是用long long 直接定义,通过sizeof测试为8个字节;二就是利用”stdint.h”,typedef uint64_t u64。

一般情况下,定时器计时结果算法公式为:Tout = (ARR+1)(PSC+1)/Tclk。Tclk即为时钟频率。

准备工作

  • 1)建立一个struct

typedef struct{

void (*fTask)(void);

u32 uNextTick;

u32 uLenTick;

}sTask;

1

2

3

4

5

  • 2)任务列表

static sTask mTaskTab[] =

{

{Task_SysTick, 0, 0} ,

{Task1, 0, 100} , // 10ms执行一次

{Task2, 0, 200} // 200ms执行一次

};

1

2

3

4

5

6

  • 3)初始化定时器

void TaskTimer_Init()

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);

/* Time base configuration */

TIM_TimeBaseStructure.TIM_Period = 65535;

TIM_TimeBaseStructure.TIM_Prescaler = 7199;

TIM_TimeBaseStructure.TIM_ClockDivision = 0;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

TIM_SetCounter(TIM2, 0);

/* TIM enable counter */

TIM_Cmd(TIM2, ENABLE);

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

  • 4)获取启动后时间

u64 GetTimingTick()

{

return TimingTick;

}

1

2

3

4

  • 5)任务执行期间获取系统时间

在这里插入void Task_SysTick()

{

u32 temp = TIM_GetCounter(TIM2);

if(temp > 10000)

{

TIM_SetCounter(TIM2,0);

TimingTickHold = TimingTickHold + temp;

temp = 0;

}

TimingTick = temp + TimingTickHold;

}

1

2

3

4

5

6

7

8

9

10

11

运行实例

#define ARRAYSIZE(a) (sizeof(a)/sizeof((a)[0]))

static sTask mTaskTab[] =

{

{Task_SysTick, 0, 0},

{DATA_HANDLE, 0, 500},//50ms

{Key_Scan, 0, 500}

};

while(1)

{

for(int i = 0;i < ARRAYSIZE(mTaskTab);i++ )

{

if(mTaskTab[i].uNextTick <= GetTimingTick() )

{

mTaskTab[i].uNextTick += mTaskTab[i].uLenTick;

mTaskTab[i].fTask();

}

}

}

文章整合自:CSDN

编辑:ymf

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 定时器
    +关注

    关注

    23

    文章

    3372

    浏览量

    124445
  • 时钟频率
    +关注

    关注

    0

    文章

    74

    浏览量

    21166
  • HSE
    HSE
    +关注

    关注

    0

    文章

    18

    浏览量

    9875
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    一文说透了如何实现单片机的多任务并发!

    任务并发。 一、任务调度 任务调度是多任务并发中一个非常重要的概念。它指的是如何在系统中组织和
    发表于 01-06 06:46

    国内七大基于大模型的发射任务调度与过程保障分系统软件介绍

        七大基于大模型的发射任务调度与过程保障系统    结合公开航天资料、机构技术路线及商业航天实践,可梳理出涵盖国内外典型案例的七大智能发射调度系统及平台。这些系统深度融合大语言模型(LLM
    的头像 发表于 12-24 11:08 391次阅读

    基于大模型的发射任务调度与过程保障分系统平台的应用与未来发展

        基于大模型的发射任务调度与过程保障分系统航天智能化升级核心方案    北京华盛恒辉大模型的发射任务调度与过程保障分系统,是航天领域智能化升级的核心支撑。该系统凭借多源数据融合、
    的头像 发表于 12-24 10:36 363次阅读

    深入Linux内核:进程调度的核心逻辑与实现细节

    在Linux系统中,进程调度就像一位精明的“CPU管理员”——它决定着哪个进程能优先使用CPU,多久切换一次进程,如何平衡系统响应速度与资源利用率。小到桌面应用的流畅点击,大到服务器的多任务并发
    的头像 发表于 12-24 07:05 4556次阅读
    深入Linux内核:进程<b class='flag-5'>调度</b>的核心逻辑与实现细节

    大模型驱动的发射任务智能调度分系统软件平台的应用与未来发展

    大模型驱动的发射任务智能调度分系统平台    作为航天智能化转型的关键支撑,该平台融合多源数据、动态资源调度与大模型智能决策能力,显著提升发射任务的效率、安全性与可靠性。以下从技术架构
    的头像 发表于 12-19 14:50 387次阅读

    大模型ai驱动的发射任务智能调度分系统:功能特点与平台架构解析

        大模型AI驱动的发射任务智能调度分系统:航天智能化核心技术解析    北京华盛恒辉大模型AI驱动的发射任务智能调度分系统作为航天领域智能化升级的关键支撑,通过多源数据整合、动态
    的头像 发表于 12-19 14:10 543次阅读

    嵌入式基础知识-系统调度

    :处于等待态的任务将不能继续执行,它将等待至少一个事件发生。 (a) 触发:一个新任务被设置成就绪状态。 (b) 启动:一个就绪任务调度器选择去执行。 (c) 被抢占:
    发表于 12-16 08:15

    在多任务系统中,如何平衡任务调度以防止因高负载导致的再次进入低功耗模式的延迟?

    在多任务系统中,如何平衡任务调度以防止因高负载导致的再次进入低功耗模式的延迟?
    发表于 12-04 06:37

    freertos关闭任务调度的方法

    #include \"FreeRTOS.h\" #include \"task.h\" /* 关闭任务调度 */ void
    发表于 11-17 06:47

    FreeRTOS任务调度及优先级问题

    大家好,最近本人在学习FreeRTOS ,之前有过一些裸机开发的经验,目前知道了FreeRTOS的任务是基于时间片轮转来调度,也就是知道了任务会基于各个时间片来运行。 于是联想了如果有一些外设芯片
    发表于 11-06 02:18

    【产品介绍】Altair PBS Professional HPC工作负载管理器和作业调度管理系统

    AltairPBSProfessional行业领先的HPC工作负载管理器和作业调度管理系统PBSProfessional是一款快速、强大的工作负载管理器和作业
    的头像 发表于 09-19 17:03 786次阅读
    【产品介绍】Altair PBS Professional HPC工作负载<b class='flag-5'>管理</b>器和作业<b class='flag-5'>调度</b><b class='flag-5'>管理</b>系统

    揭秘LuatOS Task:多任务管理的“智能中枢”

    Task任务作为LuatOS的核心组成部分,通过智能化的任务管理机制,实现任务的创建、调度与协同运行,让复杂应用得以高效并行处理,满足实时场
    的头像 发表于 08-28 13:48 770次阅读
    揭秘LuatOS Task:多<b class='flag-5'>任务管理</b>的“智能中枢”

    快速入门——LuatOS:sys库多任务管理实战攻略!

    在嵌入式开发中,多任务管理是提升系统效率的关键。本教程专为快速入门设计,聚焦LuatOS的sys库,通过实战案例带你快速掌握多任务创建、调度与同步技巧。无论你是零基础新手还是希望快速提升开发效率
    的头像 发表于 05-29 14:36 986次阅读
    快速入门——LuatOS:sys库多<b class='flag-5'>任务管理</b>实战攻略!

    工控一体机多线程任务调度优化:聚徽分享破解工业复杂流程高效协同密码

    任务调度作为工控一体机管理和协调各项任务的关键机制,其优化程度直接关乎工业生产的效率、稳定性与精准度,宛如一把关键钥匙,解锁工业复杂流程高效协同的大门。 工业复杂流程与多线程
    的头像 发表于 05-28 14:06 742次阅读

    安全生产调度管理系统的核心功能模块

    安全生产调度管理系统是运用现代信息技术构建的智能化管理平台,旨在实现生产安全风险的全面管控和应急资源的优化调度。该系统通过整合物联网、大数据、人工智能等前沿技术,建立起覆盖风险监测、预
    的头像 发表于 05-16 15:25 679次阅读