STM32——led灯的点亮+闪烁+流水灯的实现

这篇具有很好参考价值的文章主要介绍了STM32——led灯的点亮+闪烁+流水灯的实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、LED点亮

1.原理

其方式有两种一种是寄存器方式一种是库函数方式,但其原理都是一样的。如原理图所示,与LED相连接的IO口置低电平即可点亮led灯
stm32控制led闪烁代码,STM32单片机的开发,stm32,嵌入式硬件,单片机

2.寄存器方式–代码

	//寄存器方式
	//主频8Mhz的时候实现1us延时的方法
	//LED灯
	//1,开时钟PE时钟
	RCC->APB2ENR |= 1<<6;
	//2,配置IO口
	GPIOE->CRL &= ~(0xffff<<8);//先清零指定寄存器位
	GPIOE->CRL |= 0x1111<<8;//设置模式为推挽输出模式
	//3, 设置开关灯
	GPIOE->ODR |= 0xf<<2;//关灯操作

3.库函数–代码

(1)led.c:函数led_config()

	//库函数
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);	
	GPIO_InitTypeDef GPIO_InitStruct={0};
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_2;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;
	GPIO_Init(GPIOE,&GPIO_InitStruct);
	GPIO_ResetBits(GPIOE,GPIO_Pin_2);

(2)main.c调用led_config

4.结果展示

stm32控制led闪烁代码,STM32单片机的开发,stm32,嵌入式硬件,单片机

二、LED闪烁

原理:让连接的IO口先置零再置1可以使其先亮再灭,我们先使灯置1,然后宏定义让灯反转,delay一个时间,代码如下
(1)led.c函数led_config()置1:

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);	
	GPIO_InitTypeDef GPIO_InitStruct={0};
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_2;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;
	GPIO_Init(GPIOE,&GPIO_InitStruct);
	GPIO_SetBits(GPIOE,GPIO_Pin_2);

(2)led.h宏定义灯的反转

#define LED1_Toggle() GPIOE->ODR ^= (1<<2)//反转灯操作

(3)main.c调用

int main(void){
LED_Config();
while(1)
{
		if(sys_time>=1000)
		{
			sys_time = 0;
			LED1_Toggle();
		}
}

sys_time在delay.c中定义

#include "delay.h"

//主频72Mhz的时候实现1us延时的方法
#define delay_1us()   __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();\
__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();\
__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();\
__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();\
__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();\
__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();\
__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();\
__nop();__nop();
void Delay_us(uint32_t time)
{
	while(time--)
	{
		delay_1us();
	}
}
void Delay_ms(uint32_t time)
{
	while(time--)
	{
		Delay_us(1000);
	}
}

uint32_t led_time = 0;
uint32_t sys_time = 0;
uint32_t dht11_time = 0;

void SysTick_Handler(void)//1ms进入一次
{
	led_time++;
	sys_time++;
	dht11_time++;
}

void Sys_ms(uint32_t time)
{
	uint32_t temp = time+sys_time;
	while(temp>sys_time);
}


delay.h

#ifndef __DELAY_H
#define __DELAY_H

#include "stm32f10x.h"
//extern uint16_t temperature;
//extern uint16_t humidity;
extern uint32_t led_time ;
extern uint32_t sys_time ;
extern uint32_t dht11_time ;
void Delay_us(uint32_t time);
void Delay_ms(uint32_t time);

#endif

ps:systick_handler是由系统定时器(SysTick)触发的中断处理函数。SysTick是一种基于硬件的定时器,它可以在每个时钟周期结束时触发中断。在ARM Cortex-M系列处理器中,SysTick定时器是由内核提供的,并且可以用于实现操作系统的时间片轮转调度、延时等功能。当SysTick定时器计数器减到时,就会触发systick_handler中断处理函数。因此,systick_handler的触发是由SysTick定时器的计数器减到时自动触发的。

三、LED流水灯

使这四个灯轮流亮起-代码如下

1.代码

int main(void){
LED_Config();
while(1)
{
		if(sys_time>=1000)
		{
			sys_time = 0;
			LED1_Toggle();
			Delay_ms(300);
			LED2_Toggle();
			Delay_ms(300);
			LED3_Toggle();
			Delay_ms(300);
			LED4_Toggle();
			Delay_ms(300);
		}
}

2.结果展示

流水灯文章来源地址https://www.toymoban.com/news/detail-718994.html

到了这里,关于STM32——led灯的点亮+闪烁+流水灯的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 3、stm32:GPIO输出——LED闪烁、LED流水灯、蜂鸣器

    目录 一、GPIO简介 二、GPIO基本结构 三、GPIO模式 四、GPIO常用寄存器 (1)端口配置低高寄存器(GPIOx_CRL/GPIOx_CRH)(x=A…E) (2)端口输入数据寄存器(GPIOx_IDR)(x=A…E) (3)端口输出数据寄存器(GPIOx_ODR)(x=A…E) (4)端口位设置/清除寄存器(GPIOx_BERR)(x=A…E) (5)端口位清除寄存器(GP

    2024年02月09日
    浏览(43)
  • STM32F103C8T6定时器实现led的周期闪烁及PWM实现流水灯

    通过定时器Timer方式实现时间的精准控制,相当于给CPU上了一个闹钟,CPU平时处理其它任务,当定时时间到了以后,处理定时相关的任务。请设置一个5秒的定时器,每隔5秒从串口发送“hello windows!”;同时设置一个2秒的定时器,让LED等周期性地闪烁。 使用TIM3和TIM4,分别输

    2024年01月23日
    浏览(53)
  • Stm32f103c8t6(proteus仿真)学习——1.点亮LED流水灯

    软件准备:keil uVsion 5 和 proteus 8.15 打开proteus8.15 - 新建项目 - 改名 - 一直next 鼠标右键 - 放置 - 元件 - From Libraries 搜索Stm32 - 选择stm32f103c8 画出点亮一个LED灯的原理图 提示,各元器件搜索: 主控芯片:stm32 电阻:res LED灯:led 鼠标右键 - 放置 - 元件 - From Libraries 地和VCC 在左侧

    2024年02月08日
    浏览(59)
  • STM32第二课:灯的亮灭、流水灯、有源蜂鸣器

             STM32的第二课,我们来学习如何使用STM32控制等的亮灭,使用多重控制制作我们自己的流水灯,然后再了解一下有源蜂鸣器的用法,创造出不一样的声音。         首先开头包含STM32的头文件#include \\\"stm32f10x.h\\\",这个头文件包含STM32众多的重要驱动,一定要把这个头文

    2024年01月24日
    浏览(39)
  • STM32单片机 超入门项目:流水灯(不同闪烁模式和速度)

    流水灯通过交替闪烁实现灯光流动的效果,本篇将分析如何采用STM32单片机实现流水灯。 STM32单片机(STM32F103RCT6)、发光二极管 4(我用的是七彩快闪,用红绿蓝LDE自行搭配也可)、1k电阻 4、面包板飞线等自备。 打开STM32CubeMX,选择型号STM32F103RCT6,配置调试器PinoutConfigurati

    2023年04月09日
    浏览(40)
  • STM32F103之点亮LED流水灯

    目录 一、设计分析及代码思路 1.实现流水灯步骤 2.代码设计过程 二、创建项目 1.新建项目 2.编写代码 三、仿真运行 四、连接电路 1.器件连接 2.程序烧录 五、代码烧录及实现 1.烧录实现 2.流水灯实现 六、总结  配置时钟使能寄存器 配置端口寄存器 设置输出模式 实物连接及

    2024年04月25日
    浏览(37)
  • stm32实现流水灯

    目录 一、STM32F103C8实现流水灯  二、注意事项  三、总结 打开keil,创建新项目 选择对应芯片    实验代码 c语言代码 汇编语言 添加驱动文件   烧录,烧录前设置生成hex文件    构筑完成后在项目文件的Objects文件中会生成hex文件 接好线路  hex文件生成后用mcuisp进行烧录 实

    2024年02月05日
    浏览(43)
  • 利用STM32实现流水灯程序

    keil MDK安装与新建工程 在KEIL MDK官网中下载KEIL MDK ARM,下载链接如下:MDK-ARM Version 5.38a Evaluation Software Request (keil.com),在填写信息后进行安装和下载。 安装后进行以下操作: 右键keil5图标,点击“以管理员身份运行” 进入之后, 点击“ file ”里边的选项“ License Management ”

    2024年02月06日
    浏览(41)
  • 基于stm32的流水灯实现

    主控芯片:  正点原子STM32F103ZET6精英开发板 oled:中景园七针脚0.96寸oled 代码编程软件: keil5 代码下载地址: stm32流水灯项目 希望大家仔细看一看是否符合自己的需求,实际上本文中写到的很多东西已经能为课设所用,理清逻辑后自己编程也很方便的,但如果想直接copy我的项目

    2024年02月07日
    浏览(35)
  • 汇编语言实现C51单片机点亮流水灯

    P0作输出口,接8只发光二极管,编写程序实现二极管循环点亮 二极管为共阳极连接时,即二极管正极已接通电源,单片机输出接阴极,所以单片机输出为低电平有效。 所以为实现二极管轮流点亮,单片机的输出应为:0FEH,0FDH,0FBH,....0FEH,每输出一种状态,需要延时0.1us. 最后在

    2024年02月06日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包