Halli Hallo, habe folgendes Problem, wo ich aktuell vor einer verschlossenen Tür stehe. Es geht um die Pins PF0 / 1. Dort habe ich jeweils eine LED dran (alles richtig verdrahtet, leuchten tut sie auch!). Nun steht im Datenblatt das nach einem Reset diese Pins als ganz normale GPIO´s verwendet werden können. Andere Funktionen bzw. andere Pins funktionieren ja. Nur eben diese beiden nicht. Muss ich doch noch was anderes Konfigurieren? Vielen dank im voraus.
Hallo, die GPIOs müssen trotzdem konfiguriert werden, siehe Abschnitt 8 des ref-manuals. Hast Du das gemacht? Zeig mal bitte Dein vollständiges Programm.
Hallo, ich hoffe doch das ich das gemacht habe und nichts vergessen habe...
1 | int main(void) |
2 | {
|
3 | SystemInit(); |
4 | |
5 | SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK); |
6 | SysTick_Config(SystemCoreClock / 100000); |
7 | |
8 | Outputs_Init(); |
9 | |
10 | lcd_init(LCD_DISP_ON_CURSOR_BLINK); |
11 | |
12 | lcd_clrscr(); |
13 | lcd_gotoxy(0,0); |
14 | lcd_puts(" STM32x "); |
15 | |
16 | RELAIS_K1_SET; |
17 | |
18 | while(1) |
19 | {
|
20 | RELAIS_K1_SET; |
21 | _delay(10e3); |
22 | RELAIS_K2_SET; |
23 | _delay(10e3); |
24 | RELAIS_K3_SET; |
25 | _delay(10e3); |
26 | LED_WHITE_SET; |
27 | _delay(10e3); |
28 | |
29 | RELAIS_K1_UNSET; |
30 | _delay(10e3); |
31 | RELAIS_K2_UNSET; |
32 | _delay(10e3); |
33 | RELAIS_K3_UNSET; |
34 | _delay(10e3); |
35 | LED_WHITE_UNSET; |
36 | _delay(10e3); |
37 | }
|
38 | }
|
39 | |
40 | void Outputs_Init(void) |
41 | {
|
42 | GPIO_InitTypeDef GPIOx; |
43 | |
44 | RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE); |
45 | RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE); |
46 | RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOF,ENABLE); |
47 | |
48 | GPIOx.GPIO_Mode = GPIO_Mode_OUT; |
49 | GPIOx.GPIO_OType = GPIO_OType_PP; |
50 | GPIOx.GPIO_Pin = (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7); |
51 | GPIOx.GPIO_PuPd = GPIO_PuPd_NOPULL; |
52 | GPIOx.GPIO_Speed = GPIO_Speed_2MHz; |
53 | GPIO_Init(GPIOA, &GPIOx); |
54 | |
55 | GPIOx.GPIO_Mode = GPIO_Mode_IN; |
56 | GPIOx.GPIO_Pin = (GPIO_Pin_13 | GPIO_Pin_14); |
57 | GPIOx.GPIO_PuPd = GPIO_PuPd_UP; |
58 | GPIOx.GPIO_Speed = GPIO_Speed_2MHz; |
59 | GPIO_Init(GPIOA, &GPIOx); |
60 | |
61 | GPIOx.GPIO_Mode = GPIO_Mode_OUT; |
62 | GPIOx.GPIO_OType = GPIO_OType_PP; |
63 | GPIOx.GPIO_Pin = GPIO_Pin_1; |
64 | GPIOx.GPIO_PuPd = GPIO_PuPd_NOPULL; |
65 | GPIOx.GPIO_Speed = GPIO_Speed_2MHz; |
66 | GPIO_Init(GPIOB, &GPIOx); |
67 | |
68 | GPIOx.GPIO_Mode = GPIO_Mode_OUT; |
69 | GPIOx.GPIO_OType = GPIO_OType_PP; |
70 | GPIOx.GPIO_Pin = (GPIO_Pin_0 | GPIO_Pin_1); |
71 | GPIOx.GPIO_PuPd = GPIO_PuPd_NOPULL; |
72 | GPIOx.GPIO_Speed = GPIO_Speed_2MHz; |
73 | GPIO_Init(GPIOF, &GPIOx); |
74 | |
75 | }
|
Ok, was für LEDs hast Du benutzt, wie groß sind die Vorwiderstände, wie sind die LEDs angeschlossen?
Alle anderen Ausgänge funktionieren doch! Die haben alle die gleiche Beschaltung. Wieso sollte es dort aufeinmal anders sein? Können diese Pins etwa keine 20mA treiben?
Das Programm ist nicht vollständig:
LED_WHITE_SET;
LED_WHITE_UNSET;
(größere Dateien bitte als Anhang)
Das bringt mich nicht weiter. Die anderen Ausgänge funktionieren doch. Die #defines sind alles OK.
Jan H. schrieb: > Das bringt mich nicht weiter. > Die anderen Ausgänge funktionieren doch. Die #defines sind alles OK. Wenn Du meinst. Ich bin nicht der super-duper STM32-Experte, wollte Dir aber helfen und stelle die Fragen, die ich stellen würde, wäre es mein Programm. Aber Du willst nicht, ist schon ok. Dann bin ich halt raus.
Sorry, sollte nicht so rüberkommen. Nur leider bringen mich deine Vorschläge nicht weiter, da habe ich schon mind. 10 x drauf geschaut. Es muss mit sicherheit noch irgendwas umprogrammiert werden...
Hast Du einen Brotbrett-Aufbau? Bitte Schaltplan und Foto vom Aufbau. :D RM0360 v3 7.2.1 Caution: To switch ON the HSE oscillator, 512 HSE clock pulses need to be seen by an internal stabilization counter after the HSEON bit is set. Even in the case that no crystal or Resonator is connected to the device, excessive external noise on the OSC_IN pin may still lead the oscillator to start. Once the oscillator is started, it needs another 6 HSE clock pulses to complete a switching OFF sequence. If for any reason the oscillations are no more present on the OSC_IN pin, the oscillator cannot be switched OFF, locking the OSC pins from any other use and introducing unwanted power consumption. To avoid such situation, it is strongly recommended to always enable the Clock Security System (CSS) which is able to switch OFF the oscillator even in this case.
Jan H. schrieb: > Das heißt jetzt? Nein, habe schon ne fertige Platine. Hast du schon mal mit CubeMX das ganze probiert. Das erstellt den init Code für die Pins. Hth, Adib. --
anbei das Keil Projekt mit CubeMX erzeugt. Vergleiche mal bitte. Hast du die Clocksource richtig konfiguriert? Sonst schaltet er denn externen Oszillator an und die Pins sind blokiert ... oder so. Grüße, Adib. --
Kannst du vielleicht mal eine .hex Datei erzeugen in die der PF0 im Sekundentakt getoggelt wird? Dann bügel ich die mal drauf und versuche ob es so klappt...
sollte GPIOF0 im sekundentakt zappeln lassen ...
while (1)
{
HAL_GPIO_TogglePin(GPIOF, 1);
HAL_Delay(1000);
/* USER CODE END WHILE */
Adib.
--
Ohje, was ist da passiert. Falscher Name. Es klappt aufjedenfall mit deiner Software. Was ist denn nun der Unterschied zwischen deinem Code und meinem? Was genau ist "HAL"? Ein Standart?
Hardware Abstraction Layer Ein Stück Software, das die Bits in den Peripherieregistern richtig ansteuert und Du nur die Funktionen aufrufen musst, unter Berücksichtigung der Errata-Bugs vom µC.
Jan H. schrieb: > Es klappt aufjedenfall mit deiner Software. Adib schrieb: > Hast du die Clocksource richtig konfiguriert? > Sonst schaltet er denn externen Oszillator an und die Pins sind blokiert Deshalb solltest Du Deine komplette Software zeigen ...
Mit der Benutzung einer HAL erspart man sich zum Teil das detaillierte Einlesen in die Bits des µC. Dafür muss man sich die die HAL einlesen g HAL's gibt es von ST, per CubeMX. Auch andere Anbieter wie Keil, Segger oder Opensource.
Ich benutzte aktuell EmBitz habe damit angefangen. Alle anderen GPIO´s verhalten sich so wie ich das möchte, nur eben diese beiden nicht (GPIOF 0&1).
Adib schrieb: > anbei das Keil Projekt mit CubeMX erzeugt. > Vergleiche mal bitte. > Hast du die Clocksource richtig konfiguriert? > Sonst schaltet er denn externen Oszillator an und die Pins sind blokiert > ... > oder so. > > Grüße, Adib. > -- Vielen dank für deinen Denkanstoß. Nun funktioniert es ;)
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.