Liebes Forum, auf dem STM32F303 habe ich zusätzlich zur UART-Kommunikation die DMA programmiert. Der Kanal für die DMA für UART2 ist der Channel 7. Nachdem alle Daten gesendet wurden, wird ein Interrupt ausgelöst (durch UART_TX). Aus irgendeinem Grund passiert es, dass in die Interrupt-Routine hinein gesprungen wird, ohne dass der Interrupt durch die UART2 ausgelöst wird. Nach langem Suchen im Internet habe ich gefunden, dass vermutlich eines der folgenden Interrupts ausgelöst wird (wodurch ich in die ISR komme): I2C1-RX, TIM2_CH2, TIM2_CH4, TIM4_UP, TIM17_CH1, TIM17_UP Ich habe im Datenblatt nachgesehen und habe festgestellt, dass diese alle auf Kanal 7 liegen (siehe Anhang). Ich habe mir gedacht, dass ich das Problem umgehen, indem ich dann in der ISR jedes der einzelnen Flags abfrage und dann einfach lösche. Nur dazu müsste ich wissen, was zB TIM2_CH2 bedeutet. Offensichtlich handelt es sich hierbei um den Timer 2?! Was bedeutet aber CH2 und was könnte hier einen Interrupt auslösen? Bzw. was bedeutet TIM4_UP? Ich bin für jeden Hinweis dankbar!!
steff p. schrieb: > Nachdem alle Daten gesendet wurden, wird ein Interrupt ausgelöst (durch > UART_TX). Nö. Der TX wird bei jedem Byte[1] ausgelöst, aber noch während Exception Entry in den IRQ Handler transferiert der DMA das nächste Byte und die Quelle/Auslöser wird abgeschaltet. Trotzdem bleibt der Interrupt im NVIC dann entweder pending oder active, und die Handler Funktion wird ausgeführt. Ich würde den TX Interrupt nur anmachen, wenn im DMA IRQ Handler keine Bytes mehr übrig sind. [1]: Bei Fifos im UART/USART muss es nicht jedes Byte sein, sondern nur das jeweils letzte.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
