查看: 2907|回复: 0

[资料] STM32F103位绑定 刘凯老师程序

[复制链接]

7

主题

2

好友

225

积分

秀才

Rank: 3Rank: 3

  • TA的每日心情
    奋斗
    2014-5-13 00:05
  • 签到天数: 18 天

    [LV.4]偶尔看看III

    发表于 2014-4-5 22:54:55 |显示全部楼层
    备注:此程序F103程序,换用其他程序如F407偏移位要相应的改动一下
    0x08改成0x10;0x0c改成0x14
    其他芯片请查看相应的偏移位,以及时钟使能等细节部分是否需要改动


    #include"stm32f10x_lib.h"

    //int main(void)
    //{
    //
    //   u32 *PAO3=(u32 *)(0X42000000+(0X4001080C-0X40000000)*32+4*3);
    //
    //   GPIOA->CRL=0X33333333;    //低八位配置为推挽式输出 频率为50mhz
    //   GPIOA->CRH=0X44444444;            //高八位配置为上拉输入
    //  while(1)
    //  {
    //     if((GPIOA->IDR&0X0100)==0X0100)
    //                                        GPIOA->ODR=GPIOA->ODR|0X0001;
    //  else
    //                                        GPIOA->ODR=GPIOA->ODR&(-0X00);
    //
    //     if((GPIOA->IDR&0X0200)==0X0200)
    //                                          GPIOA->ODR=GPIOA->ODR|0X0002;
    //  else
    //                                          GPIOA->ODR=GPIOA->ODR&(-0X00);
    //
    //     if((GPIOA->IDR&0X0400)==0X0400)
    //      *PAO3=1;
    //  else
    //    *PAO3=0;
    //
    //     if((GPIOA->IDR&0X0800)==0X0800)
    //      GPIOA->ODR=0X0008;
    //  else
    //    GPIOA->ODR=0X00;
    //  }
    //}

    //      位绑定后的函数
    //#define GPIOA_ODR_A (0x40010800+0X0C)
    //#define GPIOA_IDR_A (0x40040800+0X08)
    //#define GPIOA_ODR_A (GPIOA_BASE+0X0C)
    //#define GPIOA_IDR_A (GPIOA_BASE+0X08)
    //
    //#define GPIOB_ODR_A (GPIOB_BASE+0X0C)
    //#define GPIOB_IDR_A (GPIOB_BASE+0X08)
    //
    //#define GPIOC_ODR_A (GPIOC_BASE+0X0C)
    //#define GPIOC_IDR_A (GPIOC_BASE+0X08)
    //
    //#define GPIOD_ODR_A (GPIOD_BASE+0X0C)
    //#define GPIOD_IDR_A (GPIOD_BASE+0X08)
    //
    //#define GPIOE_ODR_A (GPIOE_BASE+0X0C)
    //#define GPIOE_IDR_A (GPIOE_BASE+0X08)
    //
    //#define BitBand(Addr,BitNum)   *((volatile unsigned long *)((Addr&0xf0000000)+0x2000000+((Addr&0xfffff)<<5)+BitNum<<2))
    //
    //#define PAout(n)  BitBand(GPIOA_ODR_A,n)
    //#define PAin(n)   BitBand(GPIOA_IDR_A,n)
    //
    //int main(void)
    //{
    //  GPIOA->CRL=0X33333333;    //低八位配置为推挽式输出 频率为50mhz
    //     GPIOA->CRH=0X44444444;            //高八位配置为上拉输入
    //
    //    while(1)
    //    {
    ////   if((GPIOA->IDR&0X0100)==0X0100)                      GPIOA->ODR=GPIOA->ODR|0X0001;
    ////   else                               GPIOA->ODR=0;
    //
    //    if(PAin(8)==1)    PAout(0)=1;
    //       else               PAout(0)=0;
    //
    //    if(PAin(9)==1)   PAout(1)=1;
    //   else               PAout(1)=0;
    //
    //    if(PAin(10)==1)   PAout(2)=1;
    //   else               PAout(2)=0;
    //
    //    if(PAin(11)==1)    PAout(3)=1;
    //   else                PAout(3)=0;
    //
    //    }
    //
    //  return(1);
    //
    //}
    #define GIPOA_IDR ( GPIOA_BASE + 0X08)
    #define GIPOA_ODR ( GPIOA_BASE + 0X0C)
    #define GIPOB_IDR ( GPIOB_BASE + 0X08)
    #define GIPOB_ODR ( GPIOB_BASE + 0X0C)
    #define GIPOC_IDR ( GPIOC_BASE + 0X08)
    #define GIPOC_ODR ( GPIOC_BASE + 0X0C)
    #define GIPOD_IDR ( GPIOD_BASE + 0X08)
    #define GIPOD_ODR ( GPIOD_BASE + 0X0C)      
    #define BitBound(Addr,BitNum) (*((volatile unsigned long*)((Addr&0xF0000000)+0X2000000+((Addr&0xFFFFF)<<5)+(BitNum<<2))))
    #define PAOut(n)         BitBound(GIPOA_ODR,n)
    #define PAIn(n)         BitBound(GIPOA_IDR,n)
    #define PBOut(n)         BitBound(GIPOB_ODR,n)
    #define PBIn(n)         BitBound(GIPOB_IDR,n)
    #define PCOut(n)         BitBound(GIPOC_ODR,n)
    #define PCIn(n)         BitBound(GIPOC_IDR,n)
    #define PDOut(n)         BitBound(GIPOD_ODR,n)
    #define PDIn(n)         BitBound(GIPOD_IDR,n)
    int main(void)
    {
    //        GPIO_InitTypeDef GPIO_InitStructure;
    //        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
    //        GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);      
    //      
    //        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
    //        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    //        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    //        GPIO_Init(GPIOB,&GPIO_InitStructure);
    //
    //        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
    //        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    //        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    //        GPIO_Init(GPIOA,&GPIO_InitStructure);
         GPIOA->CRL=0X33333333;
         GPIOA->CRH=0X44444444;
            while(1)
            {
                            if( PAIn(8) == 0)                               //PB12按下
                                            PAOut(0) = 0;                    //LED亮
                            else
                                            PAOut(0) = 1;
                            if( PAIn(9) == 0)
                                            PAOut(1) = 0;
                            else
                                            PAOut(1) = 1;
                            if( PAIn(10) == 0)
                                            PAOut(2) = 0;
                            else
                                            PAOut(2) = 1;
            }
    }

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /6 下一条


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-5 22:51 , Processed in 0.152377 second(s), 9 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部