Arduino - Arduino/AVR/8051 和 ARM/STM32

8051,AVR和ARM架构
8051
8051是由Intel于1980年代初推出的一款8位单片机。它的架构基于哈佛结构(分离的程序和数据存储器),并使用8位数据总线和16位地址总线。
8051内核是一个8位CISC(复杂指令集计算机)处理器,具有不同的寻址模式和指令。该内核具有四个寄存器组、两个16位计数器/定时器、一个串行接口(UART)、以及一些用于输入/输出(I/O)操作的特殊功能寄存器。
8051单片机适用于低功耗、低成本的应用场景,如家电控制、工业控制等。
AVR
AVR是由Atmel(现已被Microchip收购)推出的一款8位微控制器架构,基于哈佛结构,具有高性能和低功耗特点。ATmega单片机是AVR架构的一个例子。
AVR内核是一个8位RISC(精简指令集计算机)处理器,具有较少的寻址模式和指令。相较于8051单片机,AVR单片机的指令执行效率更高。
AVR单片机广泛应用于各种嵌入式系统,尤其是Arduino平台。它们适用于低功耗、低成本的应用场景,如家庭自动化、机器人等。
ARM
ARM是一种基于RISC的处理器架构,由ARM公司(现在是NVIDIA的一部分)设计。ARM架构包括多种不同的处理器核心,如Cortex-A、Cortex-R和Cortex-M系列。
STM32单片机是基于ARM Cortex-M系列核心的一款32位单片机。Cortex-M系列核心是32位RISC处理器,具有相对简单的指令集和寻址模式。
ARM单片机(如STM32)具有较高的性能、更多的外设和功能,适用于更复杂的应用场景,如无人机、物联网设备、高速通信等。

 

使用STM32CubeMX和Keil开发stm32程序的过程如下:

  1. 使用STM32CubeMX进行配置:在STM32CubeMX中选择相应的stm32型号,通过图形界面配置外设、时钟和引脚等。
  2. 生成初始化代码:在STM32CubeMX中,生成针对所选stm32型号的初始化代码和库函数。
  3. 导入到Keil:将STM32CubeMX生成的代码导入到Keil的项目中。
  4. 编写应用程序逻辑:在Keil中,编写应用程序的主要逻辑,例如实现LED闪烁、串口通信等功能。
  5. 编译、调试和烧录:使用Keil编译、调试和烧录程序,将程序运行在stm32微控制器上。
  6. 通过使用STM32CubeMX和Keil,可以更加高效地开发stm32程序,同时避免了手动编写底层驱动代码和配置代码的繁琐和错误。
//STM32CubeMX目录结构
Your_Project_Name/
│
├── Core/
│   ├── Inc/ (头文件目录,包括系统和用户头文件)
│   │   ├── main.h
│   │   ├── stm32f1xx_hal_conf.h
│   │   ├── stm32f1xx_it.h
│   │   └── ...
│   │
│   └── Src/ (源文件目录,包括系统和用户源文件)
│       ├── main.c
│       ├── stm32f1xx_hal_msp.c
│       ├── stm32f1xx_it.c
│       └── ...
│
├── Drivers/ (STM32 HAL库和CMSIS库文件)
│   ├── CMSIS/
│   └── STM32F1xx_HAL_Driver/
│
├── .mxproject (STM32CubeMX项目文件,可用于重新打开和修改配置)
├── Makefile (用于使用make命令进行编译的文件)
└── ...

Your_Project_Name/:项目根目录,所有项目文件和目录都在这个目录下。
Core/:项目核心代码目录,包括系统和用户代码。
Inc/:头文件目录,包括系统和用户头文件。
main.h:主函数头文件,包含系统和用户头文件,定义了主函数需要的所有函数和变量。
stm32f1xx_hal_conf.h:STM32Cube HAL库配置文件,包含STM32芯片的各种配置选项,例如时钟和中断配置等。
stm32f1xx_it.h:中断服务程序头文件,包含系统和用户中断服务程序的函数声明。
...:其他系统和用户头文件。


Src/:源文件目录,包括系统和用户源文件。
main.c:主函数源文件,包含系统初始化和主函数的实现代码。
stm32f1xx_hal_msp.c:STM32Cube HAL库中的系统初始化文件,包含系统时钟、GPIO、UART等外设的初始化代码。
stm32f1xx_it.c:中断服务程序源文件,包含系统和用户中断服务程序的实现代码。
...:其他系统和用户源文件。


Drivers/:STM32 HAL库和CMSIS库文件目录。
CMSIS/:ARM Cortex-M处理器的软件开发标准库。
STM32F1xx_HAL_Driver/:STM32Cube HAL库的驱动程序。


.mxproject:STM32CubeMX项目文件,包含项目的配置和生成信息,可用于重新打开和修改配置。
Makefile:用于使用make命令进行编译的文件,可以自动编译和链接所有源文件并生成可执行文件

ATmega和Arduino IDE

ATmega系列是Atmel公司(现已被Microchip收购)生产的一系列8位AVR微控制器,Arduino是一款基于ATmega微控制器的开源硬件平台。

Arduino IDE是一个用于开发Arduino程序的集成开发环境。与STM32CubeMX和Keil相比,Arduino IDE有以下区别:

  1. 开发环境:Arduino IDE提供了一个简单易用的集成开发环境,用于编写、编译和上传Arduino程序。Arduino IDE集成了基于ATmega微控制器的硬件配置、库函数和编译器等工具,不需要像STM32CubeMX和Keil那样分开使用。
  2. 语言和库:Arduino使用一种类似C++的语言,提供了丰富的库和示例代码,简化了硬件接口和外设驱动的开发。STM32CubeMX和Keil则使用标准的C或C++语言,需要使用STM32 HAL库进行硬件驱动开发。
  3. 面向的用户:Arduino旨在让初学者和非专业开发者更容易入门和使用,提供了丰富的教程和社区支持。而STM32CubeMX和Keil面向的是专业开发者,提供了更强大的功能和性能。

哈佛架构和冯·诺依曼架构

哈佛架构是一种将指令存储器和数据存储器分开的计算机处理器架构。在哈佛架构中,指令存储器和数据存储器分别使用不同的总线,可以独立读取数据。这种架构可以实现更高的程序执行速度和效率,但需要更多的硬件资源来实现。

对于一段C语言代码,如果采用哈佛架构,则程序和数据将分别存储在不同的存储器中,需要使用不同的总线进行读取。例如,对于一个嵌入式系统,程序代码可能存储在闪存中,而数据可能存储在RAM中,需要通过不同的总线进行读取。
冯·诺依曼架构是一种将指令存储器和数据存储器放在同一总线上的计算机处理器架构。在冯·诺依曼架构中,指令和数据使用同一种存储器,需要在不同的时间段进行读写操作。这种架构可以更灵活地使用存储器资源,但可能会导致数据读写速度较慢。

程序和数据将存储在同一块存储器中,需要在不同的时间段进行读写操作。例如,对于一台普通计算机,程序代码和数据都可以存储在内存中,通过内存总线进行读写操作。

 

posted @ 2024-01-30 16:35  Citrusliu  阅读(389)  评论(0编辑  收藏  举报