Страница 1 из 1
Не пойму, как тактируется systick
Добавлено: Вс ноя 22, 2015 12:48:38
Карась
Всем привет!
Ребята, объясните, пожалуйста, мне тупому: откуда берётся тактирование таймера systick у STM32F407 (плата Discovery)?
Вот код:
Код: Выделить всё
#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#define LED GPIO_Pin_14
#define TEST GPIO_Pin_7
void initGPIO(void)
{
GPIO_InitTypeDef port;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOC, ENABLE);
port.GPIO_Pin = LED;
port.GPIO_Mode = GPIO_Mode_OUT;
port.GPIO_OType = GPIO_OType_PP;
port.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &port);
port.GPIO_Pin = TEST;
GPIO_Init(GPIOC, &port);
}
void SysTick_Handler(void)
{
static uint32_t count = 0;
count++;
if (count == 200) {
GPIO_ToggleBits(GPIOD, LED);
count = 0;
}
GPIO_ToggleBits(GPIOC, TEST);
}
int main()
{
if(SysTick_Config(1000000))
for (;;);
initGPIO();
for (;;);
}
Здесь в обработчике прерывания я мигаю светодиодом на PD14, но на это можно не смотреть - это так, для красоты.
Интересное в последней строке обработчика. Здесь я дёргаю PC7 и вот что получается: Цепляю на PC7 осциллограф и вижу импульсы длительностью 22.5 МСек, то есть частота переключения PC7 равна 44.4 Гц, стало быть, с учётом величины, передаваемой в функцию SysTick_Config, получается, что на вход systick-а поступает частота 44.4 МГц. Вопрос: откуда такая величина берётся? Или я что-то не так понял?
Re: Не пойму, как тактируется systick
Добавлено: Вс ноя 22, 2015 14:25:30
IfoR
По умолчанию systick тактируется от частоты шины AHB (SYSCLK), поделённой на 8. Но тактирование можно переключить напрямую от шины AHB без деления. Данный функционал устанавливается в регистре STK_CTRL 2-й бит (CLKSOURCE). Наверное, таким кодом можно переключиться на тактирование от системной частоты:
Должно быть, в драйвере есть свои функции для конфигурирования systick (ну не люблю я их, потому не знаю).
За подробностями можно посмотреть документацию на ядро Cortex M4:
http://www.st.com/web/en/resource/techn ... 046982.pdfP.S. Кстати, при расчёте на 180 МГц тактовой частоты, частота вызова прерывания в таком случае составляет 22,5 Гц (полупериод выходного сигнала 44,4 мс), что в два раза меньше измеренного тобой и одновременно подозрительно равно до наоборот. Не спутаны ли частота с периодом?
Re: Не пойму, как тактируется systick
Добавлено: Пн ноя 23, 2015 09:57:58
Карась
Вот что показывает осциллограф:

Длительность развёртки 5Мс/дел.
Re: Не пойму, как тактируется systick
Добавлено: Пт ноя 27, 2015 11:45:27
Карась
Прошу прощения, я напутал: Длительность импульса не 22.5, а примерно 18 мс (не 4 с половиной, а 3 с чем-то клеточки), т.е. частота переключений ноги PC7 получается примерно 28 Гц. Всё равно непонятно, откуда берётся такое значение.
Re: Не пойму, как тактируется systick
Добавлено: Пт дек 27, 2024 20:37:38
maksimdag0
Доброго дня! тема давно закрыта, у меня сейчас тоже возникла проблема с systick.
Когда я так тирую с внутреннего генератора(16мгц), то systick работает нормально, а то есть обработчик исключения systick вызывается каждые 1 ms, и для визуального теста реализовал мигания светодиода в 1 секунду.
Когда я переключения генератор тактирования на кварц, и устанавливаю тоже 16мгц(для теста) то светодиод мигает уже с промежутком в 3 секунды. проверял все. инициализацию регистров systick, меня значениях в них и тд, но все равно так работает. Регистр значение(systick->LOAD) устанавливаю верное значение(15999 для частоты 16мгц). не понимаю почему он себя, кто с таким сталкивался? Вот прям так и кажется что проблема какая-то мелачевая, а найти ее не смог
Re: Не пойму, как тактируется systick
Добавлено: Сб дек 28, 2024 08:19:10
HardWareMan
maksimdag0, можно вместо систика просто подёргать ногой в узком цикле и оценить, чему равен SYSCLK, ведь SYSTICK питается от него. Может у вас тактовое дерево настроено не так, может через ПЛЛ пропускаете но не настраиваете.
Re: Не пойму, как тактируется systick
Добавлено: Сб дек 28, 2024 09:11:38
maksimdag0
HardWareMan писал(а):maksimdag0, можно вместо систика просто подёргать ногой в узком цикле и оценить, чему равен SYSCLK
Если я правильно понял, вы предлагаете сделать дергание ногой в основном цикле while? Если да, разве таким обраом мы сможем осцилографом, на этой ножке, измерить частоту cpu?
Re: Не пойму, как тактируется systick
Добавлено: Сб дек 28, 2024 09:28:49
Cheeseman
Скинь инициализацию свою + что за мк
Re: Не пойму, как тактируется systick
Добавлено: Сб дек 28, 2024 11:31:35
maksimdag0
Микроконтроллер - STM32F407VET6.
Проект создавал в CubMX. Проект почти пустой, подключил только кварц, настроил два вывода на выход и инициализировал таймер 1 и все. Скриншоты инициализации и файл main прикалдываю во вложениях.
Светодиод должен моргать с промежтком в 1 секунду, а моргает с промежутком 3 секунды.
Продублирую функцию main, здесь в тексте:
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM1_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim1);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
SystemCoreClockUpdate();//проверка текущей тактовой частоты cpu
while (1)
{
HAL_GPIO_WritePin(GPIOA, LED_1_Pin, GPIO_PIN_RESET);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOA, LED_1_Pin, GPIO_PIN_SET);
HAL_Delay(1000);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
Добавлено after 1 minute 29 seconds:
Изенил немного инициализаю, поставил частоту 25Мгц, соотвественно и регистр SysTick->LOAD = 24999. Но проблема все равно остается, причем точно такая же, то есть диод мигает каждые 3 секунды, а не 1 секунду.
Инициализацию приложил
Re: Не пойму, как тактируется systick
Добавлено: Сб дек 28, 2024 11:54:09
Adrift
[uquote="maksimdag0",url="/forum/viewtopic.php?p=4665235#p4665235"]Изенил немного инициализаю, поставил частоту 25Мгц[/uquote]
Для начала у вас кварц точно на 25MHz?
Re: Не пойму, как тактируется systick
Добавлено: Сб дек 28, 2024 12:29:28
maksimdag0
Это начало и конец

. Кварц на отладочной плате действительно стоит на 8мгц. В этом была причина.
Спасибо))
Re: Не пойму, как тактируется systick
Добавлено: Сб дек 28, 2024 12:54:13
HardWareMan
maksimdag0, 25/8=3,125 и есть.
PS:
[uquote="Карась",url="/forum/viewtopic.php?p=2554689#p2554689"]Всем привет!
Ребята, объясните, пожалуйста, мне тупому:
откуда берётся тактирование таймера systick у STM32F407 (плата Discovery)?[/uquote]
Ответ одной картинкой:
