STM32F103之点亮LED流水灯

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

目录

一、设计分析及代码思路

1.实现流水灯步骤

2.代码设计过程

二、创建项目

1.新建项目

2.编写代码

三、仿真运行

四、连接电路

1.器件连接

2.程序烧录

五、代码烧录及实现

1.烧录实现

2.流水灯实现

六、总结


一、设计分析及代码思路

1.实现流水灯步骤

  •  配置时钟使能寄存器
  • 配置端口寄存器
  • 设置输出模式
  • 实物连接及代码运行烧录
  • 实现流水灯

2.代码设计过程

  • 配置APB2外设时钟使能寄存器

该时钟的初始地址位0x40021000,偏移地址位0x18,所以寄存器的地址=0x40021018.

#define RCC_APB2ENR *((unsigned int*)0x40021018)//定义APB2时钟使能寄存器
//打开时钟

寄存器的位2、位3、位4分别对应A、B、C口,要开启GPIOA、GPIOB、GPIOC口的时钟,只需要将位2、位3、位4置1即可。

	RCC_APB2ENR |=1<<2;//开启GPIOA时钟
	RCC_APB2ENR |=1<<3;//开启GPIOB时钟
	RCC_APB2ENR |=1<<4;//开启GPIOC时钟
  • 配置端口寄存器

找到初始地址和偏移地址,进而配置对应引脚的寄存器。

//配置寄存器,GPIOC端口配置高寄存器,GPIOA和GPIOB端口配置低寄存器
#define GPIOA_CRL *((unsigned int*)0x40010800)//GPIOA   PA5
#define GPIOB_CRL *((unsigned int*)0x40010C00)//GPIOB   PB1
#define GPIOC_CRH *((unsigned int*)0x40011004)//GPIOC   PC14

  • 配置输出寄存器

找到初始地址和偏移地址,设置输出寄存器。

//配置输出寄存器
#define GPIOA_ODR *((unsigned int*)0x4001080C)
#define GPIOB_ODR *((unsigned int*)0x40010C0C)
#define GPIOC_ODR *((unsigned int*)0x4001100C)
  • 设置输出模式

    GPIOA_CRL |=(2<<(5*4));//PA5接口,偏移5*4 设置推免输出模式2MHz  0010
	GPIOB_CRL |=(2<<(1*4));//PB1接口,偏移1*4,设置推免输出模式2MHz  0010
	GPIOC_CRH |=(2<<(6*4));//PC14接口,偏移6*4,设置推免输出模式2MHz  0010
	
  • 设置灯的状态

初始状态下,先将所有的灯熄灭,需要对应的GPIO口输出高电平。

	GPIOA_ODR=0x1<<5;//GPIOA口输出高点平,灯灭
	GPIOB_ODR=0x1<<1;//GPIOB口输出高点平,灯灭
	GPIOC_ODR=0x1<<14;//GPIOC口输出高点平,灯灭
	

二、创建项目

1.新建项目

点击Project下的New uVision Project,选择项目路径,填写文件名,选择STM32F103C8芯片。

stm32f103点亮led,stm32,嵌入式硬件,单片机

再点击Source Group 1文件夹,右击Add New Item to Group "Source Group 1"添加新文件,选择.c,命名为main。

stm32f103点亮led,stm32,嵌入式硬件,单片机

将所需要的启动文件复制到项目目录下,f103c8t6启动文件为startup_stm32f10x_md.s

再右击文件夹,选择Add Existing Files to Group Source Group 1,选择All Files,选择刚才添加的启动文件,点击Add。

stm32f103点亮led,stm32,嵌入式硬件,单片机

添加完成之后,点击魔法棒,点击Output,勾选Create HEX File。

stm32f103点亮led,stm32,嵌入式硬件,单片机

在main.c中写入函数。

void SystemInit(void);

int main(){
	
}

void SystemInit(){
	
	
}

进行编译。

stm32f103点亮led,stm32,嵌入式硬件,单片机

2.编写代码

加上循环,那么需要延时函数。

void Delay_ms( volatile  unsigned  int  t)
{
     unsigned  int  i;
     while(t--)
         for (i=0;i<800;i++);
}

#define RCC_APB2ENR *((unsigned int*)0x40021018)//定义APB2时钟使能寄存器
//配置寄存器,GPIOC端口配置高寄存器,GPIOA和GPIOB端口配置低寄存器
#define GPIOA_CRL *((unsigned int*)0x40010800)//GPIOA   PA5
#define GPIOB_CRL *((unsigned int*)0x40010C00)//GPIOB   PB1
#define GPIOC_CRH *((unsigned int*)0x40011004)//GPIOC   PC14
//配置输出寄存器
#define GPIOA_ODR *((unsigned int*)0x4001080C)
#define GPIOB_ODR *((unsigned int*)0x40010C0C)
#define GPIOC_ODR *((unsigned int*)0x4001100C)
void SystemInit(void);
void Delay_ms(volatile  unsigned  int);
void delayms(unsigned int ms)//定义延时函数
{
	unsigned int i;
	while(ms--)
	{
	 i=12000;
		while(i--);
	};//for(i=110;i>0;i--);
}//延时1s为delayms(1000)
int main()
{
	RCC_APB2ENR |=1<<2;//开启GPIOA时钟
	RCC_APB2ENR |=1<<3;//开启GPIOB时钟
	RCC_APB2ENR |=1<<4;//开启GPIOC时钟
	
	GPIOA_CRL |=(2<<(5*4));//PA5接口,偏移5*4 设置推免输出模式2MHz  0010
	GPIOB_CRL |=(2<<(1*4));//PB1接口,偏移1*4,设置推免输出模式2MHz  0010
	GPIOC_CRH |=(2<<(6*4));//PC14接口,偏移6*4,设置推免输出模式2MHz  0010
	
	GPIOA_ODR=0x1<<5;//GPIOA口输出高点平,灯灭
	GPIOB_ODR=0x1<<1;//GPIOB口输出高点平,灯灭
	GPIOC_ODR=0x1<<14;//GPIOC口输出高点平,灯灭
	while(1)
	{
		//GPIOA口输出低电平,GPIOB输出高电平,GPIOC输出高电平,只有红灯亮
		GPIOA_ODR=0x0<<5;
		GPIOB_ODR=0x1<<1;
		GPIOC_ODR=0x1<<14;
		delayms(1000);
    
		//GPIOB口输出低电平,GPIOA输出高电平,GPIOC输出高电平,只有绿灯亮
		GPIOB_ODR=0x0<<1;
		GPIOA_ODR=0x1<<5;
		GPIOC_ODR=0x1<<14;
		delayms(1000);
		
		//GPIOC口输出低电平,GPIOB输出高电平,GPIOA输出高电平,只有黄灯亮
		GPIOC_ODR=0x0<<14;
		GPIOA_ODR=0x1<<5;
		GPIOB_ODR=0x1<<1;
		delayms(1000);
		
	}
}
void SystemInit(){
	
}

三、仿真运行

stm32f103点亮led,stm32,嵌入式硬件,单片机

四、连接电路

1.器件连接

STM32F103C8T6不能直接与电脑连接,需要用转换器,采用USB TO TTL,将其与最小核心板对应接口用杜邦线链接,其中3v3接核心板3v3,GND接GND,RXD接A9,TXD接A10,按照电路图进行连接,连接结果如下。

将板子上的BOOTO置1,才能进入工作模式。

stm32f103点亮led,stm32,嵌入式硬件,单片机

2.程序烧录

stm32f103点亮led,stm32,嵌入式硬件,单片机

五、代码烧录及实现

1.烧录实现

stm32f103点亮led,stm32,嵌入式硬件,单片机

2.流水灯实现

stm32f103点亮led,stm32,嵌入式硬件,单片机

六、总结

在此次实验中,我学会了如何利用STM32F103C8T6最小系统模板,并且运用寄存器的方式点亮并实现LED流水灯。本次实验让我对Keil和Proteus的使用更加熟练,在实验过程中也遇到许多问题,由于Proteus的版本问题导致无法使用STM系列的芯片、启动文件的添加、程序没有SystemInit函数编译一直报错、烧录时连接不上等等问题,好在通过查询资料都顺利解决,然而本次实验也只是STM32学习的入门,需要多加练习。文章来源地址https://www.toymoban.com/news/detail-858084.html

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

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

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

相关文章

  • 【STM32】STM32学习笔记-LED闪烁 LED流水灯 蜂鸣器(06-2)

    电路图示例1 电路图示例2 main.c 接线图如下图所示: 点击下载,现象为LED闪烁。 main.c main.c stm32F103工程模板 01-LED闪烁.rar 02-LED流水灯.rar 03-蜂鸣器示例程序.rar 参考: 【STM32】江科大STM32学习笔记汇总

    2024年03月19日
    浏览(47)
  • STM32——led灯的点亮+闪烁+流水灯的实现

    1.原理 其方式有两种一种是寄存器方式一种是库函数方式,但其原理都是一样的。如原理图所示,与LED相连接的IO口置低电平即可点亮led灯 2.寄存器方式–代码 3.库函数–代码 (1)led.c:函数led_config() (2)main.c调用led_config 4.结果展示 原理:让连接的IO口先置零再置1可以使其先亮

    2024年02月08日
    浏览(44)
  • 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日
    浏览(36)
  • 【蓝桥杯嵌入式】点亮LED灯,流水灯的原理图解析与代码实现——STM32

    🎊【蓝桥杯嵌入式】专题正在持续更新中,原理图解析✨,各模块分析✨以及历年真题讲解✨都在这儿哦,欢迎大家前往订阅本专题,获取更多详细信息哦🎏🎏🎏 🪔本系列专栏 -  蓝桥杯嵌入式_勾栏听曲_0的博客 🍻欢迎大家  🏹  点赞👍  评论📨  收藏⭐️ 📌个人主

    2024年02月03日
    浏览(42)
  • STM32对GPIO进行基础输出操作:点亮LED灯并闪烁,跑马流水灯(标准库GPIO输出模式)

    操作STM32的GPIO需要三个步骤 第一步:RCC开启时钟 第二步:使用GPIO_Init函数初始化GPIO 第三步:使用输出或输入的函数控制GPIO口 这三个函数分别是使能或失能AHB、APB1、APB2外设时钟控制。 GPIO复位函数 DeInit复位指定的GPIO外设 AFIODeInit函数,可以复位AFIO外设 GPIO_Init函数是通过结

    2024年02月03日
    浏览(39)
  • STM32F103 点亮LED闪烁与仿真

    今天给大家分享一下STM32 流水灯简单的仿真吧,我感觉这个提供有用的,但是自己也是第一次使用,主要是感觉曲线很高级。在PWM中查看脉宽很有用。 code: led.c #include \\\"led.h\\\" #include \\\"delay.h\\\" /* GPIO的控制寄存器的配置 1、配置输出引脚 2、打开对应的输出的寄存器的时钟 3、配置

    2024年02月16日
    浏览(33)
  • STM32F103系列之按键控制LED灯

    上篇已经介绍了点灯的操作了,本篇主要介绍按键控制LED灯进行相关操作。 同样,我们需要对GPIO进行相关的初始化配置,这里我们将LED相关的代码全部放在LED.C和LED.H文件里面。 LED.C文件: LED.H文件: 然后我们开始写KEY.C和KEY.H文件里面的相关代码: 首先我们需要知道按键的

    2024年02月05日
    浏览(33)
  • STM32F103C8T6 点亮LED灯

    一、开发板介绍 二、程序实现 1.配置函数 2.程序源码 main.c LED.c LED.h 总结​​​​​​​ 前言         今天我们开始来学习一下STM32F103Z8T6 点灯。这块芯片可用的IO口资源十分丰富,可用的通用IO口为32个 (注意:是在使用ST_LINK 和 J_LINK的情况下) 。这块芯片的操作方法与正

    2024年02月05日
    浏览(73)
  • STM32流水灯

    好的,以下是一篇高质量的CSDN博客STM32流水灯文章: STM32是一种强大的单片机芯片,由STMicroelectronics公司研发。该芯片具有高性能、低功耗和广泛的功能集,可广泛应用于工业控制、车载控制、消费电子等领域。在本文中,我们将介绍如何使用STM32实现流水灯的简单例程程序

    2024年02月06日
    浏览(32)
  • stm32实现流水灯

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

    2024年02月05日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包