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;
}
}
}
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;
}
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?