当前位置: 首页 > news >正文

STM32F0实战:基于HAL库开发【2.1】

7.4.2 从待机模式唤醒

待机模式允许达到能耗最低,它基于Cortex-M0深度睡眠模式,电压调节器禁用,1.8V域关闭,PLL、HIS和HSE振荡器也关闭,SRAM和寄存器内容丢失。只有RTC寄存器、RTC备份寄存器和备用电路保持工作。可以使用HAL库中的HAL_PWR_EnterSTANDBYMode()函数进入待机模式,由于待机模式下电压调节器和时钟均关闭,因此只有WKUP引脚的上升沿、RTC闹钟(Alarm A)、RTC唤醒、篡改事件、时间戳事件、NRST外部重置事件或IWDG复位才能将微控制器唤醒。

本例中待机模式下的唤醒是通过WKUP1(PA0)引脚来实现的,当微控制器复位后,同样是执行一个数字由“200”开始的递减,当数值递减至“0”时,执行WFI指令将微控制器置于待机模式,之后WKUP1(PA0)引脚的上升沿会将微控制器唤醒,并再次进行数字的递减过程。使用STM32CubeMX软件建立项目时,在“Pinout”和“Clock Configuration”视图中对引脚和时钟的配置方法如图7-8和图7-9所示。

待机模式下的唤醒程序详见代码清单7-2。

代码清单7-2 待机模式下的唤醒程序(main.c)(在附录J中指定的网站链接下载源代码)

第8章 DMA控制器

DMA(Direct Memory Access)即直接存储器访问,是一种不经过CPU而直接从存储器存取数据的数据交换模式。在DMA模式下,CPU只需要向DMA控制器下达指令,数据传输由DMA自动完成,这样能够减少CPU的资源占用。DMA是现代高性能微控制器的标准配置,本章将重点介绍STM32F0系列微控制器片内的DMA控制器。

8.1 DMA概述

DMA控制器用于提供外设和存储器之间、存储器和存储器之间的高速数据传输,数据可以通过DMA控制器进行快速传输而无须CPU干预,这就为其他操作保留了CPU的资源。DMA非常适用于快速设备与存储器批量交换数据的场合,使用DMA既能够保证数据传输的准确性,又可以大幅度减少快速设备的读写操作对CPU的干扰。

8.1.1 DMA控制器内部结构

STM32F072VBT6微控制器片内的DMA控制器共有7个通道,每个通道都相应地管理一个或多个外设对存储器的访问请求,DMA控制器和Cortex-M0内核共享系统数据总线,用于执行直接存储器数据传输,控制器内部的仲裁器用于协调不同DMA请求的优先权,其内部结构如图8-1所示。

当CPU和DMA同时访问相同的目标(RAM或外设)时,DMA请求会暂停CPU访问系统总线若干个周期,总线仲裁器执行循环调度,以确保CPU至少可以得到一半的系统总线带宽。每个通道都与专用的硬件DMA请求相连接,并且每个通道都支持软件触发。当有多个DMA请求发生时,其优先权可以通过软件编程来设置。数据源和目标数据区的传输宽度可以按需设置,数据可以以字节、半字或字的长度进行传输,但源和目标地址的数据长度必须一致。DMA传输的最大数量为65536,并且支持无限循环操作。每个DMA通道都有DMA传输中、DMA传输完成和DMA传输错误三个事件标志。这三个事件标志的逻辑或作为一个单独的中断请求,向CPU申请中断。

8.1.2 DMA的处理过程

在发生一个事件后,外设向DMA控制器发送一个D

http://www.jsqmd.com/news/299539/

相关文章:

  • 大语言模型训练原理解析:ChatGPT背后的技术原理与应用价值
  • MCP与A2A深度解析:AI系统集成与智能体协作的未来之路
  • 【升级版本】基于多目标粒子群算法的微电网优化调度【风光、储能、柴油、燃气、电网交互】附Matlab代码
  • 【实时无功-有功控制器的动态性能】【带有电流控制的两级电压源变流器(VSC)】采用αβ阿尔法-贝塔转换进行电流反馈的实时无功功率控制器附Simulink仿真
  • 【2026最新】大模型面试全攻略:23家科技公司面试经验+高频考点总结,助你轻松上岸
  • 【使用Copulas对金融时间序列进行波动率估计与预测,涵盖GARCH、EWMA和EqWMA等模型】基于件风险价值(CVaR)、极值理论(EVT)、风险因子及蒙特卡洛模拟进行市场风险管理附Matlab
  • 个人AI产业定义、产业架构与发展趋势白皮书|附60页PDF文件下载
  • 企业AI开发与技术实践白皮书2025|附36页PDF文件下载
  • 【数据驱动】【航空航天结构的高效损伤检测技术】一种数据驱动的结构健康监测(SHM)方法,用于进行原位评估结构健康状态,即损伤位置和程度,在其中利用了选定位置的引导式兰姆波响应附Matlab代码
  • 【柔性作业车间调度问题FJSP】基于鹅优化算法(GOOSE Algorithm,GOOSE)求解柔性作业车间调度问题(FJSP)研究附Matlab代码
  • 如何保证服务高可靠? - 实践
  • P1462 通往奥格瑞玛的道路
  • Codeforces Round 1073 Div.1 写题记录(编号 2190)
  • 动态系统思维:告别僵化内耗的破局指南
  • Vue 1.26
  • 一站式指南:Obsidian Typora 统一写作规范与存量内容迁移实战
  • UnicodeDecodeError: ‘charmap‘ codec can‘t decode byte 0x81 in position 17: character maps to <undefi
  • golang中使用 sort.Interface 实现复杂多级排序
  • MySQL 中的 utf8 vs utf8mb4 区别
  • 指针,C语言的灵魂与噩梦:从入门到“放弃”的终极指南 [特殊字符]
  • SAGE-Net:融合语义信息的自动驾驶注意力预测框架
  • Flutter for OpenHarmony:用 StatefulWidget 实现基础用户交互
  • 【读论文】EQ情感智能benchmark:EmoBench
  • YOLO26改进 - 采样 | 小目标分割救星:HWD 降采样少丢细节提精度
  • 【统一功能处理】从入门到源码:拦截器学习指南(含适配器模式深度解读) - 教程
  • 洛谷 P1918:保龄球 ← STL map
  • 详细介绍:C++蓝桥杯之结构体10.15
  • 抖店商品图如何保存到手机上的方法
  • 云端推理中的模型量化技术:减小体积提升速度
  • C++实现ATM状态机