Skocz do zawartości

Sygnały zegarowe i procedura startowa STM32


Mellon

Pomocna odpowiedź

W sumie taki był pierwotny plan... przynajmniej jak chodzi o sygnały zegarowe. Ogólnie kurs powstał ze starszej wersji bazującej na stdperiph, a tam nie było potrzeby zmian ustawień bo domyślnie wszystko działało na 64 MHz. W nowej wersji miała być część o zegarach, ale jakoś się zgubiła.

Masz jakieś konkretne pytania odnośnie sygnałów zegarowych oraz procedury startowej, czy to była tylko taka ogólna uwaga?

Link do komentarza
Share on other sites

Dnia 6.02.2018 o 22:38, DariuszC napisał:

Witam

Nucleo-F103RB bez problemu działa na 72MHz o ile jest w całości z programatorem. Wtedy z niego idzie sygnał taktujący 8MHz do głównego modułu.

W CubeMX trzeba wybrać RCC->High Speed Clock (HSE) -> Bypass Clock Source.

Zresztą w schemacie do Nucleo jest to połączenie.

Natomiast po rozdzieleniu to już tylko HSI lub trzeba wlutować kwarc wraz z kondensatorami.

Pozdrawiam

Zgadza się. Sygnał MCO z programatora jest podłączony do F103RB (poprzez zworki SB16, SB50). Jeśli mikrokontroler programatora(STM32F103CBT6) ma ustawiony MCU na HSE to mamy 8 MHz.

Warto byłoby wiedzieć jak w HAL ustawiane są sygnały zegarowe. Wiem, że najpierw ustawiany jest wewnętrzny zegar HSI potem jak on się poprawnie uruchomi to można zmienić na HSE. Ale warto co na jakiej szynie czym jest taktowane.

Link do komentarza
Share on other sites

W tym kursie podjęliśmy decyzję zostania tylko przy wbudowanym generatorze RC, więc jeśli już to i tak ten brakujący odcinek byłby o uzyskaniu 64MHz za pomocą PLL.

Ponieważ ta dyskusja nie ma związku z GPIO, proponowałbym założyć nowy temat. Inaczej będzie dużo wpisów, niezwiązanych z głównym wątkiem.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Ja bym proponował napisać odcinek kursu. To wszyscy by zrozumieli co i jak. Bez tego to czarna magia będzie dla innych czemu z 72MHz zmieniamy na 8MHz. Jak coś napiszę mogę podesłać.

Link do komentarza
Share on other sites

Tak jak napisałem powyżej - proponuję dyskusję o zegarach wydzielić z GPIO, najlepiej do nowego wątku.

Natomiast nic się z 72MHz nie zamieniło na 8MHz - to właśnie 8MHz jest domyślną konfiguracją, biblioteka HAL w odróżnieniu od stdperiph nie zmienia domyślnych ustawień. Dopiero programista może wybrać jak chce skonfigurować taktowanie procesora i peryferiów. W przypadku generatora wbudowanego maksymalne taktowanie to 64MHz, ale nawet z sygnałem zewnętrznym wcale nie trzeba zawsze ustawiać 72MHz. Warto chociaż wiedzieć, że są inne możliwości.

Link do komentarza
Share on other sites

(edytowany)
#include "stm32f1xx.h"
 
int main(void)
{
    SystemCoreClock = 8000000; // taktowanie 8Mhz
 
    HAL_Init();

Przyznasz, że to dziwna konstrukcja.

Edytowano przez Mellon
Link do komentarza
Share on other sites

Korzystając z rezonatora w programatorze:

HAL_Init();

	RCC_OscInitTypeDef  osc;
	osc.OscillatorType = RCC_OSCILLATORTYPE_HSE;
	osc.HSEState = RCC_HSE_BYPASS;
	osc.HSIState = RCC_HSI_OFF;
	osc.PLL.PLLState = RCC_PLLSOURCE_HSE;
	osc.PLL.PLLMUL = RCC_PLL_MUL9;
	HAL_RCC_OscConfig(&osc);

	RCC_ClkInitTypeDef clk;
	clk.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
			| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
	clk.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
	clk.AHBCLKDivider = RCC_SYSCLK_DIV1;
	clk.APB1CLKDivider = RCC_HCLK_DIV2;
	clk.APB2CLKDivider = RCC_HCLK_DIV1;

	HAL_RCC_ClockConfig(&clk, FLASH_LATENCY_2);

	SystemCoreClockUpdate();

Tylko nie wiem jak sprawdzić częstotliwość rdzenia z jaką on rzeczywiście pracuje?

Link do komentarza
Share on other sites

Mam pytanie dot. przerwań.

W SPL wyglądało to tak:

  1. wybranie grupy priorytetów (jest w HAL_Init())
  2. ustawienie priorytetu i sub-priorytetu, kanału i jego włączenie NVIC_InitStruct :NVIC_Init
  3. Skonfigurowanie GPIO :GPIO_Init
  4. Ustawienie źródła przerwania GPIO_EXTILineConfig
  5. Skonfigurowanie kontrolera zewnętrznych przerwań/zdarzeń (sygnał opadający/rosnący oba): EXTI_Init()
  6. Utworzenie funkcji przerwania.

Jak ustawić priorytety przerwania w HAL?

Link do komentarza
Share on other sites

Domyślam się, że pytasz o HAL_NVIC_SetPriority oraz HAL_NVIC_SetPriorityGrouping - możesz równie dobrze  bezpośrednio używać CMSIS, ale te funkcje powinny pomóc.

Jeśli przeniesiesz poprzedni post dotyczący taktowania do utworzonego wątku to możemy dalej porozmawiać jak używać zewnętrznego generatora oraz PLL.

  • Lubię! 1
  • Pomogłeś! 1
Link do komentarza
Share on other sites

(edytowany)

Dzięki Elvis

Dnia 27.10.2018 o 21:31, Elvis napisał:

Domyślam się, że pytasz o HAL_NVIC_SetPriority oraz HAL_NVIC_SetPriorityGrouping - możesz równie dobrze  bezpośrednio używać CMSIS, ale te funkcje powinny pomóc.

Jeśli przeniesiesz poprzedni post dotyczący taktowania do utworzonego wątku to możemy dalej porozmawiać jak używać zewnętrznego generatora oraz PLL.

Właśnie tego brakowało w kursie o przerwaniach.

Wystarczy pierwsza z nich. Drga służy do wybrania grupy od 1 do 4 (priorytetów i podpriorytetów)

HAL_NVIC_SetPriority(EXTI15_10_IRQn,0,0);
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);

 

Edytowano przez Mellon
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.