焊接资讯

您现在的位置是:首页 > led灯 > 正文

led灯

stm32按键控制led灯亮灭仿真_stm32按键点亮led灯

工品易达2022-10-06led灯12

本文目录一览:

用PROTUSE仿真STM32按键控制LED亮灭,读取的IO口电平一直为低是为什么?

你程序写的有问题,一开始按钮拿那两个端口要是高电平,二极管那2个按钮要是低电平。

按下按钮,接地变成低电平,给二极管高电平导通。

[img]

怎么使stm32上的led灯亮,点击keil uvision上的什么按钮才可以控制板子呢

首先楼主需要做几个事情:

1、确定板子上LED灯的引脚位置是属于哪个口PORTA~PORTE

2、例程内的端口是否与硬件上的端口一致。

3、LED的驱动电平是高电平还是低电平。

4、一个GPIO正常工作至少需要以下几点:

a、系统时钟已经配置并正常运行。

b、对应的GPIO时钟位已经打开(为了降低功耗,默认GPIO的时钟是不会打开的)。

c、对应的GPIO引脚已经正确配置(如果没有外上拉,应当配置为推挽输出)。

d、对应的GPIO引脚输出寄存器已经设置为对应的电平。

5、程序正常下载的板子上。

6、正常下载还不能使用,检查板子是否正常(电源电压是否达到要求?晶振是否起振?复位电平是否正确?)

STM32怎么实现单片机控制LED灯常亮10S后熄灭?

首先实现LED灯的点亮和熄灭,控制连接LED灯的管脚输出高低电平就可以实现。如果电流比较大可以增加三极管驱动电路。10秒定时可以用定时器实现,设置一个1秒的定时器。上电点亮LED灯,并开始计时,10秒时间到熄灭LED就可以了。

stm32单片机用两个按键控制led, 按键1 控制从灭到亮,按键2控制从亮到暗,但是一直按着按键

给你一个最简单的思路

cpu利用率不高但是可以完成

你上面写的我给你提供一个思路

你应该可以看的懂

看不懂追问

unsigned

int

key;

void

main(void)

{

while(1)

{

switch(key)

{

case

0:

led0=!led0;

//你自己修改

delay_ms(200);

break;

case

1:

led1=!led1;

delay_ms(200);

break;

case

2:led2=!led2;

delay_ms(200);

break;

default:

break;

}

void

在这里按键获取函数(void)

{

key=获取到的值;

//没有按键按下的话是进入不到这里

}

}

}

STM32中断程序,按键控制灯的亮灭,程序运行没错,烧录到单片机就不行呢?哪位大神帮帮忙啊,不胜感谢

现在MDK在仿真试试,主要查看一下那些重要的寄存器有没有配置错误或者被其它代码修改等。其实仿真没有问题,就应该怀疑你自己的板子问题。以下可以参考的代码:

/*******************普中科技 **********************************

*

* STM32中断实验

*

* 实验目的: 掌握中断的配置

* 连接方法: 用排线或杜邦线分别连 JP10--JP1 JP11--JP5

* 实验现象: 当K7按下LED灯 再按时,LED灯会熄灭

*

*******************************************************************************/

#include "stm32f10x_lib.h"

/******************************** 变量定义 ------------------------------------*/

EXTI_InitTypeDef EXTI_InitStructure;

ErrorStatus HSEStartUpStatus;

/*********************************声明函数 -----------------------------------------------*/

void RCC_Configuration(void);

void GPIO_Configuration(void);

void NVIC_Configuration(void);

/*******************************************************************************

*

* 主函数

*

*******************************************************************************/

int main(void)

{

#ifdef DEBUG

debug();

#endif

RCC_Configuration(); //系统时钟配置

NVIC_Configuration(); //NVIC配置

GPIO_Configuration(); //配置GPIO

///*将EXTI线6连接到PB6*/

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource6);

/* Configure Key Button EXTI Line to generate an interrupt on falling edge */

//配置按钮中断线触发方式

EXTI_InitStructure.EXTI_Line = EXTI_Line6;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发

EXTI_InitStructure.EXTI_LineCmd = ENABLE; //中断线使能

EXTI_Init(EXTI_InitStructure); //初始化中断

/* Generate software interrupt: simulate a falling edge applied on Key Button EXTI line */

EXTI_GenerateSWInterrupt(EXTI_Line6); //EXTI_Line6中断允许 到此中断配置完成,可以写中断处理函数。

while (1)

{

}

}

/*******************************************************************************

*

* RCC配置

*

*******************************************************************************/

void RCC_Configuration(void)

{

//复位RCC外部设备寄存器到默认值

RCC_DeInit();

//打开外部高速晶振

RCC_HSEConfig(RCC_HSE_ON);

//等待外部高速时钟准备好

HSEStartUpStatus = RCC_WaitForHSEStartUp();

//外部高速时钟已经准别好

if(HSEStartUpStatus == SUCCESS)

{

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

FLASH_SetLatency(FLASH_Latency_2);

//配置AHB(HCLK)时钟=SYSCLK

RCC_HCLKConfig(RCC_SYSCLK_Div1);

//配置APB2(PCLK2)钟=AHB时钟

RCC_PCLK2Config(RCC_HCLK_Div1);

//配置APB1(PCLK1)钟=AHB 1/2时钟

RCC_PCLK1Config(RCC_HCLK_Div2);

//配置ADC时钟=PCLK2 1/4

RCC_ADCCLKConfig(RCC_PCLK2_Div4);

//配置PLL时钟 == 外部高速晶体时钟*9

RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

//配置ADC时钟= PCLK2/4

RCC_ADCCLKConfig(RCC_PCLK2_Div4);

//使能PLL时钟

RCC_PLLCmd(ENABLE);

//等待PLL时钟就绪

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)

{

}

//配置系统时钟 = PLL时钟

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

//检查PLL时钟是否作为系统时钟

while(RCC_GetSYSCLKSource() != 0x08)

{

}

}

/* Enable Key Button GPIO Port, GPIO_LED and AFIO clock */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB

| RCC_APB2Periph_AFIO, ENABLE);

}

/*************************************************

函数: void GPIO_Config(void)

功能: GPIO配置

**************************************************/

void GPIO_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输入

GPIO_Init(GPIOB, GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //配置浮空输入

GPIO_Init(GPIOB, GPIO_InitStructure);

}

/*******************************************************************************

* Function Name : NVIC_Configuration

* Description : Configure the nested vectored interrupt controller.

* Input : None

* Output : None

* Return : None

*******************************************************************************/

void NVIC_Configuration(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

#ifdef VECT_TAB_RAM

/* Set the Vector Table base location at 0x20000000 */

NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); //分配中断向量表

#else /* VECT_TAB_FLASH */

/* Set the Vector Table base location at 0x08000000 */

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

#endif

/* Configure one bit for preemption priority */

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //设置中断优先级

/* Enable the EXTI9_5 Interrupt */

NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel; //中断通道

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //强占优先级

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//次优先级

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //通道中断使能

NVIC_Init(NVIC_InitStructure);//初始化中断

}

#ifdef DEBUG

/*******************************************************************************

* Function Name : assert_failed

* Description : Reports the name of the source file and the source line number

* where the assert_param error has occurred.

* Input : - file: pointer to the source file name

* - line: assert_param error line source number

* Output : None

* Return : None

*******************************************************************************/

void assert_failed(u8* file, u32 line)

{

/* User can add his own implementation to report the file name and line number,

ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

/* Infinite loop */

while (1)

{

}

}

#endif

void EXTI9_5_IRQHandler(void)

{

if(EXTI_GetITStatus(EXTI_Line6) != RESET) //检测制定的EXTI线路触发请求是否发生。

{

/* Toggle GPIO_LED pin 7*/

GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)((1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_8))));

/* Clear the Key Button EXTI line pending bit */

EXTI_ClearITPendingBit(EXTI_Line6); //清除EXTI线路挂起位

}

}

/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/

PROTUSE 仿真STM32按键控制LED,按键不起作用

我觉得你可以从下面几点入手进行排查。

仿真查看按键不按下时,是否会进你的if语句。如果还是会进入,就用万用表量一下此时这个io口的电平。如果不进入,继续排查。

当按键按下时,是否会进入你的if,如果不能,那么同上,用万用表量一下io口的电平。

按道理讲,应该不会有问题的。除非硬件焊接有问题。

建议把K1定义拿出去,和temp放在一起,当然应该不会有太大影响。

最后一点,看一下优化等级,改成O0试试。

关于stm32按键控制led灯亮灭仿真和stm32按键点亮led灯的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。微信号:ymsc_2016

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~