stm32用gpio点亮led灯的仿真(stm32用gpio点亮led灯不亮)
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
相关文章
发表评论
评论列表
- 这篇文章还没有收到评论,赶紧来抢沙发吧~