中级会员
- 积分
- 376
- 金钱
- 376
- 注册时间
- 2012-11-7
- 在线时间
- 35 小时
|
发表于 2013-4-23 12:34:18
|
显示全部楼层
看看我的位变量定义,根据原子的程序修改,原子莫怪
#ifndef __SYS_H
#define __SYS_H
#include "stm32f10x.h"
//////////////////////////////////////////////////////////////////////////////////
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK STM32开发板
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2012/8/18
//版本:V1.7
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
//0,不支持ucos
//1,支持ucos
#define SYSTEM_SUPPORT_UCOS 0 //定义系统文件夹是否支持UCOS
//位带操作,实现51类似的GPIO控制功能
//具体实现思想,参考<<CM3权威指南>>第五章(87页~92页).
//IO口操作宏定义
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))
//IO口地址映射
#define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C
#define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C
#define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C
#define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C
#define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C
#define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C
#define GPIOG_ODR_Addr (GPIOG_BASE+12) //0x40011E0C
#define GPIOA_IDR_Addr (GPIOA_BASE+8) //0x40010808
#define GPIOB_IDR_Addr (GPIOB_BASE+8) //0x40010C08
#define GPIOC_IDR_Addr (GPIOC_BASE+8) //0x40011008
#define GPIOD_IDR_Addr (GPIOD_BASE+8) //0x40011408
#define GPIOE_IDR_Addr (GPIOE_BASE+8) //0x40011808
#define GPIOF_IDR_Addr (GPIOF_BASE+8) //0x40011A08
#define GPIOG_IDR_Addr (GPIOG_BASE+8) //0x40011E08
//IO口操作,只对单一的IO口!
//确保n的值小于16!
#define Aout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //输出
#define Ain(n) BIT_ADDR(GPIOA_IDR_Addr,n) //输入
#define Bout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //输出
#define Bin(n) BIT_ADDR(GPIOB_IDR_Addr,n) //输入
#define Cout(n) BIT_ADDR(GPIOC_ODR_Addr,n) //输出
#define Cin(n) BIT_ADDR(GPIOC_IDR_Addr,n) //输入
#define Dout(n) BIT_ADDR(GPIOD_ODR_Addr,n) //输出
#define Din(n) BIT_ADDR(GPIOD_IDR_Addr,n) //输入
#define Eout(n) BIT_ADDR(GPIOE_ODR_Addr,n) //输出
#define Ein(n) BIT_ADDR(GPIOE_IDR_Addr,n) //输入
#define PFout(n) BIT_ADDR(GPIOF_ODR_Addr,n) //输出
#define PFin(n) BIT_ADDR(GPIOF_IDR_Addr,n) //输入
#define PGout(n) BIT_ADDR(GPIOG_ODR_Addr,n) //输出
#define PGin(n) BIT_ADDR(GPIOG_IDR_Addr,n) //输入
//当选用不同的cpu时,地址需要改变
//日期:2013年2月19日14:04:52
//版本号:0.1
/********************************************************************
修改说明:
1、只是把基地址改变后其他地址跟着变,不用所有的都修改
*********************************************************************/
/********************************************************************
参数说明:
*********************************************************************/
/********************************************************************
功能描述:
将SRAM区的地址为0x20008000~0x20008002的3个字的空间(共96位)作为位变量区
根据不同的stm32F103的芯片,可能需要改变基地址,后面的2个
*********************************************************************/
#define SRAM_BASE_Adr ((uint32_t)0x20008000)
#define FLAG_REG0 (SRAM_BASE_Adr+0x0000)
#define FLAG_REG1 (SRAM_BASE_Adr+0x0001)
#define FLAG_REG2 (SRAM_BASE_Adr+0x0002)
#define f0(n) BIT_ADDR(FLAG_REG0,n)
#define f1(n) BIT_ADDR(FLAG_REG1,n)
#define f2(n) BIT_ADDR(FLAG_REG2,n)
void NVIC_Configuration(void);
#endif |
|