microcontroller - 在 STM32F411 板上读取 IDR
问题描述
我目前正在尝试学习如何自己在寄存器级别对这些微控制器进行编程,但我刚刚走到了死胡同
我想要完成的事情非常简单。基本上,我拥有的 STM32F411 板在引脚 A5 上映射了一个 LED,在引脚 C13 上映射了一个按钮
我正在尝试制作一个简单的 LED 闪烁程序,其中 A5 上的 LED 会在按下按钮时亮起,在未按下按钮时会熄灭
现在,只要我加载我的程序,LED就会打开,但无论我按下多少次,它的状态都不会改变
如果有人可以在这里给我任何见解,我将不胜感激: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);
}
}
}
先感谢您!
解决方案
这是错误GPIOC->PUPDR |= ~(1<<26);
的,它没有清除第 26 位。你需要&=
改为
这也是错误的
var = GPIOC->IDR;
if(var==0)
{
你需要屏蔽正确的位。我没有检查幻数的正确性
推荐阅读
- python - 使用 urllib3 在网站上禁止 403
- java - 如何在 Java 中将 int 转换为 byte?
- python - 绘制 ROC 曲线 ANN 模型
- html - 识别 XMLHTTP 响应中的 NextSibling
- arrays - 在 MATLAB 中将单元格数组中的行转换为列
- flutter - Flutter:抽屉内将 ListTile 项目移至底部
- java - SecurityError: CSSStyleSheet.cssRules getter: Not allowed to access cross-origin stylesheet error while reading CSS stylesheet using Selenium Firefox
- r - 迭代大型数据集 R-Studio 的每一行
- python - Python:测试是否加载了 Windows 应用程序
- python - 如何从视图中的 QuerySet 中选择 OnetoOne 字段?