(内核+外设)
ICode 总线
ICode 中的 I 表示 Instruction,即指令。我们写好的程序编译之后都是一条条指令,存
放在 FLASH 中,内核要读取这些指令来执行程序就必须通过 ICode 总线,它几乎每时每刻都需要被使用,它是专门用来取指的。
驱动单元
DCode 总线
DCode 中的 D 表示 Data,即数据,那说明这条总线是用来取数的。我们在写程序的时候,数据有常量和变量两种,常量就是固定不变的,用 C 语言中的 const 关键字修饰,是
放到内部的 FLASH 当中的,变量是可变的,不管是全局变量还是局部变量都放在内部的
SRAM。因为数据可以被 Dcode 总线和 DMA 总线访问,所以为了避免访问冲突,在取数
的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。
System总线
系统总线主要是访问外设的寄存器,我们通常说的寄存器编程,即读写寄存器都是通过这根系统总线来完成的。
DMA 总线
DMA 总线也主要是用来传输数据,这个数据可以是在某个外设的数据寄存器,可以在
SRAM,可以在内部的 FLASH。因为数据可以被 Dcode 总线和 DMA 总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。
被动单元
内部的闪存存储器(Flash)
内部的闪存存储器即 FLASH,我们编写好的程序就放在这个地方。内核通过 ICode 总
线来取里面的指令。
内部的 SRAM
内部的 SRAM,即我们通常说的 RAM,程序的变量,堆栈等的开销都是基于内部的SRAM。内核通过 DCode 总线来访问它。
FSMC
FSMC 的英文全称是 Flexible static memory controller,叫灵活的静态的存储器控制器,是 STM32F10xx 中一个很有特色的外设,通过 FSMC,我们可以扩展内存,如外部的
SRAM, NANDFLASH 和 NORFLASH。但有一点我们要注意的是, FSMC 只能扩展静态的内存,即名称里面的 S: static,不能是动态的内存,比如 SDRAM 就不能扩展。
AHB 到 APB 的桥
从 AHB 总线延伸出来的两条 APB2 和 APB1 总线,上面挂载着 STM32 各种各样的特色外设。我们经常说的 GPIO、串口、 I2C、 SPI 这些外设就挂载在这两条总线上,这个是
我们学习 STM32 的重点,就是要学会编程这些外设去驱动外部的各种设备。
存储器映射、寄存器映射
什么是寄存器?
给有特定功能的内存单元取一个别名,这个别名就是我们经常说的寄存器,这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。
什么是存储器映射?
给存储器分配地址的过程叫存储器映射,再分配一个地址叫重映射。
寄存器映射:
1.ST官方参考手册
2.(unsigned int*)(0x40010C0C) == 将0x40010C0C强制转化为地址,通过 *指向该地址的寄存器并写值
(缺点是太繁琐)
改进:
总线
(APB2与AHB均为高速总线)
(0100—一个字节对应8位二进制,4字节即为32位)
以GPIOB为例,寄存器地址偏移:
GPIOB_ODR &= ~(1< GPIOB_ODR |= (1< 寄存器工程模板创建 建立一个文件夹 通过mdk5定位到该文件夹,新建一个工程 选定设备 (不使用keil 在线库文件) 添加工程文件至文件夹 魔术棒配置一下output以及keil版本就完事了~ 寄存器点亮LED 原理图判断灯所在外设对应位 对应外设地址与时钟地址 对应外设地址: 时钟地址: 外设与时钟配置 代码: # include "stm32f10x.h" void delay(unsigned int i); int main(void) { //置1操作:|= ; 清零操作: &=~ ; //GPIOB的RCC时钟开启 *(unsigned int*) 0x40021018 |= (1<<3); //GPIOB的配置(推挽输出,10MHZ) *(unsigned int*) 0x40010C00 |= (1<<0); *(unsigned int*) 0x40010C00 |= (1<<4); *(unsigned int*) 0x40010C00 |= (1<<20); //while循环闪烁 while(1) { //GPIOB的输出 *(unsigned int*) 0x40010C0C &= ~(1<<0); *(unsigned int*) 0x40010C0C |= (1<<1); *(unsigned int*) 0x40010C0C |= (1<<5); delay(2000); *(unsigned int*) 0x40010C0C &= ~(1<<1); *(unsigned int*) 0x40010C0C |= (1<<0); *(unsigned int*) 0x40010C0C |= (1<<5); delay(2000); *(unsigned int*) 0x40010C0C &= ~(1<<5); *(unsigned int*) 0x40010C0C |= (1<<0); *(unsigned int*) 0x40010C0C |= (1<<1); delay(2000); *(unsigned int*) 0x40010C0C &= ~(1<<0); *(unsigned int*) 0x40010C0C &= ~(1<<1); *(unsigned int*) 0x40010C0C &= ~(1<<5); delay(2000); } } void SystemInit(void) { // } void delay(unsigned int i) { unsigned char j; for(i;i>0;i--) for(j = 255; j>0; j--); }
上一篇:STM32笔记(三)---寄存器映射--BSRR分析
下一篇:STM32笔记(一)---串口ISP模式下载原理
推荐阅读最新更新时间:2024-11-08 10:23
推荐帖子
- 俺的RPG游戏 中要实时画一张大的位图 闪动的厉害
- 用所谓的双缓冲技术也步行怎么办俺的RPG游戏中要实时画一张大的位图闪动的厉害画图肯定比较占用CPU资源的双缓冲可以利用多个CDC(全部为成员变量)层叠的方法.一个CDC专门存放不常画的背景什么的一个CDC专门图擦的可以适当多几个多一个就会占用内存多一点然后刷新的时候不要重画背景了Invalidate(FALSE);InvalidateRect(,FALSE);遵循原则:能少画就少画能不刷新就不刷新
- fgfgfg 嵌入式系统
- 我的modelsim和modelsim-altera的compile编译按钮都是灰的
- 我的modelsim和modelsim-altera的compile编译按钮都是灰的。请问高手,如何解决?谢谢!百度搜了,不管用。我的modelsim和modelsim-altera的compile编译按钮都是灰的注册好了吗? 好了。现在有时候也不是灰的了,很奇怪
- chenbingjy EE_FPGA学习乐园
- 今年电赛有没可能让作品加入AI技术?
- 每年电赛都在与时俱进,近些年AI这么火,除了物体识别,目标检测,今年有没可能让大家用人工智能技术去实现一些不一样的作品?今年电赛有没可能让作品加入AI技术?电赛的周期还是比较短的,要不是那种一直进行的团队,训练还是挺困难的不可能的不可能的,发展没有这么快的。不可能的,发展没有这么快的。 这倒是,不知道今年会出什么样的题目。 我觉得电赛题目还是挺跟的上时代的。 换位思考一下,如果组委会是自己,该怎么出题? 可以把历届电赛题目list一下看
- wangerxian 嵌入式系统
- 单晶外观质量标准:单晶太阳能电池板质量标准:太阳能板:单晶硅质量标准
- 产品特点:◆所采用的单晶太阳能电池片转换效率高◆所采用的铝合金边框具有高强度,抗机械冲击能力强。◆功率公差范围(保证输出功率在-3~+3%的正负公差范围内)◆本产品有着优秀的弱光性能。◆能够承受强风和雪的荷载太阳能电池板可承受的风荷载(2400Pascal)和雪荷载(5400Pascal)电力参数型号.SFM100W-36/5SFM95W-36/5SFM90W-36/5SFM85W
- 13211002591 工控电子
- 这段是在运算什么?
- 有哪位高手能看懂下边程序在做什么?MOVA,4AHMOVR0,AANLA,#0FEHJNZQ168A;(4AH)!=1Q168A:CLRC;(4AH)=1MOVA,44HANLA,#03HADDA,R0
- ericwx 单片机
- 【2024 DigiKey 创意大赛】二月柳絮大作战项目-07控制外设I/O的输出控制
- 查看原理图可以得到扩展IO引脚分布及注意事项:EX_IO4、EX_IO5、EX_IO6、EX_IO7可以无条件使用打开案例库:ESP32_IO_ExpanderIIC引脚为IO47、IO48修改代码如下:#includeArduino.h#includeESP_IOExpander_Library.h#defineEXAMPLE_CHIP_NAMETCA95xx_8bit#defineEXAMPLE_I
- Maker_kun DigiKey得捷技术专区
设计资源 培训 开发板 精华推荐
- 是德科技有奖直播:元宇宙测试系列研讨会之VR/AR 数字接口测试的挑战
- dsPIC33 “EV”系列抢鲜知,读专题,赢豪礼
- 端午节芯币兑换礼品专场
- 有奖学习 | 探索泰克 4 系列 BMSO 强大功能,还能参与“叠叠乐”省钱大作战!
- 有奖直播 | Keysight HDMI 2.1b 测试技术研讨会
- 有奖直播:借助Maxim的模拟技术优化设计
- TI E2E™ 中文社区8周年,8本技术合集送给热爱技术的你!
- 模拟世界的最重要构成——信号链与电源
- 有奖直播|保护嵌入式设备与系统的完整性和可靠性——英飞凌 OPTIGA™ TPM 安全解决方案
- 有奖直播:DIY 家用监控边缘 AI Box——基于 8TOPS 算力,售价 199 美元的开发套件搭建深度学习案例