• GPIO知识点整理


     1 //GPIO的作业,抄两次,注意:本文件是知识点的整理不是可以直接运行的程序。
     2 
     3 //STM32必须包含的头文件
     4 #include "stm32f10x.h"
     5 //GPIO相关头文件
     6 #include "stm32f10x_gpio.h"
     7 //外部中断相关头文件
     8 #include "stm32f10x_exti.h"
     9 //内核相关的头文件,NVIC在这里
    10 #include "misc.h"
    11 
    12 /*GPIO配置使用步骤
    13 1.使能,调用函数:
    14 RCC_APB2PeriphClockCmd(
    15     RCC_APB2Periph_外设名,ENABLE);
    16 第一个参数是挂载在APB2总线下面的外设
    17 第二个参数是允许(ENABLE)或不允许(DISABLE)
    18 
    19 2.定义GPIO配置结构体的变量
    20 GPIO_InitTypeDef a;
    21 //这里若把GPIO改为
    22 //NVIC、TIM、I2C等就是
    23 //其他的外设配置结构体
    24 a.GPIO_Pin = GPIO_Pin_5;//GPIO的5号引脚
    25 a.GPIO_Speed = GPIO_Speed_50MHz;//速度
    26 a.GPIO_Mode = GPIO_Mode_Out_PP;//工作方式(推挽输出)
    27 
    28 3.调用函数初始化GPIO
    29 GPIO_Init(GPIOB,&a);//这里要传入a的地址
    30 
    31 4.以上步骤GPIO就配置完成了,下面可以赋值
    32 //设置PB5为低电平
    33 GPIO_ResetBits(GPIOB,GPIO_Pin_5);
    34 //设置PB5为高电平
    35 GPIO_SetBits(GPIOB,GPIO_Pin_5);
    36 
    37 */
    38 //实例:点亮红色LED,把PB5设置为低电平
    39 RCC_APB2PeriphClockCmd(
    40     RCC_APB2Periph_GPIOB,ENABLE);
    41 GPIO_InitTypeDef a;
    42 a.GPIO_Pin = GPIO_Pin_5;
    43 a.GPIO_Speed = GPIO_Speed_50MHz; 
    44 a.GPIO_Mode = GPIO_Mode_Out_PP;
    45 GPIO_Init(GPIOB,&a);
    46 GPIO_ResetBits(GPIOB,GPIO_Pin_5);
    47 
    48 //按键接到PA0引脚,按键按下灯亮,松开熄灭
    49 while(1){
    50     //读取引脚的电平
    51     int i = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
    52     if(i == 1){
    53         //按键按下了
    54         GPIO_ResetBits(GPIOB,GPIO_Pin_5);
    55     }else{
    56         //按键松开
    57         GPIO_SetBits(GPIOB,GPIO_Pin_5);
    58     }    
    59 } 
    60 
    61 //按键实现每按一次灯的电平状态翻转
    62 int pre = 0;//上一次循环按键的电平
    63 while(1){ 
    64     //读取引脚的电平
    65     int states = GPIO_ReadInputDataBit(
    66     GPIOA,GPIO_Pin_0);
    67     if(states == 0 && pre == 1){
    68         //按键刚松开那一刻,states马上变为0,但是
    69         //上一次循环中给pre赋的值还是1
    70         if(GPIO_ReadInputDataBit(
    71         GPIOB,GPIO_Pin_5) == 0){
    72             GPIO_SetBits(GPIOB,GPIO_Pin_5);
    73         }else{
    74             GPIO_ResetBits(GPIOB,GPIO_Pin_5);
    75         }
    76     }
    77     pre = states;//把本次循环按键的电平赋值给上一次
    78 } 
  • 相关阅读:
    协程基础及其创建和使用方法
    创建进程池与线程池concurrent.futures模块的使用
    线程队列queue的使用
    线程操作之锁的使用
    linux内核调试指南
    在开发板Linux上挂载"驱动"挂载不成功,出现提示server 172.27.52.100 not responding, still trying
    LPC1788 SDRAM运行程序
    Altium designer 原理图库快速创建
    NFS挂载启动
    网站记录
  • 原文地址:https://www.cnblogs.com/kinson/p/7694235.html
Copyright © 2020-2023  润新知