OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4506|回复: 6

STM32位带疑问

[复制链接]

65

主题

440

帖子

0

精华

高级会员

Rank: 4

积分
782
金钱
782
注册时间
2012-8-29
在线时间
17 小时
发表于 2014-1-2 11:00:39 | 显示全部楼层 |阅读模式
看了一下M3内核 位带的说明,STM32不完全手册给了一个位带别名区的计算公式。但是在存储器映射地址表里面没有发现位带别名区。难道位带别名区分散放了,是挨着GPIOx的寄存器放的?没找到42000000的地址定义呀
人生永远追逐着幻光,但谁把幻光看作幻光,谁便沉入无边的苦海
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

93

主题

746

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2012-9-16
在线时间
286 小时
发表于 2014-1-2 11:09:34 | 显示全部楼层
//位带操作,实现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 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 ERIPH_BASE           ((uint32_t)0x40000000) < eripheral base address in the alias region 

// #define SRAM_BB_BASE          ((uint32_t)0x22000000) < SRAM base address in the bit-band region 
// #define ERIPH_BB_BASE        ((uint32_t)0x42000000) < eripheral base address in the bit-band region 

// #define FSMC_R_BASE           ((uint32_t)0xA0000000) < FSMC registers base address

// #define APB1PERIPH_BASE       ERIPH_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+20) //0x40020014 
#define GPIOB_ODR_Addr    (GPIOB_BASE+20) //0x40020414
#define GPIOC_ODR_Addr    (GPIOC_BASE+20) //0x40020814
#define GPIOD_ODR_Addr    (GPIOD_BASE+20) //0x40020C14
#define GPIOE_ODR_Addr    (GPIOE_BASE+20) //0x40021014
#define GPIOF_ODR_Addr    (GPIOF_BASE+20) //0x40021414 
#define GPIOG_ODR_Addr    (GPIOG_BASE+20) //0x40021814

/**********************************************************
14为GPIOx_ODR的偏移量, 10是GPIOx_IDR的偏移量,本程序是用在STM32F207ZET6上,
STM32F207ZET6有144个管脚,没有H、I管脚,这里配置,是为之后拓展使用
**********************************************************/

// #define GPIOH_ODR_Addr    (GPIOH_BASE+20) //0x40021C14   
// #define GPIOI_ODR_Addr    (GPIOI_BASE+20) //0x40022014 

#define GPIOA_IDR_Addr    (GPIOA_BASE+16) //0x40020010 
#define GPIOB_IDR_Addr    (GPIOB_BASE+16) //0x40020410
#define GPIOC_IDR_Addr    (GPIOC_BASE+16) //0x40020810
#define GPIOD_IDR_Addr    (GPIOD_BASE+16) //0x40020C10 
#define GPIOE_IDR_Addr    (GPIOE_BASE+16) //0x40021010 
#define GPIOF_IDR_Addr    (GPIOF_BASE+16) //0x40021410
#define GPIOG_IDR_Addr    (GPIOG_BASE+16) //0x40021810


// #define GPIOH_IDR_Addr    (GPIOH_BASE+16) //0x40021C10 
// #define GPIOI_IDR_Addr    (GPIOI_BASE+16) //0x40022010  
 
//IO口操作,只对单一的IO口!
//确保n的值小于16!
//BIT_ADDR((unsigned long)&(PORTA->ODR), 2) = 0;   // GPIOA.2 = 0;
#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 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)  //输入
纵浪大化中,不喜亦不惧;应尽便须尽,无复独多虑!
回复 支持 反对

使用道具 举报

93

主题

746

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2012-9-16
在线时间
286 小时
发表于 2014-1-2 11:11:45 | 显示全部楼层
这个是F207的,稍稍与F1的不同,可以按照这个思路去理解
纵浪大化中,不喜亦不惧;应尽便须尽,无复独多虑!
回复 支持 反对

使用道具 举报

65

主题

440

帖子

0

精华

高级会员

Rank: 4

积分
782
金钱
782
注册时间
2012-8-29
在线时间
17 小时
 楼主| 发表于 2014-1-2 11:48:02 | 显示全部楼层
回复【3楼】象牙塔:
---------------------------------
这个我看了 也知道是怎么回事,但是不明白的是4200 0000这个地址在寄存器中的映射位置。参考手册的表里没有
人生永远追逐着幻光,但谁把幻光看作幻光,谁便沉入无边的苦海
回复 支持 反对

使用道具 举报

93

主题

746

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2012-9-16
在线时间
286 小时
发表于 2014-1-2 13:27:11 | 显示全部楼层
回复【4楼】sun_shine:
---------------------------------
在《CM3权威指南》里
纵浪大化中,不喜亦不惧;应尽便须尽,无复独多虑!
回复 支持 反对

使用道具 举报

65

主题

440

帖子

0

精华

高级会员

Rank: 4

积分
782
金钱
782
注册时间
2012-8-29
在线时间
17 小时
 楼主| 发表于 2014-1-2 16:50:20 | 显示全部楼层
回复【5楼】象牙塔:
---------------------------------
那里面确实有,但是现在是用的STM32,他手册竟然不介绍
人生永远追逐着幻光,但谁把幻光看作幻光,谁便沉入无边的苦海
回复 支持 反对

使用道具 举报

93

主题

746

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2012-9-16
在线时间
286 小时
发表于 2014-1-3 09:55:30 | 显示全部楼层
回复【6楼】sun_shine:
---------------------------------
好吧!
纵浪大化中,不喜亦不惧;应尽便须尽,无复独多虑!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-12 17:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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