基于STM32F103C8T6单片机用数组实现流水灯。


要点亮STM32最小系统板上的LED灯,需要进行以下5个步骤:

连接电源:将STM32最小系统板通过Micro USB接口连接电脑或者USB电源适配器,确保系统板上的电源指示灯亮起来。
连接调试器:将STLink调试器通过Mini SWD接口连接到STM32最小系统板上,确保调试器和系统板连接正常。
编写代码:使用Keil等开发工具编写控制STM32的代码,配置GPIO口为输出模式,并将LED引脚拉高电平。
烧录代码:使用开发工具将编写好的代码下载到STM32最小系统板中。
点亮LED:烧录完成后,系统板上的LED灯即可点亮。如果LED灯未点亮,可以检查电源和连接是否正常,以及代码是否正确。

开发环境准备

KEIl MDK(包含STM32F1XX系列固件库)
Windows 10 11
STM32F103C8T6最小系统板
各种颜色LED若干
STLINKV2 烧录器
杜邦线若干
面包板一个
在这里插入图片描述

新建工程步骤

建立工程文件夹,Keil中新建工程,选择型号
工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹
工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里
工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹
工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER
工程选项,Debug,下拉列表选择对应调试器,Settings,Flash Download里勾选Reset and Run

GPIO简介

GPIO(General Purpose Input Output)通用输入输出口
可配置为8种输入输出模式
引脚电平:0V~3.3V,部分引脚可容忍5V
输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等
输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等

LED简介

LED:发光二极管,正向通电点亮,反向通电不亮
LED的工作电流在5~20mA,工作电压大都在1.8~2V,(白光及蓝光LED的工作电压为3~3.7V)。
一般要加限流电阻,不然容易坏。
在这里插入图片描述

初始化STM32的GPIOA引脚

要初始化STM32的GPIOA引脚,您可以按照以下步骤进行操作:

首先,需要在代码中包含stm32的头文件,以便使用相关的函数和宏定义。

#include "stm32f10x.h"                  // Device header

然后,需要定义一个GPIO_InitTypeDef类型的结构体变量,并填充相关的参数。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure; 
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);

这里的第一个参数是要初始化的GPIO端口,第二个参数是GPIO_InitTypeDef类型的结构体变量的地址。

这样,您就可以成功地初始化STM32的GPIOA引脚了。根据需要,您可以更改结构体变量中的参数来设置不同的模式和电气特性。


创建数组

unsigned char SUN[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//赋值IO口高电平

while循环

代码如下(示例):
通过库函数

unsigned char  i = 0;
	while(1)
	{
	
	GPIO_Write(GPIOA,~SUN[i]);//Writes data to the specified GPIO data port.
	Delay_ms(1000);
	//GPIO_Write(GPIOA,SUN[i]);	
	//Delay_ms(500);
	i++;
	if( i>= 8)//改变IO口
		{
		i = 0;
		}	
	}

带参数的延时函数

延时函数是封装好的。拿着直接用就可以。

#include "stm32f10x.h"

/**
  * @brief  微秒级延时
  * @param  xus 延时时长,范围:0~233015
  * @retval 无
  */
void Delay_us(uint32_t xus)
{
	SysTick->LOAD = 72 * xus;				//设置定时器重装值
	SysTick->VAL = 0x00;					//清空当前计数值
	SysTick->CTRL = 0x00000005;				//设置时钟源为HCLK,启动定时器
	while(!(SysTick->CTRL & 0x00010000));	//等待计数到0
	SysTick->CTRL = 0x00000004;				//关闭定时器
}

/**
  * @brief  毫秒级延时
  * @param  xms 延时时长,范围:0~4294967295
  * @retval 无
  */
void Delay_ms(uint32_t xms)
{
	while(xms--)
	{
		Delay_us(1000);
	}
}
 
/**
  * @brief  秒级延时
  * @param  xs 延时时长,范围:0~4294967295
  * @retval 无
  */
void Delay_s(uint32_t xs)
{
	while(xs--)
	{
		Delay_ms(1000);
	}
} 


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一杯烟火

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值