登录注册
论坛
五彩晶圆(中级)
2942
4
按照资料的记录,STM32G431使用的是cortex-M4的核心,应该可以使用位带操作地址的功能。现在想使用bit-band操作,但是查看keil的工程编译定义。IRAM=20000000,SIZE=8000,片上SRAM为32K大小,现在疑惑的是,keil的变量内存分配是从20000000开始的呢?还是20008000开始的?
keil01.png (33.8 KB, 下载次数: 0) 下载附件 保存到相册 2019-12-7 16:58 上传 还有就是IRAM2内存是各什么用处?
keil01.png (33.8 KB, 下载次数: 0)
下载附件 保存到相册
2019-12-7 16:58 上传
敬请高手解答!
扫一扫,分享给好友
不好意思这个问题太傻了!!!,自己想明白了。任何一个变量只要在SRAM区的地址或外设地址都可以使用位带操作!
只要使用
#define BITBAND(addr, bitnum)((addr & 0xF0000000)+0x2000000+((addr & 0xFFFFF)<<5)+(bitnum<<2)) #define MEM_ADDR(addr) *((volatile unsigned long *) (addr)) 这两个宏就可以了。
谢谢各位!
#define BITBAND(addr, bitnum)((addr & 0xF0000000)+0x2000000+((addr & 0xFFFFF)<<5)+(bitnum<<2)) #define MEM_ADDR(addr) *((volatile unsigned long *) (addr)) uint8_t bitband = 0x0; //执行到此处死机了!!! MEM_ADDR(BITBAND(bitband,2)) = 0x1; printf("bit=%02x\r\n",bitband);
程序能够编译,但是执行到 MEM_ADDR(BITBAND(bitband,2)) = 0x1;死机
一粒金砂(中级)
15
0
看G431 资料也可以,或者更简单,用cubeMX 自动生成裸机初始 keil 代码,不都有了?
自动生成代码,您不必理会代码起始,搁在哪里, size 等等。减少开发时间
发表回复 回帖后跳转到最后一页
EEWorld Datasheet 技术支持
查看 »