首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在STM32F411板上读取IDR

在STM32F411板上读取IDR
EN

Stack Overflow用户
提问于 2020-04-19 14:00:25
回答 1查看 119关注 0票数 0

我目前正在尝试学习如何在寄存器级别对这些微控制器进行编程,但我已经走进了死胡同

我想要完成的事情很简单。基本上,我的STM32F411板有一个Led映射在引脚A5上,一个按钮映射在pin C13上

我试着做一个简单的发光二极管闪烁程序,当按下按钮时,A5上的发光二极管将亮起,而当按下按钮未按下时,发光二极管将关闭

现在,我一加载程序,LED就亮了,但无论我按下按钮多少次,它的状态都不会改变

如果有人能在这里给我一些见解,我将不胜感激:

我在下面发布了我的代码

代码语言:javascript
复制
#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);
        }

    }

}

提前谢谢你!

EN

回答 1

Stack Overflow用户

发布于 2020-04-19 16:42:06

这是错误的GPIOC->PUPDR |= ~(1<<26);,它不会清除第26位。您需要改为使用&=

这也是错误的

代码语言:javascript
复制
    var = GPIOC->IDR;

    if(var==0)
    {

您需要掩码正确的位。我没有检查魔术数字的正确性

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61300189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档