虽然使用寄存器操作是最直接的操作硬件的方式,但是在STM32中提供给了一种更加方便快捷的使用方式——库函数。库函数是实际上是一种对于寄存器以结构体形式的封装。
首先,在stm32中库函数主要分为了两块:stm32标准库库CMSIS目录下的<core_cm3>和<stm32f10x_it>文件和stm32标准外设库STM32F10x_StdPeriph_Driver 目录下src目录中的.c文件。 只要将这些头文件添加到项目中即可使用。
首先观察RCC,在上一次的写入中,使用到了RCC下的APB2ENR寄存器使能APB2外设时钟,找到在<STM32F10x库函数文件>文档中关于这个寄存器的库函数
使用库函数改写原函数即为
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);// RCC -> APB2ENR |= (1<<2);
依次可修改GPIO中的库函数,那么修改完之后的代码为以下
#include "stm32f10x.h"
#include "main.h"
void Delay(unsigned long N);
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//GPIOA -> CRL &= 0xfff0000f;
//GPIOA -> CRL |= 0x00033330;
//GPIOA -> ODR &= ~((1<<1)|(1<<2)|(1<<3)|(1<<4));
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); // RCC -> APB2ENR |=(1<<2);
while(1)
{
GPIO_WriteBiy(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4),Bit_SET;
//GPIOA -> ODR &= ((1<<1)|(1<<2)|(1<<3)|(1<<4));
Delay(10000);
}
}
void Delay(unsigned long N)
{
for(;N!=0;N--);
}