IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 学习STM32使用官方标准生成的固件库点流水灯 -> 正文阅读

[嵌入式]学习STM32使用官方标准生成的固件库点流水灯

学习STM32使用官方标准生成的固件库点流水灯。

  1. 我们首先要创建几个文件夹,这样有条理的分类,让代码看起来更清晰。
  2. 然后从官方下载固件库,或者从STM32CubeMX中生成固件库,这样从库里解析出需要的头文件。
  3. 把固件库中需要的库移植到我们建立好的文件夹中。

新建工程

在这里插入图片描述
把固件库的CMSIS文件 <下图是CMSIS文件夹包含的库>
STM32F10x_StdPeriph_Driver文件
在这里插入图片描述
复制到我们新建工程文件夹里的->Libraries文件夹

打开Keil5,新建工程,进入桌面建好的工程文件夹,建立工程
再工程里添加几个文件。用来存放需要用到的库文件。
在这里插入图片描述
CMSIS文件夹里添加 core_cm3.c / system_stm32f10x.c 这两个文件名

STARTUP文件夹里添加 startup_stm32f10x_hd.s

FWLB文件夹里添加 Libraries文件夹下 STM32F10x_StdPeriph_Driver文件下的src文件里全部的库文件。
USER文件夹里 添加main.cstm32f10x_it.cstm32f10x_it.hstm32f10x_conf.h文件。
再添加USER文件下的led文件下的bsp_led.cbsp_led.h

整理好这些后。我们在keil5中指定默认宏

1.因为包含文件 “stem32f10x.h” 默认在keil_5安装包里。所以编译会出错误
去指定 在软件 《魔术棒》 C/C++ 里指定头文件(.h文件)
然后在stem32f10x.h中找到需要的宏,对应于 stm32f10x_conf.h 【这个头文件包含了所有外设驱动的头文件】把这个宏放入默认栏中 《形成一个只要使用这个模板就使用这个宏》

2.板载容量 名称也放入默认栏中
在这里插入图片描述

那么最后,我们开始对USER目录下的文件进行编程。

bsp_led.h文件下代码

#ifndef  __LED_H
#define  __LED_H

#include "stm32f10x.h"

/* 定义LED连接GPIO端口,用户只需要修改下面代码即可盖面控制的LED引脚*/
//Red-红色

#define LED1_GPIO_PORT  GPIOB  /*GPIO端口*/
#define LED1_GPIO_CLK   RCC_APB2Periph_GPIOB  /*端口时钟*/
#define LED1_GPIO_PIN   GPIO_Pin_5  /*连接到SCL时钟线的GPIO*/


#define LED2_GPIO_PORT  GPIOB  /*GPIO端口*/
#define LED2_GPIO_CLK   RCC_APB2Periph_GPIOB  /*端口时钟*/
#define LED2_GPIO_PIN   GPIO_Pin_0  /*连接到SCL时钟线的GPIO*/

#define LED3_GPIO_PORT  GPIOB  /*GPIO端口*/
#define LED3_GPIO_CLK   RCC_APB2Periph_GPIOB  /*端口时钟*/
#define LED3_GPIO_PIN   GPIO_Pin_1  /*连接到SCL时钟线的GPIO*/


/*使用编制的固件库控制IO*/

#define ON  0
#define OFF 1

#define LED1(a) if (a) \
	                GPIO_SetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);\
                  else     \
									GPIO_ResetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);
									
#define LED2(a) if (a) \
	                GPIO_SetBits(LED2_GPIO_PORT,LED2_GPIO_PIN);\
                  else     \
									GPIO_ResetBits(LED2_GPIO_PORT,LED2_GPIO_PIN);

#define LED3(a) if (a) \
	                GPIO_SetBits(LED3_GPIO_PORT,LED3_GPIO_PIN);\
                  else     \
									GPIO_ResetBits(LED3_GPIO_PORT,LED3_GPIO_PIN);									

									
/*直接操作寄存器的方法控制IO*/
#define digitalHi(p,i)       {p->BSRR=i;}	//输出为高电平
#define digitalLo(p,i)       {p->BRR=i;} //输出低电平
#define digitalToggle(p,i)   {p->ORD ^=i} //输出反转状态


/*定义控制IO的宏*/
#define LED1_TOGGLE   digitalToggle(LED1_GPIO_PORT,LED2_GPIO_PIN)
#define LED1_OFF      digitalHi(LED1_GPIO_PORT,LED2_GPIO_PIN)
#define LED1_ON       digitalLo(LED1_GPIO_PORT,LED2_GPIO_PIN)


#define LED2_TOGGLE   digitalToggle(LED2_GPIO_PORT,LED2_GPIO_PIN)
#define LED2_OFF      digitalHi(LED2_GPIO_PORT,LED2_GPIO_PIN)
#define LED2_ON       digitalLo(LED2_GPIO_PORT,LED2_GPIO_PIN)

#define LED3_TOGGLE   digitalToggle(LED3_GPIO_PORT,LED3_GPIO_PIN)
#define LED3_OFF      digitalHi(LED3_GPIO_PORT,LED3_GPIO_PIN)
#define LED3_ON       digitalLo(LED3_GPIO_PORT,LED3_GPIO_PIN)




/*基本混色,高级用法PWM可混出全彩颜色*/

//red
#define LED_RED \
                 LED1_ON;\
				 LED2_OFF\
				 LED3_OFF

//green
#define LED_GREEN \
                   LED1_OFF;\
				   LED2_ON\
				   LED3_OFF

//blue
#define LED_BLUE  \
                    LED1_OFF;\
					LED2_OFF\
					LED3_ON

//黄(红+绿)
#define LED_YELLOW  \
                    LED1_ON;\
					LED2_ON\
					LED3_OFF

//紫 (红+蓝)
#define LED_PURPLE  \
                    LED1_ON;\
					LED2_OFF\
					LED3_ON

//青(绿+蓝)
#define LED_CYAN \
                    LED1_OFF;\
					LED2_ON\
					LED3_ON
//白(红+绿色+蓝)
#define LED_WHITE  \
                   LED1_ON;\
				   LED2_ON\
				   LED3_ON

//全部关闭
#define LED_RGBOFF \
                   LED1_OFF;\
									 LED2_OFF\
									 LED3_OFF
									 
//初始化GPIO函数        							 
void LED_GPIO_Config(void);


#endif /* __LED_H */

  1. bsp_led.c 文件内代码
#include "bsp_led.h"

void LED_GPIO_Config(void)
{
   //定义一个GPIO_InitTypeDef类型的文件
	 GPIO_InitTypeDef   GPIO_InitStructure;
	 
	 /*开启LED相关的GPIO外设时钟*/
	 RCC_APB2PeriphClockCmd(LED1_GPIO_CLK | LED2_GPIO_CLK | LED3_GPIO_CLK,ENABLE);
	 
	 /*选择控制的GPIO引脚*/
	 GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN;
	
	 /*设置引脚模式为通用推免输出*/
	 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	 
	 /*设置引脚速率为50MHz*/
	 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	 
	 /*调用库函数,初始化GPIO*/
	 GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure);
	 
	 GPIO_InitStructure.GPIO_Pin = LED2_GPIO_PIN;
	 
	 GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStructure);
	 
	 GPIO_InitStructure.GPIO_Pin = LED3_GPIO_PIN;
	 
	 GPIO_Init(LED3_GPIO_PORT,&GPIO_InitStructure);
	 
	  /*关闭所有led灯*/
	 GPIO_SetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);
	 
     GPIO_SetBits(LED2_GPIO_PORT,LED2_GPIO_PIN);
		
	 GPIO_SetBits(LED2_GPIO_PORT,LED2_GPIO_PIN); 
}

3.main.c 主文件内容

#include "stm32f10x.h"
#include "bsp_led.h"

#define SOFT_DELAY  Delay(0xFFFFF);
void Delay(__IO u32 nCount);

int main(void)
{
	
	//LED端口初始化
	LED_GPIO_Config();
	
	while(1)
	{
		
	   LED_RED;
		 SOFT_DELAY;
		 
		 LED_GREEN;
		 SOFT_DELAY;
		
		 LED_BLUE;
		 SOFT_DELAY;
		 
		 LED_YELLOW;
		 SOFT_DELAY;
		
		 LED_PURPLE;
		 SOFT_DELAY;
		
		 LED_CYAN;
		 SOFT_DELAY;
		
		 LED_WHITE;
		 SOFT_DELAY;
		
		
		 LED_RGBOFF;
		 SOFT_DELAY;
		 
	
	}
}
//延迟函数
void Delay(__IO uint32_t nCount)	 //简单的延时函数
{
	for(; nCount != 0; nCount--);
}

这里就可以让流水灯闪烁起来了。后续等学到PWM后可以得到更好的效果。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-31 16:48:39  更:2021-07-31 16:49:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:57:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码