微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32学习笔记——使用函数库编程控制GPIO口输出

STM32学习笔记——使用函数库编程控制GPIO口输出

时间:11-28 来源:互联网 点击:

C/C++Compiler>

  1. If your application source code include CMSISheader files explicitly, then you should not check theUse CMSIScheck-boxProject>Options...>GeneralOptions>Library Configuration>

    即将”core_cm3.h”改名或删除,然后勾选工程设置中的”Use CMSIS”选项即可。

    l经过摸索,通过拷贝IAR安装文件夹…IAR SystemsEmbedded Workbench6.0armCMSISInclude下的“core_cm3.h”、“core_cmFunc.h”、“core_cmInstr.h”三个文件到...projectLibrariesCMSISCM3DeviceSupportSTSTM32F10x文件中亦可成功编译。

    2.使用函数库编程

    个人觉得,使用函数库编程,主要是根据《基于ARM的32位MCU STM32F101xx和STM32F103xx固件库手册》(以下简称《固件库手册》),知晓各函数的用法,然后对其进行顶层调用。

    2.1与本例程有关的几个函数:

    2.1.1RCC_APB2PeriphClockCmd函数

    函数名

    RCC_APB2PeriphClockCmd

    函数原型

    Void RCC_APB2PeriphClockCmd(u32RCC_APB2Periph,FunctionalState

    NewState)

    行为描述

    使能或关闭高速APB(APB2)外围设备时钟

    输入参数1

    RCC_APB2Periph:用于门控时钟的AHB2外围设备

    涉及章节:RCC_AHB2Periph结构详细说明了这个参数允许的值。

    输入参数2

    NewState:专用外围设备时钟的新状态。

    这个参数可以是:ENABLE或DISABLE。

    输出参数

    返回参数

    调用前提条件

    调用函数

    RCC_APB2Periph值:

    RCC_APB2Periph

    描述

    RCC_APB2Periph_AFIO

    交替功能I/O时钟

    RCC_APB2Periph_GPIOA

    IO端口A时钟

    RCC_APB2Periph_GPIOB

    IO端口B时钟

    RCC_APB2Periph_GPIOC

    IO端口C时钟

    RCC_APB2Periph_GPIOD

    IO端口D时钟

    RCC_APB2Periph_GPIOE

    IO端口E时钟

    RCC_APB2Periph_ADC1

    ADC1接口时钟

    RCC_APB2Periph_ADC2

    ADC2接口时钟

    RCC_APB2Periph_TIM1

    TIM1时钟

    RCC_APB2Periph_SPI1

    SPI1时钟

    RCC_APB2Periph_USART1

    USART1时钟

    RCC_APB2Periph_ALL

    所有APB2外围设备时钟


    例子:

    [cpp]view plaincopy

    1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_SPI1,ENABLE);


    2.1.2标签定义
    为了访问GPIO寄存器,_GPIO,_AFIO,_GPIOA,_GPIOB,_GPIOC,_GPIOD及_GPIOE必须在stm32f10x_conf.h中进行定义:

    [cpp]view plaincopy

    1. #define_GPIO
    2. #define_GPIOA
    3. #define_GPIOB
    4. #define_GPIOC
    5. #define_GPIOD
    6. #define_GPIOE
    7. #define_AFIO

    关于此标签定义,还存在疑问,因为即便是没有进行如此定义,编译依旧通过,寄存器依旧可用。

    2.1.3声明PPP_InitTypeDef结构

    在初始化和配置外围模块时,必须在主应用程序文件中,声明一个PPP_InitTypeDef结构(PPP是外围模块),例如:

    [cpp]view plaincopy

    1. PPP_InitTypeDefPPP_InitStructure;

    PPP_InitStructure是一个位于数据存储区的有效变量。

    2.1.4GPIO_Init函数

    函数名

    GPIO­_Init

    函数原型

    void GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef* GPIO_InitStruct)

    功能描述

    按照GPIO_InitStruct的特定参数初始化GPIO部件

    输入参数1

    GPIOx:x可为A到E来选择特定的GPIO部件

    输入参数2

    GPIO_InitStruct:指向GPIO_InitTypeDef结构的指针,它包含特定GPIO部件的配置信息。参考GPIO_InitTypeDef结构

    输出参数

    返回参数

    前提条件

    调用函数

    GPIO_InitTypeDef结构

    GPIO_InitTypeDef在stm32f10x_gpio.h中如下定义:

    [cpp]view plaincopy

    1. typedefstruct
    2. {
    3. u16GPIO_Pin;
    4. GPIO_Speed_TypeDefGPIO_Speed;
    5. GPIO_Mode_TypeDefGPIO_Mode;
    6. }GPIO_InitTypeDef


    GPIO_Pin值

    可用”|”完成多引脚的配置。

    GPIO_Pin

    描述

    GPIO_Pin_None

    没有引脚被选择

    GPIO_Pin_x

    引脚x被选择(x=0…15)

    GPIO_Pin_All

    所有引脚都被选择

    GPIO_Speed值

    GPIO_Speed

    描述

    GPIO_Speed_10MHz

    最大输出频率=10MHz

    GPIO_Speed_2MHz

    最大输出频率=2MHz

    GPIO_Speed_50MHz

    最大输出频率=50MHz

    GPIO_Mode值

    GOIO_Mode是用来配置选定引脚的操作模式的。

    GPIO_Mode

    描述

    GPIO_Mode_AIN

    模拟输入

    GPIO_Mode_IN_FLOATING

    浮点输入

    GPIO_Mode_IPD

    下拉输入

    GPIO_Mode_IPU

    上拉输入

    GPIO_Mode_Out_OD

    开漏输出

    GPIO_Mode_Out_PP

    推拉输出

    GPIO_Mode_AF_OD

    开漏输出备用功能

    GPIO_Mode_AF_PP

    推拉输出备用功能


    实例:

    [cpp]view plaincopy

    1. GPIO_InitTypeDefGPIO_InitStructure;
    2. GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
    3. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
    4. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
    5. GPIO_Init(GPIOA,&GPIO_InitStructure);


    2.1.5GPIO_SetBits函数

    函数名

    GPIO_SetBits

    函数原型

    voidGPIO_SetBits(GPIO_TypeDef* GPIOx,u16 GPIO_Pin

    功能描述

    置位选定的端口位

    输入参数1

    GPIOx:x=A…E

    输入参数2

    GPIO_Pin:GPIO_Pin_x的任意组合,x=0…15。

    输出参数

    返回参数

    前提条件

    调用函数

    实例:

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top