结构体在固件库中的应用

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

结构体指针成员变量引用方法是通过“→”符号来实现,比如要访问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);       }   }

此程序为PB.5口进行LED灯的闪亮程序。

因此,在对STM32进行编程序的时候,必须要事先对相应端口进行配置,才可以使用。

时间: 2024-07-30 10:11:02

结构体在固件库中的应用的相关文章

复制已存在的数据库结构(不包括库中的数据)

我这里的需求是做若干个结构完全一样的数据库,这些数据库是并列的关系(当然这些库中的数据不一样) 使用的VS2013,SQL Server2010 1.选中要复制的数据库,右击,任务,生成脚本(E) 2.弹出“生成和发布脚本”的页面,下一步,若复制整个数据库,则选中“编写这个那个数据库及所有数据库对象的脚本(E)";若只是复制已有数据库中部分表.视图,则选中“选择特定数据库对象(O)”.这里我选中”编写整个数据库及所有数据库对象的脚本(E)“.下一步. 3.文件名(I)路径,就是把生成的SQL语句

task_struct结构体字段介绍--Linux中的PCB

task_struct结构体 字段介绍 Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程, task_struct是Linux中的[进程控制块PCB结构]的具体数据结构 这个结构体包含了一个进程所需的所有信息.它定义在linux-2.6.38.8/include/linux/sched.h文件中. 下面对task_struct这个结构体 进行各个字段的详细介绍 1. 调度数据成员(1) volatile long states;表示进程的当前状态:? TASK_RU

JNI——结构体(即java中的类)的传入与设置——NativeMethod映射表

参考:http://www.cnblogs.com/skywang12345/archive/2013/05/26/3093593.html java 类: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 package com.skywang.ndk; public class MyInfo {     private String  mName;                        

Linux中的两个经典宏定义:获取结构体成员地址,根据成员地址获得结构体地址;Linux中双向链表的经典实现。

倘若你查看过Linux Kernel的源码,那么你对 offsetof 和 container_of 这两个宏应该不陌生.这两个宏最初是极客写出的,后来在Linux内核中被推广使用. 1. offsetof 1.1 offsetof介绍 定义:offsetof在linux内核的include/linux/stddef.h中定义.#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) 说明:获得结构体(TYPE)的变量成员(

C语言:将结构体存放到文件中

#include <stdio.h> #include <stdlib.h> #define MAXTLEN 70 #define MAXALEN 70 #define MAXBKS 10 struct book{ char title[MAXTLEN]; char author[MAXALEN]; float value; }; int main(){ struct book library[MAXBKS]; //图书馆 int count = 0, index, filecou

通过键盘向结构体输入数据然后存到文件中,然后从文件中读出来,在显示器上进行显示

#include "stdafx.h" #include <stdio.h> #include <stdlib.h> struct student { char name[10]; int num; int age; char addr[40]; }; student s1[2],s2[2],*p1,*p2; int main() { FILE *fp; char ch; int i; p1 = s1; p2 = s2; if(fopen_s(&fp,&

C#调用C/C++动态库 封送结构体,结构体数组

因为公司一直都是做C++开发的,因客户需要要提供C#版本接口,研究了一下C#,发现其强大简洁, 在跨语言调用方面封装的很彻底,提供了强大的API与之交互.这点比JNA方便多了. Java与C#都只能调用C格式导出动态库,因为C数据类型比较单一,容易映射. 两者都是在本地端提供一套与之映射的C#/java描述接口,通过底层处理这种映射关系达到调用的目的. 一. 结构体的传递 Cpp代码   #define JNAAPI extern "C" __declspec(dllexport) /

C语言开发函数库时利用不透明指针对外隐藏结构体细节

1 模块化设计要求库接口隐藏实现细节 作为一个函数库来说,尽力减少和其调用方的耦合,是最基本的设计标准.C语言,作为经典"程序=数据结构+算法"的践行者,在实现函数库的时候,必然存在大量的结构体定义,接口函数需要对这些结构体进行操作.同时,程序设计的模块化要求库接口尽量少的暴露其实现细节,接口参数尽量使用基本数据类型,尽量避免在形参中暴露库内结构体的定义. 2 隐藏结构体的两种方法 以笔者粗浅的认识,有两种最常用的方法,可以实现库内结构体定义的隐藏:接口函数形参使用结构体指针,接口函数

SylixOS中时间结构体探究

1. 相关名词解释 1.1      什么是timeval结构体 timeval结构体在SylixOS系统中的定义如程序清单1.1所示: 程序清单1.1 timeval结构体定义 struct timeval {time_t         tv_sec;                /*  seconds                     */LONG           tv_usec;               /*  microseconds                */