找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4528|回復: 0
打印 上一主題 下一主題
收起左側(cè)

STM32 位綁定程序

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:99624 發(fā)表于 2015-12-27 05:41 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式



#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;
//  }
//}

//     位綁定后的函數(shù)
//#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 unsignedlong*)((Addr&0xF0000000)+0X2000000+((Addr&0xFFFFF)<<5)+(BitNum<<2))))
#definePAOut(n)        BitBound(GIPOA_ODR,n)
#definePAIn(n)        BitBound(GIPOA_IDR,n)
#definePBOut(n)        BitBound(GIPOB_ODR,n)
#definePBIn(n)        BitBound(GIPOB_IDR,n)
#definePCOut(n)        BitBound(GIPOC_ODR,n)
#definePCIn(n)        BitBound(GIPOC_IDR,n)
#definePDOut(n)        BitBound(GIPOD_ODR,n)
#definePDIn(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;
       }
}

這個函數(shù)好使

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表