stm32——跑马灯实验(用库函数实现)

库函数介绍

1,初始化函数:
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
作用:初始化一个或者多个IO口(同一组)的工作方式和速度。该函数主要是操作GPIO_CRL(CRH)寄存器,在上拉或者下拉的有时候有设置BSRR或者BRR寄存器
例如:

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitTypeDef.GPIO_Pin = GPIO_Pin_5;//LED0-->PB.5 端口配置
GPIO_InitTypeDef.GPIO_Mode = GPIO_Mode_OUT_PP;//推挽输出
GPIO_InitTypeDef.GPIO_Speed = GPIO_Speed_50MHz;//IO口速度为50MHz
GPIO_Init(GPIO,&GPIO_InitStructure);//根据设定参数初始化GPIO.5

2,2个读取输入电平函数:
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
作用:读取某个GPIO的输入电平。(实际操作的是GPIOx_IDR寄存器)
例如:GPIO_ReadInputData(GPIOA_Pin_5)//读取GPIOA.5组中所以IO口输入电平

uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
作用:读取某组GPIO的输入电平。(实际操作的是GPIOx_IDR寄存器)
例如:GPIO_ReadInputData(GPIOA)//读取GPIOA组中所以IO口输入电平

步骤:

一、文件创建:

文件封装学习:布尔博客 – 高校青年技术社区

1,用keil5打开工程模板文件,然后添加project items,命名为HAREWARE

2,然后打开工程模板文件夹创建HAREWARE文件夹(名字任意),再在里面创建LED文件夹。

3,下一步创建LED.c和lLED.h文件,并保存在LED文件夹中

4,将led.c添加入HAREWARE中,同时将路径包含MKD。(步骤自上而下)

二、写代码:

(1)led.c的代码:

#include "led.h"
#include "stm32f10x.h"//引用顶层头文件,否则函数不可用

void LED_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStrue;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//GPIOB
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//GPIOE
    //或者使用或运算,则可写为:
    //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE,ENABLE);

    //初始化GPIOB时钟
    GPIO_InitStrue.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出模式
  GPIO_InitStrue.GPIO_Pin=GPIO_Pin_5;
    GPIO_InitStrue.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOB,&GPIO_InitStrue);
    GPIO_SetBits(GPIOB,GPIO_Pin_5);//输出Pin5高电平

    //初始化GPIOE时钟
    GPIO_InitStrue.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出模式
  GPIO_InitStrue.GPIO_Pin=GPIO_Pin_5;
    GPIO_InitStrue.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOE,&GPIO_InitStrue);
        GPIO_SetBits(GPIOE,GPIO_Pin_5);//输出Pin5高电平

}

(2)led.h代码:

#ifndef __LED_H //避免重复引用
#define __LED_H


void LED_Init(void);//LED初始化函数,无入口参数


#endif

(3)main.c代码:

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"

int main(void)
{
    delay_init();//调用延时函数
    LED_Init();

    while(1){


        GPIO_SetBits(GPIOB,GPIO_Pin_5);
        GPIO_SetBits(GPIOE,GPIO_Pin_5);

        delay_ms(500);//设置延时500ms

        //设置低电平
        GPIO_ResetBits(GPIOB,GPIO_Pin_5);
        GPIO_ResetBits(GPIOE,GPIO_Pin_5);

        delay_ms(500);//设置延时500ms
    }


}

文章转载自:http://blog.qmgua.com/?id=148

                                                          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值