gpt4 book ai didi

c - 如何制作外部开关控制LED stm32f4板?

转载 作者:太空宇宙 更新时间:2023-11-04 03:34:25 25 4
gpt4 key购买 nike

我尝试使用面包板上的外部开关控制板上的 LED,但它没有?开关连接到端口 d 号 9,我试图做到这样,一旦我按下开关,绿色 LED 就会亮起。但是由于某些奇怪的原因它不起作用,我试图摆弄它但没有运气。我该如何修复它才能正常工作?

这是我的代码:

include <stdio.h>
include "STM32F4xx.h"
void Soft_Delay(void);
void LED_Init_1(void);
void Push_button (void);
#define ITM_Port8(n) (*((volatile unsigned char *)(0xE0000000+4*n)))
#define ITM_Port16(n) (*((volatile unsigned short*)(0xE0000000+4*n)))
#define ITM_Port32(n) (*((volatile unsigned long *)(0xE0000000+4*n)))
#define DEMCR (*((volatile unsigned long *)(0xE000EDFC)))
#define TRCENA 0x01000000
struct __FILE { int handle; };
FILE __stdout;
FILE __stdin;
int fputc(int ch, FILE *f) {
if (DEMCR & TRCENA) {
while (ITM_Port32(0) == 0);
ITM_Port8(0) = ch;
}
return(ch);
}
int main (void) {

LED_Init_1();
Push_button ();

while(1)
{

if((GPIOD->IDR &= ~ (1UL << 9))==1)
{
GPIOD->ODR |= (1UL << 12);

}
else if((GPIOD->IDR &= ~ (1UL << 9))==0)
{

GPIOD->ODR &= ~(1UL << 12);


}

}

}
void LED_Init_1 (void) {
RCC->AHB1ENR |= ((1UL << 3) );
GPIOD->MODER &= ~((3UL << 2*12));
GPIOD->MODER |= ((1UL << 2*12) );
GPIOD->OTYPER &= ~((1UL << 12) );
GPIOD->OSPEEDR &= ~((3UL << 2*12) );
GPIOD->OSPEEDR |= ((2UL << 2*12) );
GPIOD->PUPDR &= ~((3UL << 2*12) );
GPIOD->PUPDR |= ((1UL << 2*12) );
}
void Push_button (void) {
RCC->AHB1ENR |= ((1UL << 3) );
GPIOD->MODER &= ~((3UL << 9));
}
void Soft_Delay(void) {

uint32_t i=10000000;
while(i>0)
{
i--;
}
}

谢谢

最佳答案

查看似乎正在检查输入的这一行(两个相似行之一):

if((GPIOD->IDR &= ~  (1UL <<   9))==1)

首先我质疑你为什么用&=写回端口值

其次,为什么位 9 上的输入等于 1

第三,对相反状态的 else 测试(显然)是多余的 - 一个普通的 else 就可以了。我没有您的系统或工具,所以我猜测是这段代码。

if((GPIOD->IDR & (1UL << 9)) != 0)
GPIOD->ODR |= (1UL << 12);
else
GPIOD->ODR &= ~(1UL << 12);

关于c - 如何制作外部开关控制LED stm32f4板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33764067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com