0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

stm32任務(wù)調(diào)度和管理

汽車玩家 ? 來源:CSDN ? 作者:CSDN ? 2021-07-23 09:22 ? 次閱讀

STM32F103ZE的AHB時鐘為72MHz,通過HSE的8M倍頻到72M,然后APB1預(yù)分頻系數(shù)為2,所以TIM2-7時鐘為2*36M。由于定時器是16位,PSC寄存器最大為65536,不支持71999,所以只能以0.1ms計數(shù)。

整個系統(tǒng)在獲取時間的累增時,定義64位變量,即可運行很久的時間,不用擔(dān)心溢出或者死機。定義64位變量有2個方法,一就是用long long 直接定義,通過sizeof測試為8個字節(jié);二就是利用”stdint.h”,typedef uint64_t u64。

一般情況下,定時器計時結(jié)果算法公式為:Tout = (ARR+1)(PSC+1)/Tclk。Tclk即為時鐘頻率。

準(zhǔn)備工作

  • 1)建立一個struct

typedef struct{

void (*fTask)(void);

u32 uNextTick;

u32 uLenTick;

}sTask;

1

2

3

4

5

  • 2)任務(wù)列表

static sTask mTaskTab[] =

{

{Task_SysTick, 0, 0} ,

{Task1, 0, 100} , // 10ms執(zhí)行一次

{Task2, 0, 200} // 200ms執(zhí)行一次

};

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)任務(wù)執(zhí)行期間獲取系統(tǒng)時間

在這里插入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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 定時器
    +關(guān)注

    關(guān)注

    23

    文章

    3259

    瀏覽量

    115912
  • 時鐘頻率
    +關(guān)注

    關(guān)注

    0

    文章

    50

    瀏覽量

    20490
  • HSE
    HSE
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    9528
收藏 人收藏

    評論

    相關(guān)推薦

    AGV監(jiān)控與任務(wù)管理系統(tǒng)設(shè)計

    AGV在智能物流中核心,助力工業(yè)4.0和中國制造2025。AGV管理監(jiān)控調(diào)度系統(tǒng)實時監(jiān)控、任務(wù)管理、路徑規(guī)劃,確保高效便捷。AGV市場前景廣闊,解決人口紅利喪失、勞動力成本上升等問題,
    的頭像 發(fā)表于 03-05 12:10 ?72次閱讀
    AGV監(jiān)控與<b class='flag-5'>任務(wù)</b><b class='flag-5'>管理</b>系統(tǒng)設(shè)計

    車隊運營調(diào)度管理系統(tǒng)

    車隊運營調(diào)度管理系統(tǒng)作為無人駕駛車隊的云端大腦,承擔(dān)了打通業(yè)務(wù)層和無人駕駛車隊的重任。經(jīng)緯恒潤車隊運營調(diào)度管理系統(tǒng)包含業(yè)務(wù)對接、車輛調(diào)度、作
    的頭像 發(fā)表于 01-09 10:25 ?519次閱讀
    車隊運營<b class='flag-5'>調(diào)度</b><b class='flag-5'>管理</b>系統(tǒng)

    基于Flexus X加速MySQL鏡像搭建XXL-JOB任務(wù)調(diào)度平臺

    隨著云計算技術(shù)的飛速發(fā)展,F(xiàn)lexus 云服務(wù)器 X 憑借其高性能和高可用性,成為了眾多企業(yè)和開發(fā)者的首選。本文旨在通過搭建基于 Flexus X 加速 MySQL 鏡像的 XXL-JOB 任務(wù)調(diào)度
    的頭像 發(fā)表于 12-29 15:45 ?243次閱讀
    基于Flexus X加速MySQL鏡像搭建XXL-JOB<b class='flag-5'>任務(wù)</b><b class='flag-5'>調(diào)度</b>平臺

    負(fù)載管理器的主要功能

    負(fù)載管理器(Load Manager)是計算機系統(tǒng)中的一個關(guān)鍵組件,它負(fù)責(zé)分配和管理計算資源,以確保系統(tǒng)運行的效率和穩(wěn)定性。負(fù)載管理器的主要功能包括任務(wù)
    的頭像 發(fā)表于 10-10 11:26 ?510次閱讀

    ESP32C3任務(wù)執(zhí)行一段時間,會出現(xiàn)任務(wù)不運行的問題,為什么?

    ESP32C3任務(wù)執(zhí)行一段時間,會出現(xiàn)任務(wù)不運行的問題, 不運行的任務(wù)優(yōu)先級低,并且任務(wù)的延時時間為vTaskDelay(100/ portTICK_PERIOD_MS);
    發(fā)表于 06-05 07:23

    鴻蒙開發(fā)接口資源調(diào)度:【@ohos.workScheduler (延遲任務(wù)調(diào)度)】

    開發(fā)者在開發(fā)應(yīng)用時,通過調(diào)用延遲任務(wù)注冊接口,注冊對實時性要求不高的延遲任務(wù),該任務(wù)默認(rèn)由系統(tǒng)安排,在系統(tǒng)空閑時根據(jù)性能、功耗、熱等情況進(jìn)行調(diào)度執(zhí)行。
    的頭像 發(fā)表于 06-04 10:01 ?1076次閱讀
    鴻蒙開發(fā)接口資源<b class='flag-5'>調(diào)度</b>:【@ohos.workScheduler (延遲<b class='flag-5'>任務(wù)</b><b class='flag-5'>調(diào)度</b>)】

    請問CMSIS-RTOS RTX的任務(wù)調(diào)度鎖在哪里?

    請問一下,CMSIS-RTOS RTX的任務(wù)調(diào)度鎖在哪里?謝謝!
    發(fā)表于 05-13 08:28

    淺析FreeRTOS任務(wù)調(diào)度器的三種調(diào)度算法和應(yīng)用

    FreeRTOS在MCU領(lǐng)域應(yīng)用非常廣泛,今天就給大家講解一下FreeRTOS調(diào)度器中的三種調(diào)度算法,以及在瑞薩RZ/T2L MPU中的應(yīng)用。
    的頭像 發(fā)表于 05-10 14:02 ?8139次閱讀
    淺析FreeRTOS<b class='flag-5'>任務(wù)</b><b class='flag-5'>調(diào)度</b>器的三種<b class='flag-5'>調(diào)度</b>算法和應(yīng)用

    STM32CubeMX中的FreeRTOS創(chuàng)建3任務(wù)無法運行的原因?

    STM32CubeMX中的FreeRTOS 創(chuàng)建3任務(wù) Task Priority =osPrioirityNoral 等級的任務(wù),無法運行。 如果創(chuàng)建2個任務(wù)就可以。2個以上都不行
    發(fā)表于 05-09 07:02

    Windows 11任務(wù)管理器將CPU性能單位調(diào)整為MT/s

    以前,電腦內(nèi)存的傳輸速度通常用MHz(兆赫茲)來衡量,即每秒能進(jìn)行的循環(huán)次數(shù),如3200MHz表示每秒可進(jìn)行32億次循環(huán)。然而,隨著新技術(shù)的發(fā)展,DDR內(nèi)存能夠在不提升時鐘頻率(MHz)的前提下提高數(shù)據(jù)傳輸速率,這使得傳統(tǒng)的計算方式不再準(zhǔn)確。
    的頭像 發(fā)表于 05-07 15:08 ?2185次閱讀

    智慧園區(qū):構(gòu)建安全調(diào)度和預(yù)警管理系統(tǒng)

    隨著科技的快速發(fā)展,智慧園區(qū)逐漸成為現(xiàn)代城市發(fā)展的熱門話題。智慧園區(qū)以其先進(jìn)的技術(shù)和創(chuàng)新的管理模式,為企業(yè)和居民提供更高效、便捷的服務(wù)。在智慧園區(qū)中,安全調(diào)度和預(yù)警管理是一項至關(guān)重要的任務(wù)
    的頭像 發(fā)表于 05-06 16:40 ?626次閱讀
    智慧園區(qū):構(gòu)建安全<b class='flag-5'>調(diào)度</b>和預(yù)警<b class='flag-5'>管理</b>系統(tǒng)

    智慧園區(qū)安全調(diào)度管理都有哪些

    園區(qū)當(dāng)中極為重要的一點,安全調(diào)度也格外的受大家重視。 今天,古河云科技小編就來給大家說一說智慧園區(qū)安全調(diào)度管理都有哪些: 指揮調(diào)度平臺涵蓋了設(shè)備告警、快速定位、人員
    的頭像 發(fā)表于 04-28 15:13 ?382次閱讀
    智慧園區(qū)安全<b class='flag-5'>調(diào)度</b><b class='flag-5'>管理</b>都有哪些

    STM32F103VE運行的STM32CubeMX生成的freertos工程,F(xiàn)reeRTOS堆棧設(shè)置導(dǎo)致任務(wù)不執(zhí)行切換怎么解決?

    TASK1任務(wù)堆棧更改為128的話,就不執(zhí)行任務(wù)切換,只有TASK1的任務(wù)在運行 代碼如下 #define START_TASK_PRIO 1 #define START_STK_SIZE128
    發(fā)表于 04-26 07:51

    STM32F103 FreeRTOS任務(wù)調(diào)度異常的原因?

    ) { vTaskDelay(500); //延時函數(shù)(任務(wù)調(diào)度) printf(\"Task1rn\");//串口打印 } } void Task2_Task(void
    發(fā)表于 04-16 06:24

    FreeRTOS任務(wù)調(diào)度器的三種調(diào)度算法講解(下)

    配置如下時,調(diào)度算法就會變成不帶時間片的搶占式調(diào)度
    的頭像 發(fā)表于 03-21 13:46 ?3548次閱讀
    FreeRTOS<b class='flag-5'>任務(wù)</b><b class='flag-5'>調(diào)度</b>器的三種<b class='flag-5'>調(diào)度</b>算法講解(下)