自己做的板子,板子CPU是STM32F207ZET6,现在刚刚测试,直接用库函数没问题代码如下:
GPIO_ResetBits(GPIOB, GPIO_Pin_5);
delay_ms(200);
GPIO_SetBits(GPIOB, GPIO_Pin_5);
delay_ms(400);
想用位带操作试试,但是没成功,设置感觉没问题,为什么不出结果呢?
如果代码这样写:
LED1=0;
LED2=0;
LED3=0;
GPIO_ResetBits(GPIOB, GPIO_Pin_5);
delay_ms(200);
GPIO_SetBits(GPIOB, GPIO_Pin_5);
delay_ms(400);
PB5亮,但是其他三个灯不亮,首先确定灯没问题,
实在看不出有什么问题,大家帮忙看看?
#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 FLASH_BASE ((uint32_t)0x08000000) < FLASH base address in the alias region
// #define SRAM_BASE ((uint32_t)0x20000000) < SRAM base address in the alias region
// #define PERIPH_BASE ((uint32_t)0x40000000) < Peripheral base address in the alias region
// #define SRAM_BB_BASE ((uint32_t)0x22000000) < SRAM base address in the bit-band region
// #define PERIPH_BB_BASE ((uint32_t)0x42000000) < Peripheral base address in the bit-band region
// #define FSMC_R_BASE ((uint32_t)0xA0000000) < FSMC registers base address
// #define APB1PERIPH_BASE PERIPH_BASE
// #define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000)
// #define AHB1PERIPH_BASE (PERIPH_BASE + 0x00020000) //0x40020000
// #define AHB2PERIPH_BASE (PERIPH_BASE + 0x10000000)
// < AHB1 peripherals
// #define GPIOA_BASE (AHB1PERIPH_BASE + 0x0000) //0x40020000
// #define GPIOB_BASE (AHB1PERIPH_BASE + 0x0400) //0x40020400
// #define GPIOC_BASE (AHB1PERIPH_BASE + 0x0800) //0x40020800
// #define GPIOD_BASE (AHB1PERIPH_BASE + 0x0C00) //0x40020C00
// #define GPIOE_BASE (AHB1PERIPH_BASE + 0x1000) //0x40021000
// #define GPIOF_BASE (AHB1PERIPH_BASE + 0x1400) //0x40021400
// #define GPIOG_BASE (AHB1PERIPH_BASE + 0x1800) //0x40021800
// #define GPIOH_BASE (AHB1PERIPH_BASE + 0x1C00) //0x40021C00
// #define GPIOI_BASE (AHB1PERIPH_BASE + 0x2000) //0x40022000
// **************************************************************************/
#define GPIOA_ODR_Addr (GPIOA_BASE+14) //0x4002000E
#define GPIOB_ODR_Addr (GPIOB_BASE+14) //0x4002040E
#define GPIOC_ODR_Addr (GPIOC_BASE+14) //0x4002080E
#define GPIOD_ODR_Addr (GPIOD_BASE+14) //0x40020C0E
#define GPIOE_ODR_Addr (GPIOE_BASE+14) //0x4002100E
#define GPIOF_ODR_Addr (GPIOF_BASE+14) //0x4002140E
#define GPIOG_ODR_Addr (GPIOG_BASE+14) //0x4002180E
/**********************************************************
14为GPIOx_ODR的偏移量, 10是GPIOx_IDR的偏移量,本程序是用在STM32F207ZET6上,
STM32F207ZET6有144个管脚,没有H、I管脚,这里配置,是为之后拓展使用
**********************************************************/
// #define GPIOH_ODR_Addr (GPIOH_BASE+14) //0x40021C0E
// #define GPIOI_ODR_Addr (GPIOI_BASE+14) //0x4002200E
#define GPIOA_IDR_Addr (GPIOA_BASE+10) //0x4002000A
#define GPIOB_IDR_Addr (GPIOB_BASE+10) //0x4002040A
#define GPIOC_IDR_Addr (GPIOC_BASE+10) //0x4002080A
#define GPIOD_IDR_Addr (GPIOD_BASE+10) //0x40020C0A
#define GPIOE_IDR_Addr (GPIOE_BASE+10) //0x4002100A
#define GPIOF_IDR_Addr (GPIOF_BASE+10) //0x4002140A
#define GPIOG_IDR_Addr (GPIOG_BASE+10) //0x4002180A
// #define GPIOH_IDR_Addr (GPIOH_BASE+10) //0x40021C0A
// #define GPIOI_IDR_Addr (GPIOI_BASE+10) //0x4002200A
//IO口操作,只对单一的IO口!
//确保n的值小于16!
#define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //输出
#define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //输入
#define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //输出
#define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n) //输入
#define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n) //输出
#define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n) //输入
#define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n) //输出
#define PDin(n) BIT_ADDR(GPIOD_IDR_Addr,n) //输入
#define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n) //输出
#define PEin(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) //输入
// #define PHout(n) BIT_ADDR(GPIOH_ODR_Addr,n) //输出
// #define PHin(n) BIT_ADDR(GPIOH_IDR_Addr,n) //输入
// #define PIout(n) BIT_ADDR(GPIOI_ODR_Addr,n) //输出
// #define PIin(n) BIT_ADDR(GPIOI_IDR_Addr,n) //输入
|