2017-08-01 1 views
1

Ich verwende das Arduino Nano-Stil-Devboard mit STM32F103C8T6 innen. Ich habe festgestellt, dass einige Pins mit einem Port korrekt funktionieren, andere jedoch nicht. Ich verwende die CMSIS v.5.0.1-Bibliothek und die Keil v.5.23-IDE.

Beispiel:STM32 F103C8T6 nicht alle Pins arbeiten

int main (void){ 
    RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; 
    GPIOB->CRL &= ~(GPIO_CRL_MODE3 | GPIO_CRL_MODE4 | GPIO_CRL_MODE5 | GPIO_CRL_CNF3 | GPIO_CRL_CNF4 | GPIO_CRL_CNF5); 
    GPIOB->CRL |= (GPIO_CRL_MODE3 | GPIO_CRL_MODE4 | GPIO_CRL_MODE5); 
    GPIOB->BSRR = (0x38 << 16); 
    while (1){ 
    } 
} 

I 3 LEDs von Kathoden PB3, PB4 und PB5 durch die Widerstände und nur das ist mit PB5 glüht verbunden bekommen haben. Reverse Verbindungs ​​(Anoden pins) und Fahr es hohe

GPIOB->BSRR = 0x38; 

ändert sich nichts, veränderte Ausgangsdrehzahl und als Open-Drain-Ausgang der Konfiguration gibt kein Ergebnis. Ich habe versucht, Pins direkt über st-link Debug-Modus zu schalten - das gleiche Ergebnis, PB5 funktioniert richtig, PB3 - PB4 funktioniert nicht. Ich habe sogar versucht, den ganzen Port zu fahren

int main (void){ 
    RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; 
    GPIOB->CRL = 0x55555555; 
    GPIOB->BSRR = 0xFFFF << 16; 
    while (1){ 
    } 
} 

PB3 - PB4 halten Ruhe. Natürlich sind die LEDs betriebsbereit. Versuchte das andere Brett - der gleiche Effekt.

Antwort

3

Standardmäßig werden PB3 und PB4 für das JTAG-Debugging verwendet, jeweils als JTDO und JNTRST. Wenn Sie diese Pins für GPIO verwenden möchten, müssen Sie sie über das Feld SWJ_CFG in AFIO_MAPR neu zuordnen.

+2

Danke, hinzugefügt RCC-> APB2ENR | = RCC_APB2ENR_AFIOEN; \t AFIO-> MAPR = AFIO_MAPR_SWJ_CFG_1; jetzt funktioniert es – Questdoino