Ich habe ein ESP8266 an einem STM32F103... damit ich den ESP zum Programmieren nicht jedesmal vom STM abtrennen und umstecken muss, würde ich dies gerne so lösen das ich den ESP über den STM32 programmiere. Am STM ist die USART 2 mit dem PC verbunden, Baudrate 115200. Am USART 3, ebenfalls mit 115200 Baud, hängt der ESP8266. Beide USART sind Interrupt gesteuert. Der GPIO0/2 sowie die RESET und Ch-PD Pins hängen ebenfalls am STM32. Der Reset und der Gang in den Bootloader des ESP über den STM32 funktioniert wunderbar. Nun zu meinem eigentlichen Problem: Da ja die USART nur ein Sende- & Empfangsbuffer haben (USARTn->DR) habe ich Schwierigkeiten dies Aufzuteilen, da beides über Interrupt geht. Wenn ich nun über die USART2 (PC->STM) direkt in der Interrupt auf die USART3 (STM-ESP) geht er ja in die Interrupt und schickt ein Byte vom PC->STM und dann direkt den Interrupt vom USART3 STM->ESP. Und bei jedem lesen und schreiben eines Bytes in USART3->DR wird ja der TransmitInterrupt und der ReceiveInterrupt zurückgesetzt. Wie kann man das am besten umgehen?!? Jemand einen Tipp für mich?
Nimm einen zweipoligen Kippschalter und schalte die Rs232 direkt um. Entweder auf den Controller oder den Esp.
Michael schrieb: > Nimm einen zweipoligen Kippschalter Das ist zu einfach, das kann jeder. Wenn schon dann von hinten durch die Brust ins Auge.
Längsdenker schrieb: > Michael schrieb: >> Nimm einen zweipoligen Kippschalter > > Das ist zu einfach, das kann jeder. Wenn schon dann > von hinten durch die Brust ins Auge. Ach so "von hinten durch die Brust ins Auge" ist es garnicht ;-) Einfach mal richtig lesen hat mich dann zur Erkenntnis gebracht:
1 | void USART3_IRQHandler(void) |
2 | {
|
3 | if(USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == SET) |
4 | {
|
5 | uint8_t c = (USART3->DR & 0xff); |
6 | USART2->DR = c; |
7 | }
|
8 | }
|
9 | |
10 | void USART2_IRQHandler(void) |
11 | {
|
12 | if(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == SET) |
13 | {
|
14 | uint8_t c = (USART2->DR & 0xff); |
15 | USART3->DR = c; |
16 | }
|
17 | }
|
Die Interrupt Flags stehen wirklich ausschließlich dafür da ob extern in die UART geschrieben wurde. Sehr schön... funktioniert tadellos!
:
Bearbeitet durch User
Also machen die ESP flashtools da keine komischen Sachen auf der UART? Ich habe nämlich das gleiche vor, allerdings nicht permanent so wie du es machst.
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.