zoukankan      html  css  js  c++  java
  • STM32流水灯

    void LED_Init(void)

    GPIO_InitTypeDef  GPIO_InitStructure;

     

     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  // 使能PA端口时钟

    (RCC时钟你可以先不用看)

     

    GPIO的库函数

     

    库函数中主要用到的有如下:

    GPIO_Init

    GPIO_StructInit

    GPIO_SetBit

    GPIO_ResetBit      其他的根据需要在用!

    函数 GPIO_Init

     

     

    这个是设置为0

     

     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;  //LED0-->PA.8端口配置

     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //推挽输出

     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

     GPIO_Init(GPIOA, &GPIO_InitStructure);

     GPIO_SetBits(GPIOA,GPIO_Pin_8);  //PA.8输出高

     

     

    GPIO配置

    LED0=0;  //  使用了位带操作GPIO_ResetBits(GPIOA,GPIO_Pin_8);

     

    #define LED0 PAout(8)    //PA8

     

    #define PAout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)  //输出

     

    位操作

    #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) 

    #define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr)) 

    #define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum)) 

     

     

    跟你讲一下寄存器怎么看?

     

    下面这个表很重要,必须看懂!

     

    GPIO寄存器描述

    端口配置低寄存器(GPIOx_CRL) (x=A..E)

     

    端口配置高寄存器(GPIOx_CRH) (x=A..E)

     

    注意MODE[1:0]>00为输出模式,GPIO_Mode_AIN = 0x0,

     

    举例子

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //推挽输出

    GPIO_Mode_Out_PP = 0x10,            PA8的  

     

    速率

    typedef enum

      GPIO_Speed_10MHz = 1,

      GPIO_Speed_2MHz, 

      GPIO_Speed_50MHz

    }GPIOSpeed_TypeDef;

    #define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_Speed_10MHz) || ((SPEED) == GPIO_Speed_2MHz) || 

                                  ((SPEED) == GPIO_Speed_50MHz))

     

    方式

    typedef enum

    { GPIO_Mode_AIN = 0x0,

      GPIO_Mode_IN_FLOATING = 0x04,

      GPIO_Mode_IPD = 0x28,

      GPIO_Mode_IPU = 0x48,

      GPIO_Mode_Out_OD = 0x14,

      GPIO_Mode_Out_PP = 0x10,

      GPIO_Mode_AF_OD = 0x1C,

      GPIO_Mode_AF_PP = 0x18

    }GPIOMode_TypeDef;

     

    #define IS_GPIO_MODE(MODE) (((MODE) == GPIO_Mode_AIN) || ((MODE) == GPIO_Mode_IN_FLOATING) || 

                                ((MODE) == GPIO_Mode_IPD) || ((MODE) == GPIO_Mode_IPU) || 

                                ((MODE) == GPIO_Mode_Out_OD) || ((MODE) == GPIO_Mode_Out_PP) || 

                                ((MODE) == GPIO_Mode_AF_OD) || ((MODE) == GPIO_Mode_AF_PP))

     

    端口输入数据寄存器(GPIOx_IDR) (x=A..E)

    端口输出数据寄存器(GPIOx_ODR) (x=A..E)

    端口位设置/清除寄存器(GPIOx_BSRR) (x=A..E)

    端口位清除寄存器(GPIOx_BRR) (x=A..E)

     

  • 相关阅读:
    jq绑定on事件无效
    数字以0补全
    redis常用操作
    mysql数据操作日常
    centos端口映射
    centos7防火墙操作
    mysql5.7order by问题
    centos无法上网解决方法
    面试题
    ztree 获取子节点所有父节点的name的拼接
  • 原文地址:https://www.cnblogs.com/dongsnow/p/4336998.html
Copyright © 2011-2022 走看看