您的位置:首页 > 编程语言 > C语言/C++

stm32的C语言相关笔记

2016-09-23 23:33 218 查看
GPIO_InitTypeDef  GPIO_InitStructure;typedef struct{  uint32_t GPIO_Pin;  GPIOMode_TypeDef GPIO_Mode;     GPIOSpeed_TypeDef GPIO_Speed;   GPIOOType_TypeDef GPIO_OType;  GPIOPuPd_TypeDef GPIO_PuPd;    }GPIO_InitTypeDef;32中包含大量的结构体定义,如上为最基本的用typedef定义新的结构体定义名GPIO_SetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)第一个参数为指向某个结构体的指针,其结构体实质如下包含了GPIO的各个寄存器,实际传入函数的是各寄存器的地址typedef struct{  __IO uint32_t MODER;    __IO uint32_t OTYPER;    __IO uint32_t OSPEEDR;    __IO uint32_t PUPDR;      __IO uint32_t IDR;        __IO uint32_t ODR;       __IO uint16_t BSRRL;     __IO uint16_t BSRRH;     __IO uint32_t LCKR;      __IO uint32_t AFR[2];  } GPIO_TypeDef;#define     __IO    volatile 英[ˈvɒlətaɪl]volatile的作用是:作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.简单地说就是防止编译器对代码进行优化.比如如下程序:
对外部硬件而言,上述四条语句分别表示不同的操作,会产生四种不同的动作,但是编译器却会对上述四条语句进行优化,认为只有XBYTE[2]=0x58(即忽略前三条语句,只产生一条机器代码)。如果键入volatile,则编译器会逐一的进行编译并产生相应的机器代码(产生四条代码)#define GPIOF               ((GPIO_TypeDef *) GPIOF_BASE)继续追踪下去实质为外部地址的映射,GPIOF_BASE是一个GPIOF的基址,(GPIO_TypeDef *) 将其强制转化为指向结构体的指针,所以GPIOF实际是一个指针

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: