古交网站建设,平面设计学生作品集,人人设计网官方网站,哈尔滨有哪些做网站的公司一、STM32的存储器映像
1 文中的缩写 2 系统构架#xff08;原理图#xff09; 3. 存储器映像 #xff08;1#xff09;STM32是32位CPU#xff0c;数据总线是32位的 #xff08;2#xff09;STM232的地址总线是32位的。#xff08;其实地址总线是32位不是由数据总线是…
一、STM32的存储器映像
1 文中的缩写 2 系统构架原理图 3. 存储器映像 1STM32是32位CPU数据总线是32位的 2STM232的地址总线是32位的。其实地址总线是32位不是由数据总线是32位决定的 3STM32可以访问的地址容量是4GB2的32次方Byte 4STM32肯定用不完4GB的空间所以就有了逻辑上地址实际的地址 5存储器的映像就是告诉我们STM32设计时是如何使用这4GB的逻辑地址。 ARM是内存与IO统一编址 4.STM32实际地址安排 0x0000 0000 - 0x07ff ffff 128MB 映射区【解决不同启动方式】 0x0800 0000 -0x0801 ffff 128KB Flash 0x1fff f000 - 0x1fff f800 2KB System memory 0x 1fff f8000 -0x1fff f9ff 512B option bytes 二、STM32的位带详解bitband
1.基本概念 bitband有时候翻译位位带操作 位带操作地址的映射一对一 别名存储器区逻辑地址 字32位 映射 位段存储区 位 别名存储器区大小位段存储器区大小的32倍 2.别名存储器区和位段存储区的映射 为什么要有位带操作因为STM32本身只能支持81632位的操作不能支持位操作不能支持一位。 但是实际编程中有对1位单独操作的需求。一般我是这么做的因为STM32不支持位操作所以我们对32进行整体操作。我们一般读取整个32位然后对其中一位做操作在整体32位写回去。这么做是可以的但是效率低。 如何改进效率想一个方法只修改其中一位还不影响其他位。如果硬件不支持是没办法的除非硬件给你支持位操作。 3.位段操作的原理 而ARM又不支持位操作所以发明了位带操作来替代。位带操作的思路是不让你直接单独操作这一位而是把这一位给你映射到别的某一个地方的32位然后你在别的地方操作那个32位相当于操作这里的这1位。 位带操作的核心问题如何由位段存储器区地址计算出别名存储器区的地址。 4.位段操作计算公式 三、STM32启动模式
1. 嵌入式闪存 2.三种启动模式 1启动模式是研究STM32上电复位后从哪里区执行程序的问题 可以通过 BOOT[1:0]引脚选择三种不同启动模式。 2用户闪存存储器区是给我们设计来放置用户写的代码的我们程序员写的代码烧录时就被烧录到这里了正常各种状态下就要把STM32设置为从这里启动的。 3系统存储器区在非常规情况下用用来实现ISP功能 4内嵌SRAM区这种也是非常规的用来实现调试器调试功能的。 我们常用的是用户闪存和系统存储区 3.ISP和IAP
单片机三种烧录方式ISP、IAP和ICP有什么不同-电子工程专辑
ISP程序自动【系统存储器区】 ISP一般是通过单片机专用的串行编程接口对单片机内部的Flash存储器进行编程 ISP就是in-system programming在系统烧录在系统编程。以前要烧录bin文件到flash单片机内部的flash中是需要借助专用的烧录器的。比较麻烦。后面我们就需要一种不用烧录器也不用把单片机从板子上卸下来烧录方法这种方法就是ISP。一般ISP都是通过串口把bin/hex文件直接isp到单片机内部flash中。如果想要使用ISP则要从系统存储器区开始启动STM32. IAP手写操作代码【用户闪存存储器区】 而IAP技术是从结构上将Flash存储器映射为两个存储体当运行一个存储体上的用户程序时可对另一个存储体重新编程之后将控制从一个存储体转向另一个。 IAPin-application programming在应用编程在应用烧录在线升级。 IAP的核心是用户需要在自己的应用程序中去操作单片机内部flash的控制器的寄存器实现对内部flash的烧录功能。 然后IAP的时候用户的程序通过串口usbrtheernet来接收PC发送过来的bin/hex文件然后将其烧录到内部flash中去完成IAP。完成后再次启动后就会从用户存储器区执行更新就会起效果。 一般实现IAP需要人为的将用户存储器区分为部分bootloaderapp【实际进行功能更新的程序】 四、STM32电源管理系统PWR 1.框图 外部传输电压3.3V但是实际内部电压是1.8V 2.上电复位(POR)和掉电复位(PDR) 3 低功耗模式 睡眠模式停机STOP模式待机模式-----功耗越来越低但是开机需要的时间越来越长。 降低功耗实际上是断开时钟。【时钟是关键】 为了省电当该GPIO使用到才开启其时钟 1.睡眠模式SLEEP CPU停但是内部外设运行 唤醒源任何中断 1.进入睡眠模式 2.退出睡眠模式 2.停止模式STOP CPU停时钟停内部外设也停只有SRAM内存和寄存器还能报错原来的值 唤醒源外部中断只能是外部中断 外部中断 VS 内部中断 内部中断定时器USB 外部中断按钮 3.待机模式SUSPEND CPU停外设停时钟停SRM和寄存器停相当于整个都断电关机了只有备份寄存器和待机电路还能工作。 唤醒源WKUP引脚上升沿RTC闹钟NRST引脚上外部复位IWDG复位 五、复位与时钟
1.复位 STM32F10xxx 支持三种复位形式分别为系统复位、上电复位和备份区域复位待机模式下。 1.系统复位 复位后CPU都会被强制到复位向量中去执行程序。 RCC——CSR当发生了某一个复位则对应的bit位上的电平会发生变化 2.电源复位 2.时钟
1.时钟源 时钟来源 不同时钟源带来不同的特点 分为三种 1纯内部全部内嵌到单片机中【缺点很不精确】 2内外部时钟产生的振动电路在内部晶振在外部【晶振不能产生时钟】 3纯外部外部直接产生时钟 2.PLL锁相环电路 特点可以进行倍频 频率是逐级递减 3.时钟通道与流向分频 时钟的流向不是固定的 4.完全独立的多个时钟 多个时钟可能不是来自一个地方所以使用的时钟电路会不同 六、STM32的时钟框图
1.总体配置 我们一般使用纯内部和内外部 一般上电的时候是使用内部的时钟周期【速度快】但是一段时间切换为外部【较为精准】 1.2套独立时钟 因为我们的晶体震荡电路和外部晶振不同 1HSxxx
2LSxxx 2.纯内部HSI内部高速时钟源SLI RC时钟源可以产生时钟震荡 HSIhigh sourse intern 3.内外部HSE外部高速时钟源LSE HSEhigh sourse extern 4.纯外部OSC——INOSC32——IN 如果外部有一个高速/低速时钟要输入则按照输入的来控制RTC 如果没有则直接使用标志的 5.时钟树
STM32学习8 理解STM32的时钟树_51CTO博客_stm32时钟树 时钟节点名称 1HSILSI内部高速/低速时钟源 2HSELSE外部高速/低速时钟源 3PLLCLK输出时钟 4SYSCLK输入到CPU时钟 5USBCLKUSB模块时钟 6HCLKAHB时钟 7FCLK空闲时钟 8PCLK1PCLK2APB1APB2总线时钟 9ADCCLKADC时钟 10RTCCLKRTC时钟 11IWDGCLK看门狗 6.systick和MCO
1systick SYSCLKCPU工作的频率 systick系统滴答时钟【时间片】 RCC【STM32中管理时钟的总名称】通过AHB时钟8分频后提供给Cortex系统定时器的外部时钟。通过对SysTick控制与状态寄存器的设置可以选择上诉时钟或者Cortex AHB时钟作为SysTick时钟。 2MCO输出位 八、时钟寄存器 我们在使用时钟的时候记得打开时钟。 STM32默认时钟都是关闭的。 0.查看RTC的基地址 基地址查memory map图得到然后配合偏移量得到寄存器地址 一个寄存器占4字节32bit所以相邻的寄存器相差4字节 1.RCC_CR时钟倍频时钟控制寄存器 因为RCC起始地址为:0x4002 1000 所以CR的首地址【偏移量为0】应该是0x4002 1000 2.RCC_CFGR时钟配置寄存器 CFGR首地址为0x4002 10000x040x4003 1004 3.RCC_CIR:时钟中断寄存器 CIR首地址为0x4002 10000x080x4003 1008 4.RCC_APB2RSTR/RCC_APB1RSTR:APB2 /APB1 外设复位寄存器 复位的是时钟 5.RCC_AHBENR/ RCC_APB2ENR/ RCC_APB1ENRAHB外设时钟使能寄存器 6.RCC_CSR控制/状态寄存器 判断从哪里来进入复位的。 7.寄存器分类 寄存器位一般有三种状态位开关位设置值位 1状态位只用读取获取状态【一般是硬件设置的】 2开关位一般写“1”表示打开【使能】写“0”表示关闭 3设置值位把某一个值设置进去表示要写入什么