zoukankan      html  css  js  c++  java
  • 像51一样操作STM32的IO(转)

    源:像51一样操作STM32的IO

    //-----------------------------------------------------------------------------------------------------
    //别名区    ADDRESS=0x4200 0000 + (0x0001 100C*0x20) + (bitx*4) ;bitx:第x位
    // 把“位段地址+位序号”转换别名地址宏
    #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)  )
    
    
    #define GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C
    #define GPIOB_ODR_Addr    (GPIOB_BASE+12) //0x40010C0C
    #define GPIOC_ODR_Addr    (GPIOC_BASE+12) //0x4001100C
    #define GPIOD_ODR_Addr    (GPIOD_BASE+12) //0x4001140C
    #define GPIOE_ODR_Addr    (GPIOE_BASE+12) //0x4001180C
    
    
    #define GPIOA_IDR_Addr    (GPIOA_BASE+8) //0x40010808
    #define GPIOB_IDR_Addr    (GPIOB_BASE+8) //0x40010C08
    #define GPIOC_IDR_Addr    (GPIOC_BASE+8) //0x40011008
    #define GPIOD_IDR_Addr    (GPIOD_BASE+8) //0x40011408
    #define GPIOE_IDR_Addr    (GPIOE_BASE+8) //0x40011808
    
    
    //-----------------------------------------------------
    #define PA0   BIT_ADDR(GPIOA_ODR_Addr, 0)  //输出
    #define PA1   BIT_ADDR(GPIOA_ODR_Addr, 1)  //输出
    #define PA2   BIT_ADDR(GPIOA_ODR_Addr, 2)  //输出
    #define PA3   BIT_ADDR(GPIOA_ODR_Addr, 3)  //输出
    #define PA4   BIT_ADDR(GPIOA_ODR_Addr, 4)  //输出
    #define PA5   BIT_ADDR(GPIOA_ODR_Addr, 5)  //输出
    #define PA6   BIT_ADDR(GPIOA_ODR_Addr, 6)  //输出
    #define PA7   BIT_ADDR(GPIOA_ODR_Addr, 7)  //输出
    #define PA8   BIT_ADDR(GPIOA_ODR_Addr, 8)  //输出
    #define PA9   BIT_ADDR(GPIOA_ODR_Addr, 9)  //输出
    #define PA10  BIT_ADDR(GPIOA_ODR_Addr, 10) //输出
    #define PA11  BIT_ADDR(GPIOA_ODR_Addr, 11) //输出
    #define PA12  BIT_ADDR(GPIOA_ODR_Addr, 12) //输出
    #define PA13  BIT_ADDR(GPIOA_ODR_Addr, 13) //输出
    #define PA14  BIT_ADDR(GPIOA_ODR_Addr, 14) //输出
    #define PA15  BIT_ADDR(GPIOA_ODR_Addr, 15) //输出
    
    
    #define PA0in   BIT_ADDR(GPIOA_IDR_Addr, 0)  //输入
    #define PA1in   BIT_ADDR(GPIOA_IDR_Addr, 1)  //输入
    #define PA2in   BIT_ADDR(GPIOA_IDR_Addr, 2)  //输入
    #define PA3in   BIT_ADDR(GPIOA_IDR_Addr, 3)  //输入
    #define PA4in   BIT_ADDR(GPIOA_IDR_Addr, 4)  //输入
    #define PA5in   BIT_ADDR(GPIOA_IDR_Addr, 5)  //输入
    #define PA6in   BIT_ADDR(GPIOA_IDR_Addr, 6)  //输入
    #define PA7in   BIT_ADDR(GPIOA_IDR_Addr, 7)  //输入
    #define PA8in   BIT_ADDR(GPIOA_IDR_Addr, 8)  //输入
    #define PA9in   BIT_ADDR(GPIOA_IDR_Addr, 9)  //输入
    #define PA10in  BIT_ADDR(GPIOA_IDR_Addr, 10) //输入
    #define PA11in  BIT_ADDR(GPIOA_IDR_Addr, 11) //输入
    #define PA12in  BIT_ADDR(GPIOA_IDR_Addr, 12) //输入
    #define PA13in  BIT_ADDR(GPIOA_IDR_Addr, 13) //输入
    #define PA14in  BIT_ADDR(GPIOA_IDR_Addr, 14) //输入
    #define PA15in  BIT_ADDR(GPIOA_IDR_Addr, 15) //输入
    
    
    //-----------------------------------------------------
    #define PB0   BIT_ADDR(GPIOB_ODR_Addr, 0)  //输出
    #define PB1   BIT_ADDR(GPIOB_ODR_Addr, 1)  //输出
    #define PB2   BIT_ADDR(GPIOB_ODR_Addr, 2)  //输出
    #define PB3   BIT_ADDR(GPIOB_ODR_Addr, 3)  //输出
    #define PB4   BIT_ADDR(GPIOB_ODR_Addr, 4)  //输出
    #define PB5   BIT_ADDR(GPIOB_ODR_Addr, 5)  //输出
    #define PB6   BIT_ADDR(GPIOB_ODR_Addr, 6)  //输出
    #define PB7   BIT_ADDR(GPIOB_ODR_Addr, 7)  //输出
    #define PB8   BIT_ADDR(GPIOB_ODR_Addr, 8)  //输出
    #define PB9   BIT_ADDR(GPIOB_ODR_Addr, 9)  //输出
    #define PB10  BIT_ADDR(GPIOB_ODR_Addr, 10) //输出
    #define PB11  BIT_ADDR(GPIOB_ODR_Addr, 11) //输出
    #define PB12  BIT_ADDR(GPIOB_ODR_Addr, 12) //输出
    #define PB13  BIT_ADDR(GPIOB_ODR_Addr, 13) //输出
    #define PB14  BIT_ADDR(GPIOB_ODR_Addr, 14) //输出
    #define PB15  BIT_ADDR(GPIOB_ODR_Addr, 15) //输出
    
    
    #define PB0in   BIT_ADDR(GPIOB_IDR_Addr, 0)  //输入
    #define PB1in   BIT_ADDR(GPIOB_IDR_Addr, 1)  //输入
    #define PB2in   BIT_ADDR(GPIOB_IDR_Addr, 2)  //输入
    #define PB3in   BIT_ADDR(GPIOB_IDR_Addr, 3)  //输入
    #define PB4in   BIT_ADDR(GPIOB_IDR_Addr, 4)  //输入
    #define PB5in   BIT_ADDR(GPIOB_IDR_Addr, 5)  //输入
    #define PB6in   BIT_ADDR(GPIOB_IDR_Addr, 6)  //输入
    #define PB7in   BIT_ADDR(GPIOB_IDR_Addr, 7)  //输入
    #define PB8in   BIT_ADDR(GPIOB_IDR_Addr, 8)  //输入
    #define PB9in   BIT_ADDR(GPIOB_IDR_Addr, 9)  //输入
    #define PB10in  BIT_ADDR(GPIOB_IDR_Addr, 10) //输入
    #define PB11in  BIT_ADDR(GPIOB_IDR_Addr, 11) //输入
    #define PB12in  BIT_ADDR(GPIOB_IDR_Addr, 12) //输入
    #define PB13in  BIT_ADDR(GPIOB_IDR_Addr, 13) //输入
    #define PB14in  BIT_ADDR(GPIOB_IDR_Addr, 14) //输入
    #define PB15in  BIT_ADDR(GPIOB_IDR_Addr, 15) //输入
    //----------------------------------------------------
    #define PC0   BIT_ADDR(GPIOC_ODR_Addr, 0)  //输出
    #define PC1   BIT_ADDR(GPIOC_ODR_Addr, 1)  //输出
    #define PC2   BIT_ADDR(GPIOC_ODR_Addr, 2)  //输出
    #define PC3   BIT_ADDR(GPIOC_ODR_Addr, 3)  //输出
    #define PC4   BIT_ADDR(GPIOC_ODR_Addr, 4)  //输出
    #define PC5   BIT_ADDR(GPIOC_ODR_Addr, 5)  //输出
    #define PC6   BIT_ADDR(GPIOC_ODR_Addr, 6)  //输出
    #define PC7   BIT_ADDR(GPIOC_ODR_Addr, 7)  //输出
    #define PC8   BIT_ADDR(GPIOC_ODR_Addr, 8)  //输出
    #define PC9   BIT_ADDR(GPIOC_ODR_Addr, 9)  //输出
    #define PC10  BIT_ADDR(GPIOC_ODR_Addr, 10) //输出
    #define PC11  BIT_ADDR(GPIOC_ODR_Addr, 11) //输出
    #define PC12  BIT_ADDR(GPIOC_ODR_Addr, 12) //输出
    #define PC13  BIT_ADDR(GPIOC_ODR_Addr, 13) //输出
    #define PC14  BIT_ADDR(GPIOC_ODR_Addr, 14) //输出
    #define PC15  BIT_ADDR(GPIOC_ODR_Addr, 15) //输出
    
    
    #define PC0in   BIT_ADDR(GPIOC_IDR_Addr, 0)  //输入
    #define PC1in   BIT_ADDR(GPIOC_IDR_Addr, 1)  //输入
    #define PC2in   BIT_ADDR(GPIOC_IDR_Addr, 2)  //输入
    #define PC3in   BIT_ADDR(GPIOC_IDR_Addr, 3)  //输入
    #define PC4in   BIT_ADDR(GPIOC_IDR_Addr, 4)  //输入
    #define PC5in   BIT_ADDR(GPIOC_IDR_Addr, 5)  //输入
    #define PC6in   BIT_ADDR(GPIOC_IDR_Addr, 6)  //输入
    #define PC7in   BIT_ADDR(GPIOC_IDR_Addr, 7)  //输入
    #define PC8in   BIT_ADDR(GPIOC_IDR_Addr, 8)  //输入
    #define PC9in   BIT_ADDR(GPIOC_IDR_Addr, 9)  //输入
    #define PC10in  BIT_ADDR(GPIOC_IDR_Addr, 10) //输入
    #define PC11in  BIT_ADDR(GPIOC_IDR_Addr, 11) //输入
    #define PC12in  BIT_ADDR(GPIOC_IDR_Addr, 12) //输入
    #define PC13in  BIT_ADDR(GPIOC_IDR_Addr, 13) //输入
    #define PC14in  BIT_ADDR(GPIOC_IDR_Addr, 14) //输入
    #define PC15in  BIT_ADDR(GPIOC_IDR_Addr, 15) //输入
    
    
    //----------------------------------------------------
    #define PD0   BIT_ADDR(GPIOD_ODR_Addr, 0)  //输出
    #define PD1   BIT_ADDR(GPIOD_ODR_Addr, 1)  //输出
    #define PD2   BIT_ADDR(GPIOD_ODR_Addr, 2)  //输出
    #define PD3   BIT_ADDR(GPIOD_ODR_Addr, 3)  //输出
    #define PD4   BIT_ADDR(GPIOD_ODR_Addr, 4)  //输出
    #define PD5   BIT_ADDR(GPIOD_ODR_Addr, 5)  //输出
    #define PD6   BIT_ADDR(GPIOD_ODR_Addr, 6)  //输出
    #define PD7   BIT_ADDR(GPIOD_ODR_Addr, 7)  //输出
    #define PD8   BIT_ADDR(GPIOD_ODR_Addr, 8)  //输出
    #define PD9   BIT_ADDR(GPIOD_ODR_Addr, 9)  //输出
    #define PD10  BIT_ADDR(GPIOD_ODR_Addr, 10) //输出
    #define PD11  BIT_ADDR(GPIOD_ODR_Addr, 11) //输出
    #define PD12  BIT_ADDR(GPIOD_ODR_Addr, 12) //输出
    #define PD13  BIT_ADDR(GPIOD_ODR_Addr, 13) //输出
    #define PD14  BIT_ADDR(GPIOD_ODR_Addr, 14) //输出
    #define PD15  BIT_ADDR(GPIOD_ODR_Addr, 15) //输出
    
    
    #define PD0in   BIT_ADDR(GPIOD_IDR_Addr, 0)  //输入
    #define PD1in   BIT_ADDR(GPIOD_IDR_Addr, 1)  //输入
    #define PD2in   BIT_ADDR(GPIOD_IDR_Addr, 2)  //输入
    #define PD3in   BIT_ADDR(GPIOD_IDR_Addr, 3)  //输入
    #define PD4in   BIT_ADDR(GPIOD_IDR_Addr, 4)  //输入
    #define PD5in   BIT_ADDR(GPIOD_IDR_Addr, 5)  //输入
    #define PD6in   BIT_ADDR(GPIOD_IDR_Addr, 6)  //输入
    #define PD7in   BIT_ADDR(GPIOD_IDR_Addr, 7)  //输入
    #define PD8in   BIT_ADDR(GPIOD_IDR_Addr, 8)  //输入
    #define PD9in   BIT_ADDR(GPIOD_IDR_Addr, 9)  //输入
    #define PD10in  BIT_ADDR(GPIOD_IDR_Addr, 10) //输入
    #define PD11in  BIT_ADDR(GPIOD_IDR_Addr, 11) //输入
    #define PD12in  BIT_ADDR(GPIOD_IDR_Addr, 12) //输入
    #define PD13in  BIT_ADDR(GPIOD_IDR_Addr, 13) //输入
    #define PD14in  BIT_ADDR(GPIOD_IDR_Addr, 14) //输入
    #define PD15in  BIT_ADDR(GPIOD_IDR_Addr, 15) //输入
    
    
    //----------------------------------------------------
    #define PE0   BIT_ADDR(GPIOE_ODR_Addr, 0)  //输出
    #define PE1   BIT_ADDR(GPIOE_ODR_Addr, 1)  //输出
    #define PE2   BIT_ADDR(GPIOE_ODR_Addr, 2)  //输出
    #define PE3   BIT_ADDR(GPIOE_ODR_Addr, 3)  //输出
    #define PE4   BIT_ADDR(GPIOE_ODR_Addr, 4)  //输出
    #define PE5   BIT_ADDR(GPIOE_ODR_Addr, 5)  //输出
    #define PE6   BIT_ADDR(GPIOE_ODR_Addr, 6)  //输出
    #define PE7   BIT_ADDR(GPIOE_ODR_Addr, 7)  //输出
    #define PE8   BIT_ADDR(GPIOE_ODR_Addr, 8)  //输出
    #define PE9   BIT_ADDR(GPIOE_ODR_Addr, 9)  //输出
    #define PE10  BIT_ADDR(GPIOE_ODR_Addr, 10) //输出
    #define PE11  BIT_ADDR(GPIOE_ODR_Addr, 11) //输出
    #define PE12  BIT_ADDR(GPIOE_ODR_Addr, 12) //输出
    #define PE13  BIT_ADDR(GPIOE_ODR_Addr, 13) //输出
    #define PE14  BIT_ADDR(GPIOE_ODR_Addr, 14) //输出
    #define PE15  BIT_ADDR(GPIOE_ODR_Addr, 15) //输出
    
    
    #define PE0in   BIT_ADDR(GPIOE_IDR_Addr, 0)  //输入
    #define PE1in   BIT_ADDR(GPIOE_IDR_Addr, 1)  //输入
    #define PE2in   BIT_ADDR(GPIOE_IDR_Addr, 2)  //输入
    #define PE3in   BIT_ADDR(GPIOE_IDR_Addr, 3)  //输入
    #define PE4in   BIT_ADDR(GPIOE_IDR_Addr, 4)  //输入
    #define PE5in   BIT_ADDR(GPIOE_IDR_Addr, 5)  //输入
    #define PE6in   BIT_ADDR(GPIOE_IDR_Addr, 6)  //输入
    #define PE7in   BIT_ADDR(GPIOE_IDR_Addr, 7)  //输入
    #define PE8in   BIT_ADDR(GPIOE_IDR_Addr, 8)  //输入
    #define PE9in   BIT_ADDR(GPIOE_IDR_Addr, 9)  //输入
    #define PE10in  BIT_ADDR(GPIOE_IDR_Addr, 10) //输入
    #define PE11in  BIT_ADDR(GPIOE_IDR_Addr, 11) //输入
    #define PE12in  BIT_ADDR(GPIOE_IDR_Addr, 12) //输入
    #define PE13in  BIT_ADDR(GPIOE_IDR_Addr, 13) //输入
    #define PE14in  BIT_ADDR(GPIOE_IDR_Addr, 14) //输入
    #define PE15in  BIT_ADDR(GPIOE_IDR_Addr, 15) //输入
    
    
     
    
    
    //举例:
    
    
    //输出
    
    
    PA0=0;
    
    
    PA1=1;
    
    
     
    
    
    //输入
    
    
    if(PB0==0)
    
    
       ;//检测到低电平
  • 相关阅读:
    HDU 3853 LOOPS:期望dp【网格型】
    SGU 495 Kids and Prizes:期望dp / 概率dp / 推公式
    BZOJ 1629 [Usaco2005 Nov]Cow Acrobats:贪心【局部证明】
    BZOJ 3400 [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队:dp【和为f的倍数】
    BZOJ 1685 [Usaco2005 Oct]Allowance 津贴:贪心【给硬币问题】
    codeforces-473D Mahmoud and Ehab and another array construction task (素数筛法+贪心)
    poj1964最大子矩阵 (单调栈加枚举)
    poj3111 选取物品(二分+贪心)
    codeforces-777E Hanoi Factory (栈+贪心)
    poj3040 发工资(贪心)
  • 原文地址:https://www.cnblogs.com/LittleTiger/p/4506166.html
Copyright © 2011-2022 走看看