zoukankan      html  css  js  c++  java
  • STM32使用之GPIO

    STM32第一个例子

    //**********************************************************************
    // 作者:YYYtech
    // 时间:2007/12/14
    //***********************************************************************
    /***********************************************************************
    main文件,GPIO操作,完成最简单的IO操作实验,就是控制LED灯
    4个LED分别对应PC的6、7、8、9引脚。4个LED流水显示
    **************************************************************************/
    #include "stm32f10x_lib.h"


    GPIO_InitTypeDef GPIO_InitStructure;

    void LED_Init(void)
    {
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    }

    void LED_TurnOn(u8 led)
    {
      
    }

    void Delay(vu32 nCount)
    {
    for(; nCount != 0; nCount--);
    }

    main()
    {

    //RCC_Configuration();
    LED_Init();

    while(1)
    {
       GPIO_SetBits(GPIOC, GPIO_Pin_9);
       Delay(0x8ffff);
       GPIO_ResetBits(GPIOC, GPIO_Pin_9);
       Delay(0x8ffff);
       GPIO_SetBits(GPIOC, GPIO_Pin_10);
       Delay(0x8ffff);
       GPIO_ResetBits(GPIOC, GPIO_Pin_10);
       Delay(0x8ffff);
       GPIO_SetBits(GPIOC, GPIO_Pin_11);
       Delay(0x8ffff);
       GPIO_ResetBits(GPIOC, GPIO_Pin_11);
       Delay(0x8ffff);
       GPIO_SetBits(GPIOC, GPIO_Pin_12);
       Delay(0x8ffff);
       GPIO_ResetBits(GPIOC, GPIO_Pin_12);
       Delay(0x8ffff);
    }
    }
    注意:在这里用到了RCC和GPIO的库函数,所以必须把这两个函数加入工程。
      
    关于固件库函数在文件夹:C:\Keil\ARM\RV31\LIB\ST\STM32F10x
    为了不在操作过程中避免改变KEIL文件夹下的库函数,可以固件函数库放到其他文件夹下,如:E:\jy\work\STM\WxlStm32\LAB\library
    其中stm32f10x_lib.c文件是整个库的一些定义,是必须要的。
    加入后的工程为:

    GPIO库函数简单说明:
    函数名称 功能描述
    GPIO_DeInit 重新初始化外围设备GPIOx相关寄存器到它的默认复位值
    GPIO_AFIODeInit 初始化交错功能(remap, event control和 EXTI 配置) 寄存器
    GPIO_Init 根据GPIO_初始化结构指定的元素初始化外围设备GPIOx
    GPIO_StructInit 填充GPIO_初始化结构(GPIO_InitStruct)内的元素为复位值
    GPIO_ReadInputDataBit 读指定端口引脚输入数据
    GPIO_ReadInputData 读指定端口输入数据
    GPIO_ReadOtputDataBit 读指定端口引脚输出数据
    GPIO_ReadOtputData 读指定端口输出数据
    GPIO_SetBits 置1指定的端口引脚
    GPIO_ResetBits 清0指定的端口引脚
    GPIO_WriteBit 设置或清除选择的数据端口引脚
    GPIO_Write 写指定数据到GPIOx端口寄存器
    GPIO_ANAPinConfig 允许或禁止 GPIO 4 模拟输入模式
    GPIO_PinLockConfig 锁定GPIO引脚寄存器
    GPIO_EventOutputConfig 选择GPIO引脚作为事件输出
    GPIO_EventOutputCmd 允许或禁止事件输出
    GPIO_PinRemapConfig 改变指定引脚的影射
    GPIO_EMIConfig 允许或禁止GPIO 8 和 9 的EMI 模式
    拓展实验:
    在上面LED灯流水显示的基础之上加上按键程序,首先来看看按键的原理图:

    当然这个原理图也是相当之简单的,不用读解释了,唯一注意的是OK键与其他三个键的区别是按下为高电平,其余三个按下为低电平。
    加入后的完整清单如下:
    //**********************************************************************
    // 作者:JingYong
    // 时间:2008/4/24
    //***********************************************************************
    /***********************************************************************
    GPIO操作,完成最简单的IO操作实验,用按键控制LED灯闪烁
    **************************************************************************/
    #include "stm32f10x_lib.h"

    GPIO_InitTypeDef GPIO_InitStructure;
    //键盘定义
    #define    KEY_OK     GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)
    #define    KEY_DOWN    GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)
    #define    KEY_UP     GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2)
    #define    KEY_ESC    GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3)
    //LED初始化
    void LED_Init(void)
    {
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
    }
    //按键初始化
    void KEY_Init (void)
    {
        GPIO_InitTypeDef gpio_init;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
        gpio_init.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
        gpio_init.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA, &gpio_init);
    }
    //延迟函数
    void Delay(vu32 nCount)
    {
    for(; nCount != 0; nCount--);
    }
    //主函数
    main()
    {
    //RCC_Configuration();
    LED_Init();
    KEY_Init ();

    while(1)
    {
       if(!KEY_ESC)
       {
        while(!KEY_ESC) ;
        GPIO_SetBits(GPIOC, GPIO_Pin_9);
        Delay(0x8ffff);
        GPIO_ResetBits(GPIOC, GPIO_Pin_9);
        Delay(0x8ffff);
       }
       else if(!KEY_UP)
       {
        while(!KEY_UP) ;
        GPIO_SetBits(GPIOC, GPIO_Pin_10);
        Delay(0x8ffff);
        GPIO_ResetBits(GPIOC, GPIO_Pin_10);
        Delay(0x8ffff);
       }
       else if(!KEY_DOWN)
       {
        while(!KEY_DOWN) ;
        GPIO_SetBits(GPIOC, GPIO_Pin_11);
        Delay(0x8ffff);
        GPIO_ResetBits(GPIOC, GPIO_Pin_11);
        Delay(0x8ffff);
       }
       else if(KEY_OK)
       {
        while(KEY_OK) ;
        GPIO_SetBits(GPIOC, GPIO_Pin_12);
        Delay(0x8ffff);
        GPIO_ResetBits(GPIOC, GPIO_Pin_12);
        Delay(0x8ffff);
       }
    }
    }
    该例子是按下不同的按键,闪烁对应的LED灯。

  • 相关阅读:
    WSP部署错误—SharePoint管理框架中的对象“SPSolutionLanguagePack Name=0”依赖其他不存在的对象
    Elevate Permissions To Modify User Profile
    Error with Stsadm CommandObject reference not set to an instance of an object
    ASP.NET MVC3添加Controller时没有Scaffolding options
    测试使用Windows Live Writer写日志
    配置TFS 2010出现错误—SQL Server 登录的安全标识符(SID)与某个指定的域或工作组帐户冲突
    使用ADO.NET DbContext Generator出现错误—Unable to locate file
    CSS
    HTML DIV标签
    数据库
  • 原文地址:https://www.cnblogs.com/sky1991/p/2592369.html
Copyright © 2011-2022 走看看