关于STM32的IO口IN/OUT控制
来源:互联网 发布:linux缺少iso 9660图像 编辑:程序博客网 时间:2024/05/20 23:03
今天我们来讲解一下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灯的点动控制。中断法下次介绍。
- 关于STM32的IO口IN/OUT控制
- stm32 pc13~pc15 tamper-rtc OSC32-IN/OSC32-OUT 配置成IO口
- stm32库函数IO口控制
- STM32用IO口控制步进电机的简单程序
- STM32用IO口控制步进电机的简单程序
- STM32控制IO基本配置的讲解
- STM32的IO口
- 关于cisco网络设备访问控制列表ACL中IN、OUT的理解
- STM32的IO口配置
- IO:in、out和err
- 关于stm32 控制SIM900A的控制心得与体会
- STM32的IO口的设置
- 关于STM32中PA15引脚作为普通io的使用
- STM32的IO口基本操作
- stm32 IO口模式的寄存器配置
- STM32中八种IO口模式的区别
- STM32 IO口学习
- STM32笔记-IO口
- Android NDk环境配置
- React Native项目遇到的问题 -> 端口号修改
- Contact Form 7及WordPress无法收取,发送邮件的解决办法
- Java线程
- mybatis 分页查询 内含有测试类实体类映射文件与映射接口
- 关于STM32的IO口IN/OUT控制
- 未来的我们可能需要的三个能力
- Android: 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系
- Effective C++——条款02
- Contact Form 7邮件发送失败的解决办法
- 排序算法三个(by go)
- Deeplearning4j 实战(5):基于多层感知机的Mnist压缩以及在Spark实现
- Problem B. gBalloon Google APAC 2016 University Test Round D
- nefu 119 组合素数