Ich versuche, mit dem STM32F103C8Tx mit STM32CubeMX einen Takt von 1,4 MHz zu erzeugen.
Zunächst einmal habe ich in meinem Code Pin PB13 als Ausgang und hauptsächlich schalte ich ihn alle zwei Sekunden um. Das funktioniert.
Jetzt der wichtigere Teil. Dinge, die ich in CubeMX eingerichtet habe:
Den generierten Code habe ich in der IDE von OpenSTM32 kompiliert und hochgeladen. Die LED blinkt im eingestellten Intervall, aber ich habe keine Ausgabe an Pin B5 A7 (Timer3 Kanal 2). Dies wird am Oszilloskop überprüft.
Code (Haupt):
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM3_Init();
//These two lines were manually added
HAL_TIM_Base_Start(&htim3);
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);
while (1)
{
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
HAL_Delay(5000);
}
}
Den Rest finden Sie hier .
Im Feld "Counter Period (AutoReload Register - 16 bit value)" (dritte Zeile) müssen Sie eine Periode für den Timer einstellen . Dies bestimmt zusammen mit dem Prescaler (erste Zeile) und der APB1-Frequenz die Timer-Frequenz.
Die Einstellung „Pulse“ für die PWM-Ausgänge bestimmt das Tastverhältnis . Alle PWM-Ausgänge für Timer 3 haben die gleiche Frequenz (die Timer-Frequenz), aber unabhängige Arbeitszykluseinstellungen (eine pro PWM-Ausgang).
Beachten Sie, dass es leicht ist, einzelne Fehler zu machen. Dies gilt sowohl für den Prescaler (z. B. 0 bedeutet geteilt durch 1) als auch für die Timer-Periode. Beispielsweise ist in diesem Beispiel, wo die APB1-Frequenz 48 MHz beträgt, die Frequenz 48 MHz/3/51 = 313,725 kHz (und nicht beispielsweise 48 MHz/3/50 = 320 kHz). Bei der PWM-Einstellung hingegen ist die Einstellung der tatsächliche Effektivwert (nicht +1). Die Arbeitszyklen betragen 45,1 %, 64,7 %, 13,7 % bzw. 5,9 %.
(Ich habe ein ähnliches Setup für einen anderen STM32-Prozessor, aber auch mit STM32CubeMX eingerichtet und unter OpenSTM32 kompiliert / ausgeführt. Ich habe die Frequenz und alle vier Arbeitszyklen auf einem Oszilloskop überprüft (innerhalb der Messgenauigkeit).)
Unter der Annahme, dass die APB1-Frequenz tatsächlich 28 MHz beträgt, würde in Ihrem Fall eine Zählerperiode von 19 genau 1,4000000 MHz (28 MHz / 1 / 20) ergeben - wenn Sie jedoch den internen Oszillator verwenden, sind nicht mehr als drei signifikante Stellen garantiert (I festgestellt, dass meins um etwa 0,37 % abweicht, innerhalb der Spezifikation von 1 %). Wenn Sie den PWM-Impuls auf 10 einstellen, sollte das Tastverhältnis 50,0 % betragen.
Bence Kaulics
Cézar Chirila
Peter Mortensen
HAL_TIM_Base_Start(&htim3);
Linie nicht benötigt wurde (ich glaube auch nicht, dass es weh tat).Bence Kaulics
Peter Mortensen