1. 项目

  使用STM32F103VE的固件库实现流水灯设计。

2. 代码

  由于这是基于野火的视频进行学习的,项目代码在上节基础上进行编写的。

  点亮绿灯:

  main.c

#include "stm32f10x.h"			//相当于51单片机中的 	#include <reg51.h>
#include "bsp_led.h"
void Delay(uint32_t count)
{
for(; count!=0; count--);
} int main(void)
{
//来到这里是,系统的时钟已经被配置到72MHz了
LED_GPIO_Config(); //初始化LED函数
while(1)
{
GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN); //熄灭LED
Delay(0xfffff);
GPIO_ResetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN); //点亮LED
Delay(0xfffff);
}
}

  bsp_led.c

#include "bsp_led.h"

void LED_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK, ENABLE);
GPIO_InitStruct.GPIO_Pin = LED_G_GPIO_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LED_G_GPIO_PORT, &GPIO_InitStruct);
}

  bsp_led.h

#ifndef __bsp_led_h
#define __bsp_led_h #include "stm32f10x.h"
#define LED_G_GPIO_PIN GPIO_Pin_0
#define LED_G_GPIO_PORT GPIOB
#define LED_G_GPIO_CLK RCC_APB2Periph_GPIOB void LED_GPIO_Config(void);
#endif /*__bsp_led._h*/

  点亮红蓝灯只需将对应代码替换即可

  main.c中需替换的代码:

		GPIO_SetBits(LED_R_GPIO_PORT,LED_R_GPIO_PIN);	//熄灭LED
Delay(0xfffff);
GPIO_ResetBits(LED_R_GPIO_PORT,LED_R_GPIO_PIN); //点亮LED
Delay(0xfffff); GPIO_SetBits(LED_B_GPIO_PORT,LED_B_GPIO_PIN); //熄灭LED
Delay(0xfffff);
GPIO_ResetBits(LED_B_GPIO_PORT,LED_B_GPIO_PIN); //点亮LED
Delay(0xfffff);

  bsp_led.c中需要替换的代码:

	GPIO_InitStruct.GPIO_Pin = LED_R_GPIO_PIN;
RCC_APB2PeriphClockCmd(LED_R_GPIO_CLK, ENABLE);
GPIO_Init(LED_R_GPIO_PORT, &GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = LED_B_GPIO_PIN;
RCC_APB2PeriphClockCmd(LED_B_GPIO_CLK, ENABLE);
GPIO_Init(LED_B_GPIO_PORT, &GPIO_InitStruct);

  bsp_led.h中需要替换的代码:

#define LED_R_GPIO_PIN						GPIO_Pin_5
#define LED_R_GPIO_PORT GPIOB
#define LED_R_GPIO_CLK RCC_APB2Periph_GPIOB #define LED_B_GPIO_PIN GPIO_Pin_1
#define LED_B_GPIO_PORT GPIOB
#define LED_B_GPIO_CLK RCC_APB2Periph_GPIOB

3. 参考资料

  •   原理图
  • 函数执行流程

(1) 使用 GPIO_InitTypeDef 在bsp_led.c中定义 GPIO_InitStruct 初始化结构体变量,以便下面用于存储 GPIO 配置。

(2) 调用库函数 RCC_APB2PeriphClockCmd 来使能 LED 灯的 GPIO 端口时钟,该函数有两个输入参数,第一个参数用于指示要配置的时钟,如本例中的“LED_G_GPIO_CLK”;

 函数的第二个参数用于设置状态,可输入“Disable”关闭或“Enable”使能时钟。

(3) 向 GPIO 初始化结构体赋值,把引脚初始化成推挽输出模式,其中的 GPIO_Pin 使用宏“LED_X_GPIO_PIN”来赋值,使函数的实现方便移植。

(4) 使用以上初始化结构体的配置,调用 GPIO_Init 函数向寄存器写入参数,完成 GPIO 的初始化,这里的 GPIO 端口使用“LED_X_GPIO_PORT”宏来赋值,也是为了程序移植方便。

(5) 使用同样的初始化结构体,只修改控制的引脚和端口,初始化其它 LED 灯使用的 GPIO 引脚。
(6) 使用宏控制 RGB 灯默认关闭。



  •   

最新文章

  1. mybatis入门基础(九)----逆向工程
  2. 解决SSH会话连接超时问题
  3. JS中onpropertychange和onchange事件区别小结
  4. 深入探讨:LBS是一种工具而非一种模式
  5. android如何使用自己定义JNI接口,以及NDK环境建设和使用的工具。
  6. 经典的SQL语句面试题
  7. HDU 6113 度度熊的01世界
  8. HTTPS中间人攻击实践(原理&#183;实践)
  9. Android 入门(1)使用第三方控件
  10. SENG201 (Software Engineering I) Project
  11. 2016 Russian Code Cup (RCC 16), Final Round B - Cactusophobia
  12. WPF项目中解决ConfigurationManager不能用(转)
  13. linux 下安装arm-linux-gnueabi交叉编译器
  14. ionic 布局
  15. javascript的Object对象的defineProperty和defineProperties
  16. Windows 的 Oracle Data Access Components (ODAC)
  17. 【Android】3.8 定位图层展示
  18. 百度地图地址查询API使用
  19. ASP.NET WebAPI 06 HttpMessageHandler管道
  20. critical section的用法

热门文章

  1. GUI容器之布局管理器
  2. ☕【Java技术指南】「难点-核心-遗漏」Java线程状态流转及生命周期的技术指南(知识点串烧)!
  3. 性能测试必备命令(1)- free
  4. openswan协商流程之(四):main_inI2_outR2()
  5. SQL-Instead of 触发器
  6. 如何实现 iOS 短视频跨页面的无痕续播?
  7. 安装docker遇到:package docker-ce-3:19.03.8-3.el7.x86_64 requires containerd.io &gt;= 1.2.2-3, but none of the providers can be installed
  8. 羽夏看Win系统内核——环境搭建
  9. 学习PHP中的信息格式化操作
  10. 修改CentOS ll命令显示时间格式