找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3947|回复: 0
打印 上一主题 下一主题
收起左侧

STM32 位绑定程序

[复制链接]
跳转到指定楼层
楼主
ID:99624 发表于 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;
//  }
//}

//     位绑定后的函数
//#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;
       }
}

这个函数好使

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表