打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
STM32 刘凯老师 位绑定程序



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

        }
}

这个函数好使

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
. GPIO原理与配置(跑马灯,蜂鸣器,按键)
【转】位带操作的原理及使用
详解CortexM位带操作
STM32F030系列实现仿位带操作
stm32 端口位操作问题
推荐一种超简单的硬件位带bitband操作方法,让变量,寄存器控制,IO访问更便捷
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服