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权威指南

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/129005.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

lv11 嵌入式开发 ARM体系结构理论基础(寄存器)3

目录 1 寄存器 2 ARM寄存器 2.1 专用寄存器 1 寄存器 概念 寄存器是处理器内部的存储器,没有地址 作用 一般用于暂时存放参与运算的数据和运算结果 注:全局变量不应该存入寄存器,数量有限会占用寄存器资源,寄存器读…

算法秘籍-王一博 | 数据结构与算法

⭐简单说两句⭐ 作者:后端小知识 CSDN个人主页:后端小知识 🔎GZH:后端小知识 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 数据结构和算法是计算机科学的基石,是计算机的灵魂&…

js将图片文件转为base64格式

/***图片文件转换成BASE64字符串,异步任务*param {File} file图片文件对象*return {String} BASE64字符串*/ const getBase64 (file: File) > new Promise((resolve: (url: string) > void, reject) > {const reader new FileReader();reader.onload ()…

C 语言 break和continue语句

C 语言 break和continue语句 我们在之前的教程中了解了循环。在本教程中,我们将在示例的帮助下学习使用break和继续语句。 C 语言 break break语句在遇到循环时将立即结束循环。其语法为: break;break语句几乎总是与if…else循环内的语句一起使用。 …

SpringBoot实现Excel导入导出

SpringBoot实现Excel导入导出 在我们平时工作中经常会遇到要操作Excel的功能,比如导出个用户信息或者订单信息的Excel报表。你肯定听说过 POI这个东西,可以实现。但是POI实现的API确实很麻烦,它需要写那种逐行解析的代码(类似Xm…

MicroPython ESP32 RTC功能使用介绍

MicroPython ESP32 RTC功能使用介绍 📌Micropython esp32官方文档介绍:https://docs.micropython.org/en/latest/esp32/quickref.html#real-time-clock-rtc🔖本示例基于Thonny平台开发。🌿使用ESP32S3开发板测试。✨所使用的固件版…

2023双十一:实体门店闯入,第二战场全面开战

“闺女,吃饺子了吗?”11月8日,立冬,忙碌一天的陈曦回家路上接到母亲电话,才想起来家里冷冻水饺没了,又不想再去超市,直接打开美团买菜买了两袋,回家就煮了吃。当然,最终她…

多级缓存之实现多级缓存

多级缓存的实现离不开Nginx编程,而Nginx编程又离不开OpenResty。 1. OpenResty快速入门 我们希望达到的多级缓存架构如图: 其中: windows上的nginx用来做反向代理服务,将前端的查询商品的ajax请求代理到OpenResty集群 OpenRest…

最详细的LightGBM参数介绍与深入分析

前言 我使用LightGBM有一段时间了,它一直是我处理大多数表格数据问题的首选算法。它有很多强大的功能,如果你还没有看过的话,我建议你去了解一下。 但我一直对了解哪些参数对性能影响最大,以及如何调整LightGBM参数以发挥最大作用…

Python算法:动态规划解决0-1背包问题

动态规划(Dynamic Programming,简称DP)是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题,它能够将问题…

Android修行手册 - POI操作Excel常用样式(字体,背景,颜色,Style)

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&…

Unity中Shader雾效的原理

文章目录 前言一、我们先看一下现实中的雾二、雾效的混合公式最终的颜色 lerp(雾效颜色,物体颜色,雾效混合因子) 三、雾效的衰减1、FOG_LINEAR(线性雾衰减)2、FOG_EXP(指数雾衰减1)3、FOG_EXP(指数雾衰减2) 前言 Unity中Shader雾…

ESP32 下蓝牙播放音乐

之前发过一贴: esp32 下蓝牙播放音乐歌词的获得_esp32 蓝牙音频-CSDN博客 说的是esp32 蓝牙接收音频流同步获得歌词的方案,但是有个很核心的内容由于硬件原因没有谈及,就是播放音乐。 这几天被抖音上各种水桶卡顿刺激了,经过一…

初识Linux:目录路径

目录 提示:以下指令均在Xshell 7 中进行 一、基本指令: 二、文件 文件内容文件属性 三、ls 指令拓展 1、 ls -l : 2、ls -la: 3、ls [目录名] : 4、ls -ld [目录名]: 四、Linux中的文件和…

【获取cookie的真实到期时间】

获取cookie的真实到期时间 from datetime import datetime print(datetime.fromtimestamp(1734148606))

Java中的可变参数详解与最佳实践

Java中的可变参数详解与最佳实践 摘要引言可变参数的基本概念什么是可变参数?可变参数的语法 可变参数的使用场景与最佳实践何时使用可变参数? 最佳实践:谨慎使用可变参数灵活性 vs. 清晰性避免滥用的情况1. 类型安全问题2. 过多的参数3. 易混…

基于Docker容器DevOps应用方案

文章目录 基于docker容器DevOps应用方案环境基础配置1.所有主机永久关闭防火墙和selinux2.配置yum源3.docker的安装教程 配置主机名与IP地址解析部署gitlab.server主机1.安装gitlab2.配置gitlab3.破解管理员密码4.验证web页面 部署jenkins.server主机1.部署tomcat2.安装jenkins…

[autojs]用户界面GUI编程

用户界面: UI视图: View attr(name, value)attr(name)whidgravitylayout_gravitymarginmarginLeftmarginRightmarginTopmarginBottompaddingpaddingLeftpaddingRightpaddingToppaddingBottombgalphaforegroundminHeightminWidthvisibilityrotationtransformPivotXtransformPivo…

安卓编译命令mm和mmm的区别(mm编译当前工作目录,mmm可编译指定目录)

文章目录 1. mm示例 2. mmm示例 注意 在Android操作系统的源代码编译过程中, mm和 mmm是两个用于构建部分代码的常用命令。它们都属于Android build system提供的命令集合,但用途略有不同: 1. mm mm(make module)命…

Linux C语言进阶-D15递归函数和函数指针

递归函数 指一个函数的函数体中直接或间接调用了该函数本身 执行过程分为两个过程: 递推过程:从原问题出发,按递归公式递推从未知到已知,最终达到递推终止条件 回归阶段:按递归终止条件求出结果,逆向逐步…