焊接资讯

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

led灯

stm32用gpio点亮led灯的仿真(stm32用gpio点亮led灯不亮)

工品易达2023-04-11led灯17

stm32led灯闪烁10秒

首先,需要编写一个程序,该程序将控制STM32 LED灯的闪烁,使其在指定的10秒时间内闪烁。代码中需要包含LED初始化,计时器配置以及硬件延时函数。在循环中,我们需要检查计时器的值,如果它达到10秒,则停止循环,完成LED灯的闪烁。在此期间,可以使用GPIO的输出端口来控制LED灯的闪烁,从而实现设定的10秒时间内LED灯的闪烁。

怎么样用KEIL新建STM32工程并点亮LED灯

零死角玩转stm32看看吧,用stm32点亮led看似简单,实际要涉及到很多东西,从建立模板,调用库函数,配置gpio,打开gpio时钟,初始化gpio……。当你能点亮led时你也入门了。

STM32点亮小灯的程序和方法

STM32点亮小灯(库函数版)

首先解释以下

#ifndef _LED_H

#ifndef _LED_H

......

......

#endif

避免重复引用头文件的内容。  一般放在头文件里面,作用就是以防你在.c文件里面不小心重复包含头文件的时候不会报错

搞起来,搞起来。玩32其实点个灯是很难的,不像51,arduino等单片机

首先定义led库

/******声明led库,防止在主函数中被重复调用*****/

#ifndef __LED_H

#define __LED_H

void   LED_Init(void);

#endif

定义led.c文件

#include "led.h"

#include "stm32f10x.h"   //一定要采用这个库,才能调用引脚的初始化

//初始化PB5和PE5为输出口.并使能这两个口的时钟    

//LED IO初始化

void LED_Init(void)

{

GPIO_InitTypeDef  GPIO_InitStructure;  //定义结构体指针。具体百度

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA, ENABLE); //使能PB,PE端口时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0--PB.5 端口配置

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

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz

GPIO_Init(GPIOB, GPIO_InitStructure); //根据设定参数初始化GPIOB.5

GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0--PB.5 端口配置

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

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz

GPIO_Init(GPIOE, GPIO_InitStructure); //根据设定参数初始化GPIOB.5

GPIO_SetBits(GPIOE,GPIO_Pin_5); //PE.5 输出高

}

/*****主函数中***/

#include "stm32f10x.h"   //一定要采用这个库,才能调用引脚的初始化

#include "delay.h"

#include "led.h"

int main(void)

{

delay_init();   //初始化延时函数

LED_Init();         //初始化LED端口

while(1)

{

GPIO_ResetBits(GPIOB,GPIO_Pin_5);  //LED0对应引脚GPIOB.5拉低,亮  等同LED0=0;

GPIO_SetBits(GPIOA,GPIO_Pin_5);  //LED1对应引脚GPIOE.5拉高,灭 等同LED1=1;

delay_ms(300);    //延时300ms

GPIO_SetBits(GPIOB,GPIO_Pin_5);   //LED0对应引脚GPIOB.5拉高,灭  等同LED0=1;

GPIO_ResetBits(GPIOA,GPIO_Pin_5); //LED1对应引脚GPIOE.5拉低,亮 等同LED1=0;

delay_ms(300);                    //延时300ms

}

}

解释

/****低电平输出模式***/

GPIO_ResetBits(GPIOB,GPIO_Pin_5);  //LED0对应引脚GPIOB.5拉低,亮  等同LED0=0;

/****高电平输出模式***/

GPIO_SetBits(GPIOA,GPIO_Pin_5);  //LED1对应引脚GPIOE.5拉高,灭 等同LED1=1;

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

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

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

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

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

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

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

STM32对GPIO操作一般用库函数,我想知道怎样用位操作实现流水灯?谢谢了!

GPIO功能文件相关操作:

使用GPIO功能前,首先要初始化系统,最简单的方法为:添加stm32f10x_rcc.c,打开stm32f10x_conf.h 在第41行将/* #include "stm32f10x_rcc.h""*/两边注释符去掉,在main函数中添加代码SystemInit();

添加stm32f10x_gpio.c

打开stm32f10x_conf.h 在37行将/*#include "stm32f10x_gpio.h"*/两边注释符去掉

GPIO口使能:

1.定义一个初始化类型结构体变量,我们为这个结构体里的各个变量赋值,

GPIO_InitTypeDef GPIO_InitStructure;

2. 开启GPIO时钟,只有开启了GPIO时钟,对应端口才可以正常工作,GPIO口对应时钟APB2

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

3. 为结构体赋值

设置GPIO口为输出

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //设置引脚

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //通用推挽输出,其它选项

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出最大频率,其它选项

设置GPIO口为输入

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //设置引脚

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//悬空输

附:

GPIO_Mode值

GPIO_Mode_AIN 模拟输入

GPIO_Mode_IN_FLOATING 浮空输入

GPIO_Mode_IPD 下拉输入

GPIO_Mode_IPU 上拉输入

GPIO_Mode_Out_OD 开漏输出

GPIO_Mode_Out_PP 推挽输出

GPIO_Mode_AF_OD 复用开漏输出

GPIO_Mode_AF_PP 复用推挽输出

GPIO_Speed值

GPIO_Speed_10MHz 最高输出速率 10MHz

GPIO_Speed_2MHz 最高输出速率 2MHz

GPIO_Speed_50MHz 最高输出速率 50MHz

4. 使能GPIO口

GPIO_Init(GPIOA, GPIO_InitStructure);

例:

void GPIOA0_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA, GPIO_InitStructure);

}

GPIO使用:

输出状态:

GPIO口置高:GPIO_SetBits(GPIOA,GPIO_Pin_0| GPIO_Pin_1);

GPIO口置底:GPIO_ResetBits(GPIOA,GPIO_Pin_0);

写数据到GPIO的某个引脚:GPIO_WriteBit(GPIOA, GPIO_Pin_15, Bit_SET);

写数据到GPIO:GPIO_Write(GPIOA, 0x1101);

得到GPIO口状态:GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_0);

u16 ReadValue;

ReadValue = GPIO_ReadOutputData(GPIOC);

例:

#define LED0_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_0)

#define LED0_ON GPIO_SetBits(GPIOA,GPIO_Pin_0)

#define LED0 GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_0)

int main(void)

{

while(1)

{

delay();

if(LED1)

LED0_OFF;

else LED0_ON;

}

}

输入状态:

得到GPIO口状态:GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)

u16 ReadValue;

ReadValue = GPIO_ReadInputData(GPIOC);

这是GPIO的基本配置方法

实现走马灯 按照你自己的板子上小灯连接的对应引脚将里面的引脚换下就好了。

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

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

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

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

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

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

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

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

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

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

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

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

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

发表评论

评论列表

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