• Объявления

    • admin

      Просьба всем принять участие!   24.11.2017

      На форуме разыгрывается спектроанализатор Arinst SSA-TG LC (цена 18500 руб). Просьба всем перейти по ссылке ниже и принять участие!

7 сообщений в этой теме

proton8489    0

Дорогие гуру, прошу помощи в освоении SystemCoreClock. Как я понимаю это некая функци в STM32, которая возвращает значение установившейся частоты микроконроллера. Но при прямом использовании IAR ругается на то, что эта функция не объявлена. Конечно можно использовать SPL, но мне крайне необходима максимальная скорость и микрозадержки, поэтому хочется получать значение частоты без SPL и HAL. Спасибо за любую наводку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
Alex    515

Интересно, а как МК может узнать на какой частоте он работает ?
Как Вы себе это представляете ?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
proton8489    0

Возможно и никак, но согласно документации это значение обновляется с помощью функции SystemCoreClockUpdate при изменении частоты тактирования МК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    515

Скорее всего, где-нибудь в каком то модуле имеется обычная статическая переменная, которая с помощью этих функций устанавливается и считывается. Сам по себе МК не может узнать частоту тактирования. 
Чисто теоретически, можно, но для этого нужно иметь ещё одну некую опорную частоту.
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
proton8489    0

Хорошо, допустим. Тогда вопрос такой: я устанавливаю некую частоту МК через PLL, как мне убедиться в том, что она к примеру 72МГц, а не 24, совсем никак?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    515
2 минуты назад, proton8489 сказал:

совсем никак?

 

8 минут назад, Aleх сказал:

Чисто теоретически, можно, но для этого нужно иметь ещё одну некую опорную частоту.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну на самом деле можно считать биты конфигурации и определить состояние делителей / ФАПЧ. Кроме того, в stm32 часто есть дополнительная частота.

Но да, в HAL значение такта определено дефайном при конфигурации и функция вернет дефайн.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

  • Похожие публикации

    • Автор: ToRcH2565
      Добрый день, недавно начал изучать азы STM, и наткнулся на интересную возможность, а именно отправлять текст через отладочный порт:
      https://hubstub.ru/stm32/111-otladka-po-swd-stm32.html  (дабы долго не обьяснять о чем я веду речь, ибо без знания терминов это может затянутся).
      Так вот, столкнулся я с проблемкой, а именно где же можно данные сообщения посмотреть в EmBlocks, отладочные окна пролез все, там не нахожу, возможно нужно ковырять глубже настройки среды? или данная среда не умеет отображать эти сообщения?
      Очень не хотелось бы городить UART для отображение отладочных сообщений...
    • Автор: Motrosoff8888
      Всем привет! Ребят есть вот это STM32F030K6T6 
      вот это, адаптер для прошивки  
      и это, собственно чем прошить. 
      Имеется прошивка, скетч, для двух Atmega328p. Есть пьезоэлементы, которые подсоединены к аналоговому пину, при касании, одна другой передаёт символы через NRF24l01, друга принимает таким же модулем и отправляет данные по блютус HC-05 на телефон.  Хотелось бы перенести её на STM32, не бесплатно конечно но и в рамках разумного. Цель переноса на STM32 - увеличить скорость отклика (задержка между ударом по пьезику и появлением символа в мониторе порта телефона) пьезо! И есть уже адаптер для прошивки МК с 32 ножками. Буду признателен если кто то ответит, можно в ЛС
    • Автор: Motrosoff8888
      Всем привет! Ребят есть вот это STM32F030K6T6 
      вот это, адаптер для прошивки 
      и это, собственно чем прошить. 
      Имеется прошивка для двух Atmega328p. Есть пьезоэлементы, которые подсоединены к аналоговому пину, при касании, одна другой передаёт символы через NRF24l01, друга принимает таким же модулем и отправляет данные по блютус HC-05 на телефон.  Хотелось бы перенести её на STM32, не бесплатно конечно но и в рамках разумного. Цель переноса на STM32 - увеличить скорость отклика (задержка между ударом по пьезику и появлением символа в мониторе порта телефона) пьезо! И есть уже адаптер для прошивки МК с 32 ножками. Буду признателен если кто то ответит, можно в ЛС
    • Автор: saer2
      Добрый!
      Осваиваю стм32.
      Уточните пожалуйста, есть ли описание библиотеки stblib ? 
      как с ней работать?
    • Автор: karomag
      Помогите! Не пойму, почему не работает код. Хотя он был рабочий, пока я что-то не "оптимизировал"...
      // Общие выводы индикатора #define D0 GPIO_Pin_14 #define D1 GPIO_Pin_13 #define D2 GPIO_Pin_12 #define ALL_CATOD ( D0 | D1 | D2 ) // К какой ноге какой сегмент подключен #define SEG_A GPIO_Pin_0 #define SEG_B GPIO_Pin_1 #define SEG_C GPIO_Pin_2 #define SEG_D GPIO_Pin_3 #define SEG_E GPIO_Pin_4 #define SEG_F GPIO_Pin_5 #define SEG_G GPIO_Pin_6 //Собираем цифры из сегментов #define DIG0 ( SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F ) #define DIG1 ( SEG_B | SEG_C ) #define DIG2 ( SEG_A | SEG_B | SEG_G | SEG_E | SEG_D ) #define DIG3 ( SEG_A | SEG_B | SEG_G | SEG_C | SEG_D ) #define DIG4 ( SEG_F | SEG_G | SEG_B | SEG_C) #define DIG5 ( SEG_A | SEG_F | SEG_G | SEG_C | SEG_D ) #define DIG6 ( SEG_A | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G ) #define DIG7 ( SEG_A | SEG_B | SEG_C ) #define DIG8 ( SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G) #define DIG9 ( SEG_A | SEG_B | SEG_C | SEG_D | SEG_F | SEG_G) #define ALL_SEG (DIG8 ) void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; /* GPIOA Configuration:TIM3 Channel1, 2, 3 and 4 as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin = ALL_SEG | ALL_CATOD; GPIO_Init(GPIOA, &GPIO_InitStructure); } void show_temp(void) { u16 tmp; // Содержит копию counter (из него по очереди исключаются последние цифры) u8 digit; // В эту переменную поочередно записываются цифры из которых состоит число counter u16 catods[] = { D0, D1, D2 }; u8 digitsp[] = { DIG0, DIG1, DIG2, DIG3, DIG4, DIG5, DIG6, DIG7, DIG8, DIG9 }; u8 i; tmp = measureT; for (i = 0; i < 3; i++) { if (tmp > 0) { //Вытаскиваем первую справа цифру из числа counter digit = tmp % 10; tmp = tmp / 10; //Выключаем все разряды. 1 на катоды GPIOA->ODR |= ALL_CATOD; //Включаем i разряд индикатора GPIOA->ODR &= ~catods[i]; //Выводим цифру в i разряд GPIOA->ODR &= ~DIG8; //Выключаем все сегменты GPIOA->ODR |= digitsp[digit]; //Зажигаем нужные //Небольшая задержка. Пусть цифра погорит некоторое время delay_ms(1000); } } } Большую задержку поставил, чтобы глазом было видно результат. Число 123 отображается: сначало 33, потом 22, потом 111. Почему загорается несколько разрядов, хотя GPIOA->ODR &= ~catods;?