關於STM32F103精確延時

2021-09-25 15:37:59 字數 1184 閱讀 5365

為了相容freertos,所以將延時函式統一規範,後續使用方便移植。此延時針對無晶振,示例為系統倍頻64mhz,型號:stm32f103c8t6。

新建system資料夾,新增兩個檔案,delay.c和delay.h

以下為delay.c內容:其中系統已倍頻為64m

#include "stm32f10x.h"

double fac_us=0;

static rcc_clockstypedef rcc_clocks;

void delay_init()

void delay_us(unsigned int nus)

};

}void delay_ms(unsigned short nms)

以下為delay.h內容

#ifndef _delay_h_

#define _delay_h_

void delay_us(unsigned int nus);

void delay_ms(unsigned short nms);

void delay_init(void);

#endif

以下大體解釋:

1.對於delay_init函式,systick_clksourceconfig(systick_clksource_hclk);這句主要設定systick時鐘源,對於為什麼不能8分頻,主要是為了和freertos統一。

2.rtos統一節拍為1ms,所以延時函式裡沒有額外增加rtos支援,對於ms級延時,直接呼叫作業系統的系統延時。

對於無作業系統呼叫:

void main()

}

其中systick_config()函式,主要是設定裝載值,設定systick時鐘為系統主時鐘,開啟systick中斷。delay_init()函式再次設定了systick時鐘源為主時鐘源。

對於freertos系統呼叫:

void main()

測試:

針對freertos,分別建立兩個任務,分別延時1s來翻轉兩個led,其中任務一,用delay_us(1000000);任務二,用vtaskdelay(1000);測試結果正常,led燈翻轉時間相同。

stm32f103外部中斷

void extix init void 外部中斷0服務程式 void exti9 5 irqhandler void 這是簡單的外部中斷的配置,pc7作為中斷輸入 上面補充io口的初始化 gpio initstructure.gpio mode gpio mode ipu pc6配置為快充指示 1...

STM32F103啟動檔案

目錄 一 概述 二 彙編指令 2.1 equ 2.2 area 2.3 space 2.4 preserve8 2.5 thumb 2.6 export 2.7 dcd 2.8 proc 2.9 ldr 2.10 blx 2.11 bx 2.12 temport 2.13 b 2.14 if,els...

FreeRTOS移植到STM32F103步驟

二 mdk下移植freertos 目前官方提供的最新版本是v9.0.0,freertos原始碼在解壓目錄下的路徑為 freertos v9.0.0rc2 freertos source iar資料夾的內容,裡面都是跟微控制器底層相關的,我們以stm32f103為例,保留arm cm3資料夾即可。ar...