首页 > 学院 > 开发设计 > 正文

关于STM32的IO口IN/OUT控制

2019-11-07 23:51:42
字体:
来源:转载
供稿:网友

今天我们来讲解一下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灯的点动控制。中断法下次介绍。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表