stm32-手把手妈宝级-三种跑马灯写法

第一阶段        

首先我们在进行stm32学习和项目,先对对应的模板进行封装好。

开始先进行软件的安装keil 5,keil 5的安装教程可以上个公众号“软件管家”和对应的stm32f1/f4的环境配置可以直接上B战看看视频。接下来我直接从文件的配置开始,如果已经会配置的同学或者是想说我已经直接copy官方给的例程的同学可以直接跳掉下个阶段。

首先在自己的文件盘中创建个文件夹

文件夹里在创建如下文件夹

 

然后在第一个CORE文件夹中存放如下东西

 这个东西在那里找呢,让我们前往在官网下的资源包,或者你可以直接从商家给的资源包里找

一般在A盘(当然直接拷贝例程里的CORE也是可以的效果一样)

 而FWLIB中是这样的

需要在固件库中找中的文件要在

将其拷贝过来就行了。

而在HARDWARE中存的是你想要实现哪个模块的功能的地方,如在这篇文章里是用来存跑马灯

而OBJ文件夹,是我们为了更好更快的找到在串口烧录时找到.hex文件而存在,你也可以不用创建,因为在你开始用keil 5 创建好工程时就会自动帮你存在USER中的objects(如果你需要将.hex文件放在OBJ里就要改变下存放路径,在下阶段的操作里会进行讲解如何改变路径)

 

 在SYSTTEM中里面存的是这个

 这个可以直接在例程里直接下载

从里面的SYSTEM中copy下

在剩下USER文件就是我们自己使用的地方。

 一般情况下你需要将这7个文件给装在USER文件夹中(在资料盘中点搜索可以找到

以上的步骤创建好了就可以进行下个阶段的创建操作

  第二阶段

然后回到keil 5 开始环境配置

首先先点开project选第一个创建New uvision project

 创造出一个工程,一般情况下,我们会创建一个和我们上个阶段初始文件夹里面一样名的文件

创建好后一般会出现如下图现象

这时候需要你鼠标右键点开它Template

选点第三个Manage就会下图

然后你在中间Groups中间点这个

 手打将上个阶段的这排文件夹名字全部打进入(除了OBJ,点一下打一个)

就会有这样的效果了

 这一个设完了后就可以开始进行文件添加c文件

就是直接将上个阶段里的东西加入在keil 5 中设置的文件

 

后面出现这个

然后点开魔法棒

 点C/C++

跟刚才一样将上个阶段的.h文件添加进去。

之后就可以开始敲代码了

先点开

 

第三阶段

创建main.c,led.c,led.h

创建这3个是将使用和初始化设置分开。

开始进入正题环节。

第一种:采用库函数进行跑马灯的实现

就是在设置好了,led.c,main.c,led.h分配放在第一阶段里的USER 和HARDWARE中

记住你存放的地方是在文件夹里但是在keil 5上没有显示那样的话,你就要和上步添加

 一样将你创建好的main.c,led.c,led.h也放进去

接下来写代码

第一种-使用库函数-写跑马灯

 将led.h和led.c中放你想要实现得到的功能,像我们这里的话就是将跑马灯的功能进行实现

//led.h
#ifndef  __LED_H

#define  __LED_H

void LED_Init(void);

#endif

 在这里面的

#ifndef  __LED_H

#define  __LED_H

#endif

是加入系统工程他没有帮我们将led的定义给定义出来,那就定义,如果已经帮我们定义好了也不用但是他们在读到这条语句时不会再次定义。而在这个其中的void LED_Init(void);是用来函数声明用的,而具体的函数定义和实现是在led.c里面。

led.c

//led.c
#include "led.h"//就是是将之前定义的led.h给引用出来 。
#include "stm32f4xx.h"//就是属于stm32单片机所用到的头文件。
 
 //在这里我会细致到每一步的讲解。

//开始就行函数定义初始化。
 
 void LED_Init(void)
 {
	 GPIO_InitTypeDef GPIO_InitStructure;
/*初始化你对应的GPIO口,这一个怎么选择我会在下面,截图中体现出来,它这个语句就是定义下*/
	 //F9
	 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);/*这里就是对于时钟的定义,时钟就是单片机的脉搏,他会推动单片机的额指令的进行*/
//下面的就是对于单片机对于所使用的引脚或GPIO口进行定义
//这个涉及到寄存器,单片机一般有10个寄存器,但在GPIO口中我们一般用五个寄存器就够了
//分别对应哪个具体的引脚,模式,频率等
	 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
	 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
	 GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
	 GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
	 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

//将其初始化 存储好	  
	 GPIO_Init(GPIOF,&GPIO_InitStructure);
	 GPIO_SetBits(GPIOF,GPIO_Pin_9);//默认初始化为高电频
//下文与上文相同
	 
	 //F10
	 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
	 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
	 GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
	 GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
	 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	 
	  
	 GPIO_Init(GPIOF,&GPIO_InitStructure);
	  GPIO_SetBits(GPIOF,GPIO_Pin_10);
	 
	 
	 
	 
	 
 }

对于main.c函数

#include "stm32f4xx.h"//这里的讲解参考上边代码 
#include "led.h"
#include "delay.h"

int main(void)
{
	delay_init(168);/*延迟函数的初始化,你要调用延迟函数就不单单是将头文件进行包含,还需要初始化它调用*/
	LED_Init();//在led.h里有初始化定义,这里调用led初始化
	
	while(1)//需要不断循环,不然单片机循环一遍就停了
	{
			 GPIO_SetBits(GPIOF,GPIO_Pin_9);//将对应引脚的电平调高,灯灭
			 GPIO_SetBits(GPIOF,GPIO_Pin_10);
		delay_ms(500);
		GPIO_ResetBits(GPIOF,GPIO_Pin_9);//将对应引脚的电平调低,灯亮
			 GPIO_ResetBits(GPIOF,GPIO_Pin_10);
		delay_ms(500);
	}
	
}

第二种-在库函数中用位操作-写跑马灯

led.c与led.h的写法和上边相同

就是在main.c不同

#include "stm32f4xx.h"
#include "led.h"
#include "delay.h"

int main(void)
{
	delay_init(168);
	LED_Init();
	
	while(1)
	{
			// GPIO_SetBits(GPIOF,GPIO_Pin_9);
			 //GPIO_SetBits(GPIOF,GPIO_Pin_10);
		PFout(9)=1;//它这里直接使用PFout()函数来实现位操作使其直接赋值调节高低电平
		PFout(10)=1;
		delay_ms(500);
		//GPIO_ResetBits(GPIOF,GPIO_Pin_9);
			// GPIO_ResetBits(GPIOF,GPIO_Pin_10);
		PFout(9)=0;
		PFout(10)=0;
		delay_ms(500);
	}
	
}

第三种-使用寄存器-写跑马灯

在文件配置时它不需要像库函数那样那么多只需要几个就够了

 并且它是直接进行其他的底层代码块实现功能赋值(库函数,本身就是以函数定义来用寄存器)

//main.c
#include "stm32f4xx.h"
#include "led.h"
#include "delay.h"

int main(void)
{
	delay_init(168);
	 LED_Init();
	while(1)
	{
		GPIOF->ODR&=~(1<<9);
		GPIOF->ODR&=~(1<<10);
		delay_ms(50);
		GPIOF->ODR|=1<<9;
		GPIOF->ODR|=1<<10;
		delay_ms(50);
		
	}
	
}

 

 文章转载至

http://blog.qmgua.com/?id=147

 

 

 

  • 9
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
stm32--tsl256.zip_stm32是一个压缩文件,其中包含了与stm32和tsl256芯片相关的文件和代码。stm32是一种32位的单片机系列,由STMicroelectronics公司推出。它具有高性能、低功耗和丰富的外设接口,适用于各种嵌入式系统应用。tsl256是一种环境光传感器芯片,用于检测周围环境的光照强度。 这个压缩文件可以包含stm32芯片和tsl256传感器之间的通信协议、引脚连接方式、初始化代码以及一些示例应用程序。通过使用这些文件和代码,开发人员可以很方便地在stm32上使用tsl256传感器来测量光照强度。例如,可以通过读取tsl256传感器输出的模拟电压值,转换为相应的光照强度数值。开发人员可以根据需要进行修改和定制,以适应具体的应用场景。 使用stm32--tsl256.zip_stm32文件,开发人员可以节省大量的开发时间和精力。他们无需从零开始编写通信协议和初始化代码,也无需从头研究如何与tsl256传感器进行交互。相反,他们可以直接使用这些提供的文件和代码,快速实现与tsl256传感器的集成,并进行光照强度的测量和应用开发。 总之,stm32--tsl256.zip_stm32是一个方便开发人员在stm32上使用tsl256传感器的压缩文件。它包含了相关的文件和代码,可以用于通信协议、引脚连接、初始化以及示例应用程序。通过使用这些文件和代码,开发人员可以快速、方便地实现在stm32上使用tsl256传感器进行光照强度测量和应用开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值