FreeRTOS シリーズ 2: FreeRTOS システム構成

configSYS ティック_CLOCK_HZ

ARM Cortex-M ポートのみのオプションのパラメータ。

ARM Cortex-M ポートは、デフォルトで Cortex-M Sys ティック タイマーから RTOS ティック割り込みを生成します。ほとんどの Cortex-M MCU は、MCU 自体と同じ周波数で SysTick タイマーを実行します。その場合、configSYSTICK_CLOCK_HZ は必要なく、未定義のままにする必要があります。SysTick タイマーの周波数が MCU コアと異なる場合は、configCPU_CLOCK_HZ を通常の MCU クロック周波数に設定し、configSYSTICK_CLOCK_HZ を SysTick クロック周波数に設定する必要があります。

このパラメータは、 STM32f103 ソース コードのFreeRTOSConfig.hで設定されます。

このパラメータは SysTick クロック周波数を表します。これは、時間厳守アトムの STM32F103 と STM32F407 のソース コードで異なる設定があります。

システムクロック設定プロセスを見てみましょう
STM32F407 には、異なるクロック信号を生成する 2 つの PLL があります。ここでは主にメイン PLL クロックについて説明します。メイン PLL クロックのクロックソースには、前述の HIS 信号と HSE 信号の 2 つの信号があります。PLL は、これら 2 つの信号の周波数を逓倍および分周することで、より高い周波数のクロック信号を実現します。一般に、HIS および HSE のクロック周波数が低いため、SYSCLK はシステム クロックとして HIS クロックおよび HSE クロックを選択せず​​、メイン PLL によって生成されたクロックがシステム クロックとして使用されるのが一般的ですメインPLLの内部構成ブロック図を見てみましょう。

この図から、PLL には 2 つの主なクロック ソース (HSE クロック信号と HIS クロック信号) があることがわかります。このうち、PLL_M、PLL_N、PLL_P、PLL_Qは分周器であり、PLL_Mは周波数逓倍器である。図の PLL_N 以降のクロック信号が PLL_VCO であり、PLL が外部クロック信号 HSE をクロック ソースとして使用すると仮定します。すると以下のような関係が成り立ちます。

PLL_VCO = (HSE / PLL_M)* PLL_N

 SYSCLK = PLL_VCO/PLL_P

したがって、外部水晶発振器の周波数が決まっている場合は、対応する周波数のシステム クロック SYSCLK を取得するために PLL_M、PLL_N、および PLL_P の係数を決定します。ここで、PLL_M、PLL_N、および PLL_P は複数の組み合わせを持つことができます。対応する条件が満たされている場合。たとえば、STM32F407 の外部水晶発振器が 8M であると仮定すると、システム クロックの最大周波数は 168M であるため、長期間にわたって PLL_M = 8、PLL_N = 336、および PLL_P = 2 を設定できます。168Mクロックを生成します。つまり、SYSCLK = ( 8 /8 ) * 336 / 2 = 168M です。

メイン PLL を設定すると、システムのメイン クロック SYSCLK が得られ、次のステップでは、このクロックを使用して周波数を分周し、各ペリフェラルのクロックを取得できます。

時計の基本概念

1.リアルタイム クロックは、日付と時刻のカウンターによって蓄積されたクロックを指します。通常は 32768Hz、

2. システム クロックは、マイクロコントローラー内のメイン クロックを指し、各モジュールの動作クロックの基礎を提供します。

3. CPU クロックとは、システムクロックを CPU の PLL を通過した後の CPU のクロックに変更することを指します。

HSI は、周波数 8MHz の高速内部クロック、RC 発振器です。 

時間厳守アトム STM32F407-freertos のソース コード内。FreeRTOSConfig.h

ここで SystemCoreClock を右クリックして CPU 周波数を確認します。ここでは 16Mhz です。

ただし、デモビデオのメイン機能には、システムクロック周波数を変更する機能があります

punctual atom STM32F103-freertos.FreeRTOSConfig.h のソースコードでは main 関数では設定されていない CPU クロック周波数が確認できるため、103CPU のクロック周波数はこれです     

SysTick のクロック ソース

まずはSTM32のクロックツリーを見てみましょう

RCC は、8 で分周した AHB クロック (HCLK) を Cortex System Timer (SysTick) 外部クロックに供給します。

SysTick は、このクロックまたは SysTick コントロールおよびステータス レジスタで設定可能な Cortex クロック (HCLK) のいずれかで動作できます。

上記の段落は、SysTick のクロック ソースを HCLK または HCLK の 8 で分周できることを意味します。

特定のものは、「コントロールおよびステータス レジスタ (CTRL)」を設定することで選択できます。

 

遅延中。c

右クリックして定義にジャンプします。パラメータ SysTick_CLKSource_HCLK が渡されます。

HCLK: AHB バス クロック。システム クロック SYSCLK を分周して得られます。通常は分周はなく、システム クロックと同じです。

SysTick->CTRL |= SysTick_CLKSource_HCLK;

BIT2 ビットが 1 に設定されていることを示し、コア クロックがSysTick のクロック ソースとして分周されていないことを示します。

 SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8;

BIT2 の位置が 0 に設定されていることを示し、外部クロック ソースが SysTick クロック ソースとして 8 分周されていることを示します。

SysTick_CLKSource_HCLK システム コア クロック (値は HCLK に置き換わります)

このとき、CPU クロック周波数はシステムクロック周波数と同じです。

punctual atom STM32F103 と 407 では、最初に freertos を移植していないソースコードでは、delay.c がすべてです

	SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);	//选择外部时钟  HCLK/8
	fac_us=SystemCoreClock/8000000;				//为系统时钟的1/8  

このとき、システムクロック周波数はCPUクロック周波数の1/8となります。

freertos移植後のstm32f103の設定ではSysTickのクロックソースとして分周なしのコアクロックを使用するようになり、この際SystemCoreClockの周波数を取得するためにSystemCoreClock/8を使用する必要がなくなりました。つまり、 fac_us=SystemCoreClock/8/1000000; から fac_us=SystemCoreClock/1000000; になります。   

//初始化延迟函数
//SYSTICK的时钟固定为AHB时钟,基础例程里面SYSTICK时钟频率为AHB/8
//这里为了兼容FreeRTOS,所以将SYSTICK的时钟频率改为AHB的频率!
//SYSCLK:系统时钟频率
void delay_init()
{
	u32 reload;
	SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);//选择外部时钟  HCLK
	fac_us=SystemCoreClock/1000000;				//不论是否使用OS,fac_us都需要使用
	reload=SystemCoreClock/1000000;				//每秒钟的计数次数 单位为M  
	reload*=1000000/configTICK_RATE_HZ;			//根据configTICK_RATE_HZ设定溢出时间
												//reload为24位寄存器,最大值:16777216,在72M下,约合0.233s左右	
	fac_ms=1000/configTICK_RATE_HZ;				//代表OS可以延时的最少单位	   

	SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk;   	//开启SYSTICK中断
	SysTick->LOAD=reload; 						//每1/configTICK_RATE_HZ秒中断一次	
	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;   	//开启SYSTICK    
}								    

 これで、いつコメントするかを理解できるようになりました

重要な点は、Delay.c ファイル関数のシステム ティック タイマーの周波数がコア クロック周波数と同じかどうかを観察することですが、 Atom は便宜上周波数分割を選択しません。そのため、現時点ではその文をコメントするか削除してください。 。

おすすめ

転載: blog.csdn.net/qq_51519091/article/details/131363918