位操作原理:
把每个比特膨胀为一个32位的字,当访问这些字的时候就达到了访问比特的目的,比如说BSRR寄存器有32个位,那么可以映射到32个地址上,我们去访问(读-改-写)这32个地址就达到访问32个比特的目的。
1)使能IO口时钟,调用函数RCC_AHB1PeriphColckCmd();
2)初始化IO口模式。调用函数GPIO_Init();
3)操作IO口,输出高低电平。使用未带操作。(输出操作ODR寄存器,输入操作IDR寄存器)
//<led.h>
#ifndef __LED_F //if not defined测试__LED_F是否被宏定义过
#define __LED_F //如果没有被宏定义过,宏定义__LED_F,并编译下面的程序段1
#define LED0 PFout(9) //DS0 下面可以直接用LED0=0;来对端口赋值
#define LED1 PFout(10) //DS1
void LED_Init(void); //程序段1
#else //如果被宏定义过,则直接执行程序段2
//程序段2#endif
//<main.c>
#include "stm32f4xx.h"
#include "led.h"
#include "delay.h"
int main(void)
{
delay_init(168); //初始化延时函数
LED_Init(); //初始化LED端口
/**下面是通过直接操作库函数的方式实现IO控制**/
while(1)
{
//<main.c>
#include "stm32f4xx.h"
#include "led.h"
#include "delay.h"
int main(void)
{
delay_init(168); //初始化延时函数
LED_Init(); //初始化LED端口
/**下面是通过直接操作库函数的方式实现IO控制**/
while(1)
{
PFout(9)=0;
PFout(10)=0;
delay_ms(500); //延时500ms
PFout(9)=1;
PFout(10)=1;
delay_ms(500);
}
}
delay_ms(500); //延时500ms
}
}