Чтение IDR на плате STM32F411 - PullRequest
       63

Чтение IDR на плате STM32F411

0 голосов
/ 19 апреля 2020

Я сейчас пытаюсь научиться самостоятельно программировать эти микроконтроллеры на уровне регистров, и я только что зашел в тупик

То, что я пытаюсь выполнить sh очень просто , По сути, у моей платы STM32F411 есть светодиод, подключенный к контакту A5, и кнопка pu sh, подключенная к PIN C13

. Я пытался создать простую программу мигания светодиода, при которой светодиод на A5 включался, когда кнопка нажата и выключена, когда кнопка не нажата

Прямо сейчас, как только я загружаю свою программу, светодиод включается, но независимо от того, сколько раз я нажимаю sh кнопку, это состояние делает не изменится

Буду признателен, если кто-нибудь подскажет мне что-нибудь здесь: C

Я публикую здесь свой код ниже

#include "stm32f4xx.h"

/*
NOTES

USER LED IS ON PIN A5
USER BUTTON IS ON PIN C13

*/
uint8_t var=0;

int main(){


    RCC->AHB1ENR |=(1<<0); //Clock on port A
    RCC->AHB1ENR |=(1<<2); //Clock on port C

    //PORT A PIN 5 Config
    /*
        00: Input (reset state)
    01: General purpose output mode
    10: Alternate function mode
    11: Analog mode
    */
    GPIOA->MODER |= ~(1<<11);
    GPIOA->MODER |= (1<<10);
    GPIOA->OSPEEDR |= ((1<<11)|(1<<10));


    //PORT C PIN 13 Config
    /*
        00: Input (reset state)
    01: General purpose output mode
    10: Alternate function mode
    11: Analog mode
    */
    GPIOC->MODER |= ~(1<<27);
    GPIOC->MODER |= ~(1<<26);
    GPIOC->OSPEEDR |= ((1<<27)|(1<<26));
    GPIOC->PUPDR |= (1<<27);
    GPIOC->PUPDR |= ~(1<<26);

    while(1)
    {
        var = GPIOC->IDR;

        if(var==0)
        {
         GPIOA->BSRR = (1<<5);
        }       
        else
        {
         GPIOA->BSRR = 1<<(5+16);
        }

    }

}

Заранее благодарю !

1 Ответ

1 голос
/ 19 апреля 2020

это неправильно GPIOC->PUPDR |= ~(1<<26); не очищает 26-й бит. вам нужно &= вместо

это тоже неправильно

    var = GPIOC->IDR;

    if(var==0)
    {

вам нужно замаскировать правильный бит. Я не проверял правильность волхвов c чисел

...