以 led闪烁中的flashLed函数例子:
库函数操作简单,但是效率不如寄存器操作的高;
寄存器操作很复杂,因为要熟悉上百个寄存器,但是程序效率很高
/**下面是通过直接操作库函数的方式实现IO控制**/
while(1)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_9); //LED0对应引脚GPIOF.9拉低,亮 等同LED0=0;
GPIO_SetBits(GPIOB,GPIO_Pin_10); //LED1对应引脚GPIOF.10拉高,灭 等同LED1=1;
delay_ms(500); //延时300ms
GPIO_SetBits(GPIOB,GPIO_Pin_9); //LED0对应引脚GPIOF.0拉高,灭 等同LED0=1;
GPIO_ResetBits(GPIOB,GPIO_Pin_10); //LED1对应引脚GPIOF.10拉低,亮 等同LED1=0;
delay_ms(500); //延时300ms
}
/**
*******************下面注释掉的代码是通过 位带 操作实现IO口控制**************************************/
int main(void)
{
delay_init(168); //初始化延时函数
LED_Init(); //初始化LED端口
while(1)
{
LED0=0; //LED0亮
LED1=1; //LED1灭
delay_ms(500);
LED0=1; //LED0灭
LED1=0; //LED1亮
delay_ms(500);
}
}
/**************************************************************************************************
**/
/**
*******************下面注释掉的代码是通过 直接操作寄存器 方式实现IO口控制**************************************/
int main(void)
{
delay_init(168); //初始化延时函数
LED_Init(); //初始化LED端口
while(1)
{
GPIOF->BSRRH=GPIO_Pin_9;//LED0亮
GPIOF->BSRRL=GPIO_Pin_10;//LED1灭
delay_ms(500);
GPIOF->BSRRL=GPIO_Pin_9;//LED0灭
GPIOF->BSRRH=GPIO_Pin_10;//LED1亮
delay_ms(500);
}
}
/**************************************************************************************************
**/
/*我想说我更喜欢这样的,呵呵*/
while(1)
{
//FlashLED();
*(unsigned int*)(0x40010c0c) |=0x200 ;
delay_ms(100);
*(unsigned int*)(0x40010c0c) &=0xfffffdff ;
delay_ms(100);
}
上一篇:STM32库函数和寄存器操作的思考
下一篇:STM32之寄存器访问
推荐阅读最新更新时间:2024-03-16 16:12