大奖娱乐官方网站_大奖娱乐老虎机_在线【大奖娱乐平台】

STM32 GPIO——流水灯例程 学习总结

2018-09-13来源: eefocus 关键字:STM32   GPIO  流水灯例程

通过控制LED灯,熟悉STM32的存储器结构、地址映射、时钟树、库文件、利用库的方法及开发工程的步骤,建立STM32的开发思想。


这是我建立的第一个工程,由于涉及面较广,知识点分散,在此做一个总结。

1)为控制LED灯,知道要使用GPIO外设。

GPIO(General-Purpose I/O):I/O引脚可以被软件设置成各种不同的功能,如输入或输出。控制LED灯,即控制STM32芯片的I/O引脚电平的高低来实现。

2)了解GPIO外设有什么功能,要如何使用。

GPIO引脚又被分为GPIOA、GPIOB、...、GPIOG不同的组,每组端口分为0~15共16个不同的引脚,对于不同型号的芯片,端口的组和引脚的数量不同。

功能查看参考手册

3)获知GPIO的地址映射,知道它所挂载的总线APB2。

4)了解ST官方库对寄存器的封装。

5)了解时钟树,查看GPIOC的时钟来源,即PCLK2。

6)在stm32f10x_conf.h文件中包含用到的头文件stm32f10x_gpio.h、stm32f10x_rcc.h。

7)在工程模板的基础上添加led.c、led.h用户文件。

8)编写驱动初始化函数LED_GPIO_Config()。

9)开启外设GPIOC时钟,分析由SystemInit()函数配置的默认的Sysclk=71MHz的时钟频率是否符合工程要求。

10)根据控制要求,定义并填充初始化结构体GPIO_InitStructure,向相应的结构体成员写入适当的参数。

11)调用初始化函数GPIO_Init()初始化GPIOC。

12)编写相应的led.h头文件。

13)编写main应用程序。

14)调试程序、完成。


我建的工程:




/*led.h*/

#ifndef __LED_H

#define __LED_H

 

#include "stm32f10x.h"

 

#define ON  0

#define OFF 1

 

#define LED1(a) if(a) \

                 GPIO_SetBits(GPIOD,GPIO_Pin_3);\

else   \

GPIO_ResetBits(GPIOD,GPIO_Pin_3)

 

#define LED2(a) if(a) \

                 GPIO_SetBits(GPIOD,GPIO_Pin_6);\

else   \

GPIO_ResetBits(GPIOD,GPIO_Pin_6)

 

#define LED3(a) if(a) \

                 GPIO_SetBits(GPIOB,GPIO_Pin_5);\

else   \

GPIO_ResetBits(GPIOB,GPIO_Pin_5)

void LED_GPIO_Config(void);

 

#endif /*__LED_H*/


/*led.c*/

#include "led.h"

 

/*配置LED用到的I/O口*/

 

void LED_GPIO_Config(void)

{

/*定义一个GPIO_InitTypeDef类型的结构体*/

   GPIO_InitTypeDef GPIO_InitStructure;

/*开启GPIOC的外设时钟*/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);

/*选择要控制的GPIO引脚*/

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 " GPIO_Pin_6 | GPIO_Pin_5;

/*设置引脚模式为通用推挽输出*/

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

/*设置引脚速率为50MHz*/

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

/*调用库函数,初始化GPIOB、GPIOD*/

GPIO_Init(GPIOB,&GPIO_InitStructure);

GPIO_Init(GPIOD,&GPIO_InitStructure);

/*关闭所有LED灯*/

GPIO_SetBits(GPIOB,GPIO_Pin_5);//3、6、5引脚输出高电平,关闭三盏LED灯

GPIO_SetBits(GPIOD,GPIO_Pin_3|GPIO_Pin_6);

                                                      

}


/*main.c*/

#include "stm32f10x.h"

#include "led.h"

 

void Delay(__IO u32 nCount);

 

int main (void)

{

    

SystemInit() ;//设置系统时钟SYSCLK

 

LED_GPIO_Config();

   while(1)

{

      LED1(ON);  //亮

 Delay(0x0FFFEF);

 LED1(OFF);

 LED2(ON);  

 Delay(0x0FFFEF);

 LED2(OFF);

 LED3(ON);  

 Delay(0x0FFFEF);

 LED3(OFF);

  }


以上代码在奋斗STM32上课运行,以下是推荐范例,用来对比找出自己的不足。

/*范例*/

#include"stm32f10x.h"

 

#define ON           1

#define OFF          0

 

#define DELAY_TIME   0x3FFFFF

 

enum 

{

        LED1 = 0,

LED2,

LED3,

MAX_LED,

};

 

typedef struct led_gpio_s

{

int                 num;    /* LED编号 */

GPIO_TypeDef        *group; /* LED使用的GPIO在哪一组: GPIOB or GPIOD */

        uint16_t            pin;    /* LED使用的GPIO组中的那一个pin: GPIO_Pin_x */

} led_gpio_t;

 

 

led_gpio_t        leds_gpio[MAX_LED] =

{

{LED1, GPIOB, GPIO_Pin_5}, /* LED1 用的GPB5 */

{LED2, GPIOD, GPIO_Pin_6}, /* LED2 用的GPD6 */

{LED3, GPIOD, GPIO_Pin_3}, /* LED3 用的GPD3 */

};

 

 

void init_led_gpio(void)

{

int                i;

GPIO_InitTypeDef   GPIO_InitStructure;

 

/* 使能PB和PD组 GPIO的时钟 */

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD , ENABLE);

/*设置 PB5(LED1), PD6(LED2), PD3(LED3)为 GPIO 输出推免模式,口线翻转速度为50MHz */

for(i=0; i

{

/*设置 PB5(LED1)为 GPIO 输出推免模式,口线翻转速度为50MHz */

GPIO_InitStructure.GPIO_Pin = leds_gpio[i].pin;     

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(leds_gpio[i].group, &GPIO_InitStructure);

  }

}

 

void turn_led(int which, int cmd)

{

         if(which<0 || which> MAX_LED )

return;

 

if(OFF == cmd)

GPIO_ResetBits(leds_gpio[which].group, leds_gpio[which].pin);

else

GPIO_SetBits(leds_gpio[which].group, leds_gpio[which].pin);

}

 

void Delay(__IO uint32_t nCount)

{

   for(; nCount != 0; nCount--) ;

}

 

int main(void)

{

/* 初始化系统时钟 */

        SystemInit();

/* 初始化各个LED的GPIO管脚 */

init_led_gpio();

 

  while(1)

  {

 /* 把LED1点亮, LED2和LED3灭掉 */

turn_led(LED1, ON);

 turn_led(LED2, OFF);

turn_led(LED3, OFF);

 Delay(DELAY_TIME);

 

 /* 把LED2点亮, LED1和LED3灭掉 */

turn_led(LED2, ON);

 turn_led(LED1, OFF);

turn_led(LED3, OFF);

 Delay(DELAY_TIME);

 

 /* 把LED3点亮, LED1和LED2灭掉 */

turn_led(LED3, ON);

 turn_led(LED2, OFF);

turn_led(LED1, OFF);

 Delay(DELAY_TIME);

  }

}


关键字:STM32   GPIO  流水灯例程

编辑:什么鱼 引用地址:/mcu/2018/ic-news091341317.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32F103C8T6-LED点亮程序
下一篇:最后一页

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32F0在IAR新建工程

1、到官网下载固件库,类似"STM32F0xx_StdPeriph_Lib_V1.5.0",解压得到文件"_htmresc"  "Libraries"  "Projects"   "Utilities".     ①“Libraries\STM32F0xx_StdPeriph_Driver”下的inc与src是底层驱动。     ②“Libraries\CMSIS\Device\ST\STM32F0xx\Source\Templates\iar
发表于 2018-09-13

STM32学习笔记之USB库文件分析

;-    文件,是跟stm32的USB相关寄存器相关的代码。看这段代码就要阅读stm32寄存器了。这个函数定义了设置和读取各个寄存器的值或某位的值,具体的看代码。6、usb_sil.c   -   文件。端点具体的接发数据函数就在这里定义。这个文件也很简单,只有三个函数:USB_SIL_Init()初始化USB设备IP和端点;USB_SIL_Write()往选中的端点中写入数据;USB_SIL_Read()从选中的端点中读出数据
发表于 2018-09-13

STM32库文件结构及CMSIS介绍

使用STM32库时,各库文件作用及关系:CMSIS标准介绍:
发表于 2018-09-13

STM32固件库文件编程结构思想的理解

STM32的固件库文件功能相当完善,提供的API完全能满足一般的项目需要。刚从51单片机转到STM32的人,肯定会被这么庞大的东东吓到,51单片机上对IO口操作,简简单单几行代码就搞定了,一个C源文件就搞定。假如用STM32,对IO口进行简单操作,远不是几行代码能搞定的。(其实直接操作寄存器也能搞定)。   废话不多说,这就带你解剖固件库文件,包你看完之后豁然开朗。   首先,请看一段简单的C语言代码#include <stdio.h>#define base  0x0012ff60#define flash ((TestType *)base)typedef
发表于 2018-09-13

STM32固件库文件树及构成详解

STM32固件库文件树及构成详解(库版本:STM32F10x_StdPeriph_Lib_V3.5.0)库减压后所有文件夹构成如下://///////////////////////////////////////////////////////////////////////////////////////////
发表于 2018-09-13
热门资源推荐

小广播

最新视频课程

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

相关热搜器件

大奖娱乐官方网站世界版权所有 京ICP证060456号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright ? 2005-2018 EEWORLD.com.cn, Inc. All rights reserved
2018白菜网址大全 开户送体验金68 最新送彩金网站大全 注册送68体验金 注册送白菜网