zoukankan      html  css  js  c++  java
  • 结构体在固件库中的应用

          上次介绍了一般结构体的定义以及引用方法,那么接下来将对结构体在官方固件库是如何具体使用的做出简单说明。

          结构体指针成员变量引用方法是通过“→”符号来实现,比如要访问student1结构体指针指向的结构体的成员变量name,那么方法是:

    stuednt1—>name;

           如在STM32官方固件库中对端口使用模式结构体定义如下:

                           typedef enum
                                 { GPIO_Mode_AIN = 0x0,            //模拟输入模式
                                   GPIO_Mode_IN_FLOATING = 0x04,   //浮空输入模式
                                   GPIO_Mode_IPD = 0x28,           //下拉输出模式
                                   GPIO_Mode_IPU = 0x48,           //上拉输出模式
                                   GPIO_Mode_Out_OD = 0x14,        //开漏输出模式
                                   GPIO_Mode_Out_PP = 0x10,        //通用推挽输出模式
                                   GPIO_Mode_AF_OD = 0x1C,         //复用功能开漏输出
                                   GPIO_Mode_AF_PP = 0x18          //复用功能推挽输出
                                 }GPIOMode_TypeDef;

    typedef enum //端口传输速率设定
    {  GPIO_Speed_10MHz = 1,
    GPIO-Speed-2MHz;
    GPIO-Speed-50MHz;
     }GPIOSpeed_TypeDef;
                           typedef struct                 
                                 { uint16-t GPIO-Pin;
    GPIOSpeed-Typedef GPIO-Speed;
    GPIOMode-TypeDef GPIO-Mode;
    }GPIO_InitTypeDef;

     

         以上为官方库中对于端口的一些设定,具体的引用如下举例:

      #include "stm32f10"
    void Delay(u32 count)
    {
    u32 i=0;
    for(;i<count;i++);
    }
    int main(void)
    {
    GPIO-InitTypeDef GPIO-InitStructure; //定义结构体类型
    RCC-APB2PeriphClockCmd(RCC-APB2Peruph-GPIO,ENABLE); //启用外设时钟APB2
    GPIO-InitStructure.GPIO-Pin=GPIO-Pin-5; //配置PB.5端口

    GPIO-InitStructure.GPIO-Mode=GPIO-Mode-Out-PP; //推挽输出
    GPIO-InitStructure.GPIO-Speed-50MHz; //IO口速度为50MHz
    GPIO-Init(GPIOB,GPIO-Pin-5); //PB.5端口初始化
    while(1)
    {
    GPIO-ResetBits(GPIOB,GPIO-Pin-5); //PB.5B输出低
    Delay(3000000); //延时
    GPIO-SetBits(GPIOB,GPIO-Pin-5); //PB.5输出高
    Delay(3000000);
    }
    }

          上述代码为对库函数进行操作使PB5口进行LED灯的闪亮程序,也可以对寄存器进行操作,程序如下:

    while(1)
     {
         GPIOB->BRR=0x0020;
         delay(3000000);     
         GPIOD->BSRR=0x0020;
         delay(3000000);
     }
    }

          如上两种不同的操作,最终达到的效果相同,但是可以看出,无论是何种操作方式,在对STM32进行编程序的时候,都必须要事先对相应端口和时钟进行配置,才可以使用。

  • 相关阅读:
    MySQL复制中slave延迟监控
    便于理解mysql内幕的各种逻辑图组
    MYSQL INNODB PAGE一督
    MySQL的show语句大全
    semi-consistent简介
    MYSQL常见的可优化点
    [MySQL 5.6] MySQL 5.6 group commit 性能测试及内部实现流程
    [MySQL5.6] 最近对group commit的小优化
    基于HTML5技术的电力3D监控应用(二)
    基于HTML5技术的电力3D监控应用(一)
  • 原文地址:https://www.cnblogs.com/lwangj/p/5068357.html
Copyright © 2011-2022 走看看