Вторая серия FreeRTOS: конфигурация системы FreeRTOS

configSYS tick_CLOCK_HZ

Необязательный параметр только для порта ARM Cortex-M.

Порт ARM Cortex-M по умолчанию генерирует тактовое прерывание RTOS из таймера тика Cortex-M Sys. Большинство микроконтроллеров Cortex-M запускают таймер SysTick с той же частотой, что и сам микроконтроллер, если это так, то configSYSTICK_CLOCK_HZ не нужен и должен оставаться неопределенным. Если частота таймера SysTick отличается от частоты ядра MCU, то configCPU_CLOCK_HZ следует установить на обычную тактовую частоту MCU, а configSYSTICK_CLOCK_HZ — на тактовую частоту SysTick.

Этот параметр задается в FreeRTOSConfig.h в исходном коде STM32f103.

Этот параметр представляет тактовую частоту SysTick, которая имеет разные настройки в исходном коде STM32F103 и STM32F407 пунктуального атома.

Давайте посмотрим на процесс установки системных часов.STM32F407
имеет два PLL для генерации разных тактовых сигналов. Здесь мы в основном обсуждаем основные часы PLL. Источник тактового сигнала основного тактового сигнала PLL имеет два сигнала, а именно сигнал HIS и сигнал HSE, упомянутые выше. PLL достигает более высокой частоты тактового сигнала путем умножения и деления частоты этих двух сигналов. Вообще говоря, поскольку тактовые частоты HIS и HSE низкие, SYSCLK обычно не выбирает часы HIS и часы HSE в качестве системных часов, а часы, генерируемые основным PLL, обычно используются в качестве системных часов . Давайте взглянем на блок-схему внутренней структуры основного PLL.

Из рисунка видно, что есть два основных источника тактовых импульсов PLL: тактовый сигнал 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

Следовательно, если частота внешнего кварцевого генератора определена, то определите коэффициенты PLL_M, PLL_N и PLL_P, чтобы получить системный тактовый сигнал SYSCLK соответствующей частоты, где PLL_M, PLL_N и PLL_P могут иметь несколько комбинаций, пока по мере выполнения соответствующих условий. Например, предположив, что внешний кварцевый генератор равен 8M, для STM32F407 максимальная частота системных часов составляет 168M, тогда можно установить PLL_M = 8, PLL_N = 336 и PLL_P = 2 соответственно. Чтобы сгенерировать часы 168M. То есть SYSCLK = (8/8) * 336/2 = 168M.

Настроив основной PLL, мы получаем основной тактовый сигнал SYSCLK системы.На следующем шаге мы можем использовать этот тактовый сигнал для деления частоты, чтобы получить тактовый сигнал каждого периферийного устройства.

Основные понятия о часах

1. Часы реального времени относятся к часам, накопленным счетчиком даты и времени, обычно 32768 Гц,

2. Системные часы относятся к основным часам внутри микроконтроллера , которые обеспечивают основу для рабочих часов каждого модуля.

3. Часы ЦП относятся к изменению системных часов на часы ЦП после прохождения через PLL ЦП.

HSI — это высокоскоростные внутренние часы, RC-генератор с частотой 8 МГц. 

В исходниках пунктуального атома STM32F407- freertos.FreeRTOSConfig.h

Щелкните правой кнопкой мыши SystemCoreClock, чтобы узнать частоту процессора, здесь 16 МГц.

Но в основной функции демо-ролика есть функция, которая изменит системную тактовую частоту

В исходниках точечного атома STM32F103-freertos.FreeRTOSConfig.h можно увидеть тактовую частоту процессора, которая не задана в основной функции, поэтому тактовая частота 103CPU такая     

Источник часов для SysTick

Давайте сначала посмотрим на дерево часов STM32.

RCC передает внешним часам системного таймера Cortex (SysTick) часы AHB (HCLK), разделенные на 8.

SysTick может работать либо с этими часами, либо с часами Cortex (HCLK), которые настраиваются в регистре управления и состояния SysTick.

Вышеприведенный абзац означает, что источник синхронизации SysTick может быть разделен на 8 HCLK или HCLK,

Конкретный можно выбрать, настроив «Регистр управления и состояния (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.

SysTick_CLKSource_HCLK часы ядра системы, где значение заменяет HCLK

В это время тактовая частота ЦП совпадает с тактовой частотой системы.

В точечном атоме STM32F103 и 407, в исходниках, которые не пересадили фриртос в начале, delay.c есть все

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

В это время тактовая частота системы составляет 1/8 тактовой частоты ЦП.

После пересадки freertos настройка stm32f103 использует тактовую частоту ядра без разделения по частоте в качестве источника тактовой частоты SysTick.В настоящее время больше нет необходимости использовать SystemCoreClock/8 для получения частоты SystemCoreClock. То есть с 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 не выбирает частотное деление для удобства, поэтому просто прокомментируйте или удалите это предложение в это время. .

Acho que você gosta

Origin blog.csdn.net/qq_51519091/article/details/131363918
Recomendado
Clasificación