回答

收藏

STM32F103位绑定 刘凯老师程序

STMCU STMCU 6504 人阅读 | 0 人回复 | 2014-04-05

备注:此程序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;
        }
}

分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

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