今天我们来讲解一下io口输入输出的控制,其实其差别仅仅在于IO口模式不同而已。
先来看看硬件电路图,已在图中表明IO管脚。
打开模板文件template,首先建立LED灯的初始化,其次建立按键初始化,当初始化完成后,我们便能按照自己的意图通过按键控制LED灯了。
LED初始化。
void led_init(void){GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD, ENABLE);//´ò¿ªGPIOB¡¢DµÄʱÖÓ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//ʹÓÃÁËPB5 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//ËÙ¶È£º50M£¬ËٶȲ»¿ÉËæÒâ¸ü¸Ä£¬µã»÷50MÓÒ¼ü¿É¿´µ½Óм¸Öֿɸü¸ÄµÄËÙ¶È¡£ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//GPIOģʽ£ºÍÆÍìÊä³öģʽ¡£Í¬ÑùÓÒ¼ü¿É¿´µ½¼¸ÖÖģʽ¡£GPIO_Init(GPIOB, &GPIO_InitStructure);//³õʼ»¯º¯Êý GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;//ʹÓÃÁËPD12 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//ËÙ¶È£º50M£¬ËٶȲ»¿ÉËæÒâ¸ü¸Ä£¬µã»÷50MÓÒ¼ü¿É¿´µ½Óм¸Öֿɸü¸ÄµÄËÙ¶È¡£ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//GPIOģʽ£ºÍÆÍìÊä³öģʽ¡£Í¬ÑùÓÒ¼ü¿É¿´µ½¼¸ÖÖģʽ¡£ GPIO_Init(GPIOD, &GPIO_InitStructure);//³õʼ»¯º¯Êý //GPIOB->BRR = 0x0020;//д¼Ä´æÆ÷£¬°Ñ¶ÔӦΪÀ³ÉµÍµçƽ.GPIOB->BSRR |= (1<<5) ;//д1 ´Ë³õʼ»¯¿ØÖÆ×ÅGPIOB¡¢DµÄÃð¡£GPIOD->BSRR |= (1<<12) ;//д1//GPIOB->BRR &= ~(1<<5); //д0}
按键初始化
void key_init(void)//½«IO¿ÚÉèÖÃΪÊäÈëģʽʱ£¬²»ÐèÒªÌí¼ÓIOËÙ¶È¡£{GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD, ENABLE);//´ò¿ªGPIOBµÄʱÖÓ£¬´Ë´¦Ôٴγõʼ»¯GPIODʱÒòΪÈç¹û½«led_init()×¢ÊÍ£¬ÄÇôkey2½«²»¿ÉÓᣠGPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;//ʹÓÃÁËPB5 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//GPIOģʽ£ºÉÏÀGPIO_Init(GPIOC, &GPIO_InitStructure);//³õʼ»¯º¯Êý GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//ʹÓÃÁËPD12 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//GPIOģʽ£ºÉÏÀGPIO_Init(GPIOD, &GPIO_InitStructure);//³õʼ»¯º¯Êý }
最后在控制。
int main(void){led_init();key_init();while (1){if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13)==0){GPIOB->BRR |= (1<<5) ;//BRRÓÐЧʱΪµÍ£ LEDÁÁwhile(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13)==0);//µÈ´ý°´¼üÊÍ·Å¡£GPIOB->BSRR |= (1<<5) ;//BSRRÓÐЧʱΪ¸ß¡£LEDÃð}if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3)==0){GPIOD->BRR |= (1<<12) ;//BRRÓÐЧʱΪµÍ£ LEDÁÁwhile(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3)==0);//µÈ´ý°´¼üÊÍ·Å¡£GPIOD->BSRR |= (1<<12) ;//BSRRÓÐЧʱΪ¸ß¡£LEDÃð}}}
以上代码用的是查询法,实现led灯的点动控制。中断法下次介绍。
新闻热点
疑难解答