ARM-Cortex_M3/M4处理器开发简介

一、关于ARM-Cortex_M4处理器

ARM-Cortex_M3和ARM-Cortex_M4处理器使用32位架构,寄存器组中的内部寄存器、数据通路以及总线接口都是32位的,两者均基于ARMv7-M架构。

1、 Cortex_M处理器使用的指令集架构(ISA)为Thumb ISA,其基于Thumb-2技术并同时支持16位和32位指令。

2、ARM-Cortex_M3和ARM-Cortex_M4处理器特点:

①三级流水线设计

②哈佛总线架构,具有统一的存储器空间:指令和地址总线使用相同的地址空间。

③32位寻址,支持4GB存储器空间。

④具有NVIC(嵌套向量中断控制器)的中断控制器。

⑤支持可选MPU(存储器保护单元)

⑥可选的浮点指令(单精度)

3、ARM微控制器的构成:

处理器、程序存储器(如FLASH)、SRAM、外设、内部总线、时钟生成逻辑(包括锁相环)、复位生成器及这些信号的分布网络、电压调节和电源控制器回路、其它模拟部件(ADC/DAC等)、I/O部分等。

处理器只占芯片中的一小块区域,以下为微控制器的多个模块。

二、ARM-Cortex_M3/M4处理器开发

(一)开始需要准备什么

  1. 开发组件(keil微控制器开发套件 MDK-ARM)
  2. 开发板
  3. 调试适配器
  4. 软件设备驱动
  5. 示例和代码
  6. 文档及其他(用户手册、数据手册以及应用笔记)
  7. 其他硬件(逻辑分析仪、示波器、usb分析仪、万用表等)

(二)软件开发流程:

  1. 创建工程
  2. 添加文件到工程
  3. 设置工程选项
  4. 编译和链接
  5. flash编程
  6. 执行程序和调试

常见的软件开发流程

(三)软件流程

  1. 轮询

轮询方式的简单处理应用

对于简单的任务,处理器可以等待数据准备好后进行处理,而后再等待。

2、中断驱动

外设在需要服务时可以将处理器唤醒。在中断驱动的应用中,不同外设的中断可以指定为不同的中断优先级。

简单的中断驱动应用

一般情况下,外设服务的数据处理分为两部分,一部分是需要快速处理,而一部分则可以执行得稍微慢一些。这时可以将中断驱动和轮询结合起来。

3、多任务系统

实时操作系统(RTOS)可以用于处理任务调度。RTOS可以将处理器时间分为多个时间片且将时间片分给所需的进程,以实现多个进程同时执行。需要一个定时器来记录RTOS的时间,且在每个时间片的最后,定时器会产生定时中断,它会触发任务调度器且确定是否要执行上下文切换。若需要执行,当前正在执行的任务就会被暂停,处理器转而执行另一个任务。

RTOS还具有信号量和消息传递的特性。

三、C程序中的数据类型

四、输入、输出和外设访问

微控制器都有多个I/O接口和定时器、实时时钟(RTC)等外设。ARM-Cortex-M3 andM4 除了GPIO/SPI/UART/I2C等常见的接口外设,还有许多高级接口外设,如USB/CAN/以太网及ADC/DAC等模拟接口,需要度微控制器提供的用户手册才能知道用法。

对于这些微控制器,外设经过了存储器映射,也就是寄存器可以从系统存储器映射中访问。为了用C程序访问这些外设,可以使用指针。

一般来说,外设在使用前需要初始化,一般包括以下几个步骤:

  1. 若需要,设置时钟控制回路使能连接到外设和对应引脚的时钟。(外设时钟一般是默认关闭的。需要在使用外设的时候使能时钟;有时,还需要使能外设总线系统的时钟。)
  2. 有时,还需要配置I/O引脚的操作模式。大多微控制器都有复用的I/O引脚。比如:配置引脚的输出、输入方向,功能。有时还需要编程其它的配置寄存器,定义输出类型等预想的电气特性(电压、上拉、下拉、开漏或推挽等)
  3. 外设配置
  4. 中断配置(需要中断操作,需在中断控制器NVIC ,使能中断和配置中断优先级)

需要设置各种外设模块中的外设寄存器。

微控制器接口:

USB转UART可以printf,使用串口工具。

五、Cortex 微控制器软件接口标准(CMSIS)

CMSIS-core的组织架构:

CMSIS文件被集成在微控制器供应商提供的设备驱动库软件包里。一般CMSIS定义为三层:

  1. 内核外设访问层 :内核寄存器 和内和外设的辅助函数,地址定义等
  2. 设备外设访问层:外设寄存器的地址定义及中断分配、异常向量定义
  3. 外设访问函数

参考资料:ARM-Cortex_M3与Cortex_M4权威指南

相关推荐
烧冻鸡翅QAQ16 分钟前
考研408笔记
笔记·考研
StarPrayers.18 分钟前
卷积层(Convolutional Layer)学习笔记
人工智能·笔记·深度学习·学习·机器学习
能不能别报错44 分钟前
K8s学习笔记(十五) pause容器与init容器
笔记·学习·kubernetes
无言以对,沉默不语,随你随你。1 小时前
【解决办法】GitBash不能在任意文件夹打开
经验分享·笔记·git
牛马大师兄2 小时前
STM32独立看门狗IWDG与窗口看门狗WWDG知识梳理笔记
笔记·stm32·单片机·嵌入式硬件·嵌入式·看门狗
wan5555cn2 小时前
Windows 11系统鼠标键盘被禁用问题的全面解决方案
windows·笔记·深度学习·计算机外设
zhangrelay2 小时前
ROS云课三分钟-使用动态参数重配置调试Teb导航案例-251008
笔记·学习
BingeBlog3 小时前
[01] Qt的UI框架选择和对比
开发语言·c++·笔记·qt·ui·开源软件
生物小卡拉3 小时前
R脚本——Deseq2差异表达分析--v1.0
windows·经验分享·笔记·学习·信息可视化·数据分析
初九之潜龙勿用5 小时前
技术与情感交织的一生 (十四)
笔记·印象笔记