【基于寄存器与基于标准库的stm32 LED流水灯】

一、环境搭建

1、硬件

1、stm32f103板一个
2、面包板
3、LED灯三个
4、串口连接器
5、计算机

2、软件

keil软件

二、基于寄存器方式点亮流水灯

1、创建工程

1、打开keil,点击Project,选择New uVision Project,选择一个文件夹
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/c0eeaa34a0b64a06a90a22dba7dfc704.png在这里插入图片描述

2、选择 CPU 型号,根据开发板进行选择
在这里插入图片描述

3.在线添加库文件
用寄存器控制 STM32 时,不需要在线添加库文件,可以直接关掉。

2、工程配置

1、点击
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
根据自己的采用的连接器选择
点击Settiings
在这里插入图片描述
在这里插入图片描述
点击确定设置完成

3、添加main.c文件

1、在这里插入图片描述
然后点击保存,建议保存在你创建的工程目录下
2、双击
在这里插入图片描述
把你的mian.c文件加入进去

4、编写代码

#include "stm32f10x.h"
//----------------APB2使能时钟寄存器 ---------------------
#define RCC_APB2ENR		*((unsigned volatile int*)0x40021018)
//----------------GPIOA配置寄存器 -----------------------
#define GPIOA_CRL		*((unsigned volatile int*)0x40010800)
#define	GPIOA_ODR		*((unsigned volatile int*)0x4001080C)
//----------------GPIOB配置寄存器 -----------------------
#define GPIOB_CRL		*((unsigned volatile int*)0x40010C00)
#define	GPIOB_ODR		*((unsigned volatile int*)0x40010C0C)
//----------------GPIOC配置寄存器 -----------------------
#define GPIOC_CRH		*((unsigned volatile int*)0x40011004)
#define	GPIOC_ODR		*((unsigned volatile int*)0x4001100C)


//延时函数
 void Delay()
 {
   u32 i=0;
   for(;i<10000000;i++);
 }
 int main(void)
 {	
	RCC_APB2ENR|=1<<2|1<<3|1<<4;			//APB2-GPIOA、GPIOB、GPIOC外设时钟使能	
	
	GPIOA_CRL&=0xFFF0FFFF;		//设置位 清零	
	GPIOA_CRL|=0x00020000;		//PA4推挽输出
	GPIOA_ODR&=~(1<<4);			//设置初始灯为灭
	
	GPIOB_CRL&=0xFF0FFFFF;		//设置位 清零	
	GPIOB_CRL|=0x00200000;		//PB5推挽输出
	GPIOB_ODR&=~(1<<5);			//设置初始灯为灭
	 
	GPIOC_CRH&=0xF0FFFFFF;		//设置位 清零	
	GPIOC_CRH|=0x00200000;		//PC13推挽输出
	GPIOC_ODR&=~(1<<13);			//设置初始灯为灭		
	 

	 

	while(1){
		//A灯
		GPIOA_ODR|=1<<4;		//A4高电平
	 	Delay();
		GPIOA_ODR&=~(1<<4);		//A4低电平


		
		//B灯
		GPIOB_ODR|=1<<5;		//PB5高电平
	 	Delay();
		GPIOB_ODR&=~(1<<5);		//PB5低电平

		
		
		//C灯
		
		GPIOC_ODR&=~(1<<13);		//PB5低电平
	 	Delay();
		GPIOC_ODR|=1<<13;		//PB5高电平


		
		}
}

5、编译运行

在这里插入图片描述

三、基于标准库创建工程

1、下载标准库

st公司官方下载地址https://www.st.com/zh/embedded-software/stsw-stm32108.html

2、创建keil文件并配置标准库

1、创建项目
在这里插入图片描述
创建步骤与前面一致,注意在这直接关掉,不需要在这配置库函数,后续自己配置

在这里插入图片描述
2、将下载好的标准库中的文件复制到你创建的工程文件中
在这里插入图片描述
3、接着,在Keil种新增文件组:点击
在这里插入图片描述
依次添加各个文件
4、接着,点击魔术棒,点击C++ -> include path 添加文件路径非常重要
在这里插入图片描述

依次添加
在这里插入图片描述
在这里插入图片描述

3、编写主函数

#include "stm32f10x.h"

void GPIO_Init(void);

int main(void) {
    GPIO_Init(); // 初始化GPIO管脚
    
    while (1) {
        GPIO_SetBits(GPIOA, GPIO_Pin_4); // 点亮A4管脚
        GPIO_SetBits(GPIOB, GPIO_Pin_5); // 点亮B5管脚
        GPIO_SetBits(GPIOC, GPIO_Pin_13); // 点亮C13管脚
        
        // 延时一段时间
        for (volatile int i = 0; i < 1000000; i++);
        
        GPIO_ResetBits(GPIOA, GPIO_Pin_4); // 关闭A4管脚
        GPIO_ResetBits(GPIOB, GPIO_Pin_5); // 关闭B5管脚
        GPIO_ResetBits(GPIOC, GPIO_Pin_13); // 关闭C13管脚
        
        // 延时一段时间
        for (volatile int i = 0; i < 1000000; i++);
    }
}

void GPIO_Init(void) {
    GPIO_InitTypeDef GPIO_InitStructure;
    
    // 使能GPIOA、GPIOB和GPIOC时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE);
    
    // 配置A4管脚为推挽输出模式
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    
    // 配置B5管脚为推挽输出模式
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    
    // 配置C13管脚为推挽输出模式
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}

4、编译运行

在这里插入图片描述

5、总结

LED流水灯实验是基于STM32F103标准外设库的一个基础实验,通过这个实验,我们可以了解如何使用STM32F103的标准外设库来控制LED灯的亮灭和模式。
STM32F103标准外设库提供了对芯片上各种外设的控制能力,包括GPIO(通用输入输出)外设。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值