tag 标签: STM32单片机

相关博文
  • 热度 6
    2023-8-4 17:32
    370 次阅读|
    0 个评论
    STM32芯片由内核和片上外设两部分组成。STM32F103采用Cortex-M3内核,该内核由ARM公司设计。芯片生产厂商ST则负责在内核之外设计部件并生产整个芯片。这些内核之外的部件被称为核外外设或片上外设,如GPIO、USART(串口)、I2C、SPI等。 ​ 芯片内核与外设之间通过各种总线连接,其中驱动单元有四个,被动单元也有四个。可以将驱动单元理解成内核部分,被动单元理解成外设。 ICode总线 ICode总线是专门用于取指令的总线,其中的“I”代表“Instruction”(指令)。在编写程序后,经过编译,程序将转化为一条条指令并存储在FLASH中。内核通过ICode总线读取这些指令,进而执行程序。 DCode总线 DCode总线用于取数,其中的“D”代表“Data”(数据)。在编写程序时,数据分为常量和变量两种。常量是不变的,使用C语言中的const关键字进行修饰,并存储在内部FLASH中。变量是可变的,无论是全局变量还是局部变量,都存储在内部的SRAM中。 System总线 我们通常所说的寄存器编程,即读写寄存器的操作,都是通过System总线来完成的。System总线主要用于访问外设的寄存器。 DMA总线 DMA总线也主要用于传输数据,这些数据可以来自某个外设的数据寄存器,也可以来自SRAM或内部FLASH。 由于数据既可以被DCode总线访问,也可以被DMA总线访问,因此为了避免访问冲突,取数时需要经过一个总线矩阵进行仲裁,以决定由哪个总线进行取数。 内部的闪存存储器Flash 内部的闪存存储器即为FLASH,它用于存储编写好的程序。内核通过ICode总线来获取存储器中的指令。 内部的SRAM 内部的SRAM,也被称为内存,是程序中变量、堆栈等开销的存储基础。内核通过DCode总线来访问SRAM。 FSMC FSMC的英文全称是Flexible static memory controller(灵活的静态的存储器控制器)。通过FSMC,可以扩展内部存储器,如外部的SRAM、NAND-FLASH和NORFLASH。但是,FSMC只能扩展静态的内存,而不能扩展动态的内存,因此不能用于扩展SDRAM。 AHB 从AHB总线延伸出的两条APB2和APB1总线是常见的总线,它们连接了GPIO、串口、I2C、SPI等外设。学习STM32的重点在于学会对这些外设进行编程,以便驱动外部的各种设备。
  • 热度 4
    2023-7-17 13:50
    782 次阅读|
    0 个评论
    梳理一下STM32单片机的内部总线
    STM32 单片机内部有很多总线,各个总线负责的功能不同。 今天以 STM32 单片机为例,梳理一下 ARM Cortex-M3 架构 MCU 的总线内容。 聊一聊 在介绍各个总线之前,先看一下系统框图( STM32F1xxx 类型单片机) Cortex-M3 处理器总线接口是基于 AHB-Lite 和 APB 协议的。 STM32 单片机内部有以下几种总线接口: I-Code 总线 D-Code 总线 系统总线 DMA 总线 总线矩阵 AHB/APB 桥 下边分别进行讲解 ( 1 ) I-Code 总线 指令总线。 I-Code 总线是一条基于 AHB-Lite 总线协议的 32 位总线。 该总线将 Cortex ™ -M3 内核的指令总线与闪存指令接口相连接。指令预取在此总线上完成。 负责在存储器地址 0x0000_0000 – 0x1FFF_FFFF 之 间的取指操作。取指以字的长度执行,即使是对于 16 位指令也如此。因此 CPU 内核可以一次取出两条 16 位 Thumb 指令。 ( 2 ) D-Code 总线 数据总线。是一条基于 AHB-Lite 总线协议的 32 位总线。 该总线将 Cortex ™ -M3 内核的 DCode 总线与闪存存储器的数据接口相连接,加载数据常量和调试访问。 负责在存储器地址 0x0000_0000 – 0x1FFF_FFFF 之间的数据访问操作 。连接到 D-Code 总线上的任何设备都只需支持 AHB-Lite 的对齐访问,不支持非对齐访问。 ( 3 )系统总线 此总线连接 Cortex ™ -M3 内核的系统总线 ( 外设总线 ) 到总线矩阵,总线矩阵协调着内核和 DMA 间的访问。 负责在 0x2000_0000 – 0xDFFF_FFFF 和 0xE010_0000 – 0xFFFF_FFFF 之间的所有数据传送,取指和数据访问都算上。和 D-Code 总线一样,所有的数据传送都是对齐。 ( 4 ) DMA 总线 此总线将 DMA 的 AHB 主控接口与总线矩阵相联,总线矩阵协调着 CPU 的 DCode 和 DMA 到 SRAM 、闪存和外设的访问。 ( 5 )总线矩阵 总线矩阵协调内核系统总线和 DMA 主控总线之间的访问仲裁,仲裁利用轮换算法。 总线矩阵包含 4 个驱动部件( CPU 的 DCode 、系统总线、 DMA1 总线 和 DMA2 总线 ) 和 4 个被动部件 ( 闪存存储器接口 (FLITF) 、 SRAM 、 FSMC 和 AHB2APB 桥)。 AHB 外设通过总线矩阵与系统总线相连,允许 DMA 访问。 ( 6 ) AHB/APB 桥 (APB) 两个 AHB/APB 桥在 AHB 和 2 个 APB 总线间提供同步连接。 APB1 操作速度限于 36MHz , APB2 操作于全速 ( 最高 72MHz) 。 当对 APB 寄存器进行 8 位或者 16 位访问时,该访问会被自动转换成 32 位的访问:桥会自动将 8 位或者 32 位的数据扩展以配合 32 位的向量。 接下来说一说从 Flash 中读取指令和数据的流程。 闪存的指令和数据访问是通过 AHB 总线完成的。预取模块是用于通过 ICode 总线读取指令的。仲裁是作用在闪存接口,并且 DCode 总线上的数据访问优先。 预取缓冲区有 2 个,每个缓冲区大小位 64 位。在每一次复位以后被自动打开,由于每个缓冲区的大小 (64 位 ) 与闪存的带宽相同,因此只通过需一次读闪存的操作即可更新整个缓冲区的内容。 由于预取缓冲区的存在, CPU 可以工作在更高的主频。 CPU 每次取指最多为 32 位的字,取一条指令时,下一条指令已经在缓冲区中等待。这样提高了 CPU 获取指令的效率和执行指令的速度。 这也就是说,对于 STM32 单片机来说,会读取 Flash 中的指令到缓存。不是直接在 Flash 中执行。 关注公众号“优特美尔商城”,获取更多电子元器件知识、电路讲解、型号资料、电子资讯,欢迎留言讨论。
  • 热度 10
    2023-6-5 18:16
    921 次阅读|
    0 个评论
    如何根据实际需求进行STM32系列单片机选型
    随着科技的飞速发展,单片机在各行业应用中扮演着越来越重要的角色。STM32系列单片机无疑是市场上广受欢迎的微控制器之一,凭借其丰富的产品线及卓越性能,赢得了大量用户的青睐。那么,如何根据实际需求进行STM32系列单片机选型呢?颖特新将为您提供详细的选型指导,助您打造理想的微控制器系统。 一、了解STM32系列单片机产品线 STM32系列单片机基于ARM Cortex-M内核,按性能划分为四个系列:STM32F0 (入门级)、STM32F1 (基本级)、STM32F2 (高性能) 和 STM32F4 (高性能 + DSP)。每个系列都有多个子系列,涵盖了不同的性能、外设和封装特点。因此,在选型过程中,首先要了解STM32的各个系列及其特点。 STM32F0系列:面向入门级应用,以低成本和低功耗为主要特点;包括Cortex-M0、Cortex-M0+等内核,适用于基本的控制任务。 STM32F1系列:面向基本级应用,提供了更多外设和功能选择;包括Cortex-M3内核,可以满足一般性能需求。 STM32F2系列:高性能等级,具有更多的存储器和先进外设;包括Cortex-M3内核,可应对复杂控制场景。 STM32F4系列:最高性能等级,搭载浮点运算单元和DSP指令集;包括Cortex-M4内核,适合多媒体处理、数值计算等高性能应用。 二、确定性能需求 在选型时,首先要分析项目的性能需求。根据应用场景确定所需的处理能力(如CPU频率)、存储空间(RAM/Flash)与外设。对于低性能需求,可选择STM32F0/F1系列;若需要高性能、浮点运算或DSP能力,则可考虑STM32F2/F4系列。 三、关注电源与功耗 针对不同应用场景,电源和功耗需求会有显著差异。例如,可穿戴设备、物联网传感器等需要低功耗特性来延长电池寿命;而工业自动化、机器人应用则需要稳定的电源系统。确保所选单片机安全工作电压范围与实际应用场景匹配,同时核查其静态/动态功耗特性。 四、考虑外设需求 确保所选单片机支持项目所需的外设接口与通信协议。例如,对于需要多种传感器的应用,选择具有足够GPIO引脚和模拟输入的型号;而涉及远程控制或数据采集的系统,则需要具备串行通信(如UART、I2C、SPI)功能。此外,根据需要评估其他外设(如定时器、PWM输出、RTC等)。 五、封装与尺寸选择 根据项目的空间要求选择合适的封装类型和尺寸。STM32系列提供了丰富的封装选项,如QFN、LQFP、BGA等。对于空间受限的应用场景,小型封装(如QFN)可能更受青睐;而对于需要较多引脚的项目,大型封装(如LQFP、BGA)可能更合适。在选型时,请确保所选单片机封装与PCB设计和制造要求相匹配。 六、软件开发环境与生态 一个完善的软件开发环境和丰富的生态系统将有助于提高开发效率和项目成功率。STM32系列单片机支持多种编程语言(如C/C++),并提供了广泛的库函数、示例代码和开发工具。此外,STM32还拥有活跃的开发者社区和技术支持,这些资源将有助于项目的顺利进行。 七、预算与成本 在满足性能与功能需求的前提下,考虑预算与成本因素也是选型过程中至关重要的一环。请关注不同型号单片机的价格差异,并在可接受范围内选择具有最佳性价比的产品。同时,别忽略其他相关费用,例如硬件开发、软件许可等。 总结 通过以上七个方面的综合分析,您可以更加明智地进行STM32系列单片机选型。在此基础上,还需要考虑生产批量、采购渠道等因素,以确保项目的稳定运行和长期可靠性。 STM32系列单片机凭借其卓越性能、丰富的外设选项和广泛的应用场景,在全球范围内受到众多开发者与工程师的关注与喜爱。通过这篇详尽的选型指南,您将能够更加深入地了解STM32系列产品并作出明智的决策,为您的项目插上翅膀,实现创新和突破。
  • 热度 5
    2023-5-11 10:34
    1043 次阅读|
    0 个评论
    LL编程方式 vs HAL编程方式:哪个更适合STM32开发?
    STM32是一款广泛使用的微控制器,它具有强大的功能和广泛的应用。在STM32的编程中,有两种主要的编程方式:HAL和LL。LL是Low Level的缩写,HAL是High Level的缩写。在STM32的编程中,使用LL编程方式相比使用HAL编程方式更加高效。颖特新将介绍STM32 LL为什么比HAL高效。 一、什么是HAL和LL? HAL是ST公司推出的一种高级编程方式,它是一种面向对象的编程方式,可以帮助开发人员更快地编写STM32应用程序。HAL编程方式是基于库函数的,它提供了一系列的API函数,可以帮助开发人员快速地编写STM32应用程序。 LL是ST公司推出的一种低级编程方式,它是一种面向寄存器的编程方式,可以让开发人员更加精细地控制STM32的各个寄存器。LL编程方式提供了一系列的宏定义和内联函数,可以让开发人员更加方便地控制STM32的寄存器。 二、LL相对于HAL的优势 1.代码效率更高 LL编程方式相对于HAL编程方式,代码效率更高。因为LL编程方式是面向寄存器的编程方式,可以直接控制寄存器,而不需要通过API函数来控制寄存器。这样可以减少函数调用的次数,提高程序的执行效率。 2.代码体积更小 LL编程方式相对于HAL编程方式,代码体积更小。因为LL编程方式是面向寄存器的编程方式,可以直接控制寄存器,而不需要通过API函数来控制寄存器。这样可以减少库文件的体积,从而减小代码的体积。 3.代码可读性更强 LL编程方式相对于HAL编程方式,代码可读性更强。因为LL编程方式是面向寄存器的编程方式,可以直接控制寄存器,而不需要通过API函数来控制寄存器。这样可以让代码更加易于理解,提高代码的可读性。 4.代码可移植性更强 LL编程方式相对于HAL编程方式,代码可移植性更强。因为LL编程方式是面向寄存器的编程方式,可以直接控制寄存器,而不需要通过API函数来控制寄存器。这样可以让代码更加容易移植到其他平台上。 三、如何使用LL编程方式 使用LL编程方式需要了解STM32的寄存器和寄存器位的含义,以及如何使用宏定义和内联函数来控制这些寄存器和寄存器位。下面是一个使用LL编程方式的示例: #include "stm32f4xx.h" int main() { // 使能GPIOB时钟 AHB1ENR |= RCC_AHB1ENR_GPIOBEN; // 配置GPIOB5为输出模式 MODER |= GPIO_MODER_MODE5_0; while (1) { // 置位GPIOB5 BSRR |= GPIO_BSRR_BS5; // 延时一段时间 for (int i = 0; i < 1000000; i++); // 复位GPIOB5 BSRR |= GPIO_BSRR_BR5; // 延时一段时间 for (int i = 0; i < 1000000; i++); } } 上述示例中,使用LL编程方式控制了GPIOB5的输出状态。首先使能GPIOB时钟,然后配置GPIOB5为输出模式。在while循环中,通过置位和复位GPIOB5的寄存器位来控制GPIOB5的输出状态,并且使用延时函数来控制输出状态的时间。 四、总结 颖特新(http://www.yingtexin.net/)介绍了STM32 LL为什么比HAL高效,LL编程方式相对于HAL编程方式,代码效率更高、代码体积更小、代码可读性更强、代码可移植性更强。使用LL编程方式需要了解STM32的寄存器和寄存器位的含义,以及如何使用宏定义和内联函数来控制这些寄存器和寄存器位。在实际的STM32开发中,可以根据实际情况选择使用LL编程方式或HAL编程方式。
相关资源
  • 所需E币: 3
    时间: 2019-6-7 13:37
    大小: 844.27KB
    上传者: royalark_912907664
    该设计是一种自动反馈、输出稳定的恒流源系统。该系统是以BUCK电路为基本电路,以STM32F103C8T6型单片机、电流传感器ACS712等为辅助电路元器件设计的。外部控制按钮可以设定恒流源流过负载的电流大小,经过电流传感器ACS712检测流过负载的电流大小,并将信号传输给单片机形成自动反馈,由单片机调节输出特定占空比的PWM波,进而控制BUCK电路输出特定大小的电流信号。经过对恒定负载和可变负载的检测,测试结果与预期目标一致,可以满足设计控制要求。
  • 所需E币: 3
    时间: 2019-6-7 19:44
    大小: 680.04KB
    上传者: royalark_912907664
    该设计是一款多量程、高精度的转速扭矩测量显示传输系统。该系统以JN338型转速扭矩传感器为基础,通过实时检测传感器产生的转速和扭矩信号,计算出转动设备的实时转速和扭矩,进而实现数据的显示与远程传输。经过检测安装在步进电机上的JN338型转速扭矩传感器产生的转速和扭矩信号,测试结果与预期目标一致。可以满足设计检测要求。