我目前正在尝试学习如何在寄存器级别对这些微控制器进行编程,但我已经走进了死胡同
我想要完成的事情很简单。基本上,我的STM32F411板有一个Led映射在引脚A5上,一个按钮映射在pin C13上
我试着做一个简单的发光二极管闪烁程序,当按下按钮时,A5上的发光二极管将亮起,而当按下按钮未按下时,发光二极管将关闭
现在,我一加载程序,LED就亮了,但无论我按下按钮多少次,它的状态都不会改变
如果有人能在这里给我一些见解,我将不胜感激:
我在下面发布了我的代码
#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);
}
}
}提前谢谢你!
发布于 2020-04-19 16:42:06
这是错误的GPIOC->PUPDR |= ~(1<<26);,它不会清除第26位。您需要改为使用&=
这也是错误的
var = GPIOC->IDR;
if(var==0)
{您需要掩码正确的位。我没有检查魔术数字的正确性
https://stackoverflow.com/questions/61300189
复制相似问题