Är ingång omvänd på min STM32?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Är ingång omvänd på min STM32?

Inlägg av Al_Bundy »

Jag gjorde ett litet snabbt exempel där jag kopplar in V3.3 till en ingång och sedan lyser en LED-lampa från en utgång. Fungerar utmärkt. Men jag hade lite problem med den först med tanke på att allt verkade omvänt.

För det första så tänker jag posta hela koden här. Det ni enda behövertitta på är själva input.

Datablad finns här.

Kod: Markera allt

#include "stm32f4xx.h"

int main(void) {

	/*
	 * Enable GPIOA
	 */
	// Enable GPIOA
	RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;

	/*
	 * Output
	 */
	// Set GPIOA 5 as output
	GPIOA->MODER |= GPIO_MODER_MODER5_0;

	// Set the type of output for GPIOA 5 - push-pull (which is already default)
	GPIOA->OTYPER &= ~(GPIO_OTYPER_OT_5);

	// Set the speed of GPIOA 5
	GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR5;

	// Set no pull-up or pull-down for GPIOA pin 5
	GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR5);

	/*
	 * Input
	 */
	// But set pull-down for GPIOA pin 6
	GPIOA->PUPDR |= GPIO_PUPDR_PUPDR6_1; // GPIO_PUPDR_PUPDR6_1 = 10. se 8.4.4 i datablad

	// Set GPIOA 6 as input
	GPIOA->MODER &= ~(GPIO_MODER_MODER6); // GPIO_MODER_MODER6 = 11 . Se 8.4.1 i datablad

	// Loop
	while (1) {
		/*
		 * Check if we press the button or not
		 */
		if(GPIOA->IDR & GPIO_IDR_IDR_6){
			// OFF GPIOA pin 5
			GPIOA->BSRRL |= GPIO_BSRR_BS_5;
		}else{
			// ON GPIOA pin 5
			GPIOA->BSRRH |= GPIO_BSRR_BS_5;

		}
	}
}
Det jag finner lutigt med denna kod är att jag sätter GPIOA 6 som ingång. OK!
Sedan sätter jag GPIOA 6 med en pull-down. Dvs om den inte får någon ström, så ska GPIOA pin 6 vara false

Då tänkte jag att denna kod borde egentligen sätta GPIOA pin 5 som true hela tiden.

Kod: Markera allt

if(GPIOA->IDR & GPIO_IDR_IDR_6){ 
    // OFF GPIOA pin 5
    GPIOA->BSRRL |= GPIO_BSRR_BS_5; 
}else{
    // ON GPIOA pin 5
    GPIOA->BSRRH |= GPIO_BSRR_BS_5;
}
Men så är fallet inte. När jag inte har ström inkopplat på GPIOA pin 6, så lyser lampan inte. Men när jag har det så lyser lampan. Så vill jag att det ska vara. Men själva IF-satsen visar omvänt enligt mig, men den fungerar.

Fråga:
Kan det vara så att ingång på en uC är omvänt jämfört vad vi normalt tolkar verkligheten som?
Eller är det jag som har gjort något tokigt?