结构体在固件库中的应用

 

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

      结构体指针成员变量引用方法是通过“→”符号来实现,比如要访问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进行编程序的时候,都必须要事先对相应端口和时钟进行配置,才可以使用。

 

posted @ 2015-12-22 22:17  愤怒的小贱  阅读(798)  评论(0编辑  收藏  举报