STM32-01-认识单片机

news2024/12/23 1:32:08

文章目录

  • 一、单片机简介
  • 二、Cortex-M系列介绍
  • 三、初识STM32
  • 四、STM32原理图设计
  • 五、搭建开发环境
  • 六、STM32初体验
  • 七、MDK5使用技巧

一、单片机简介

  • 单片机是什么?

    单片机:Single-Chip Microcomputer,单片微型计算机,是一种集成电路芯片。

    下面是电脑与单片机的对应关系:

    在这里插入图片描述

  • 单片机的特点?

    • 体积小:<5mmx5mm
    • 功耗低:mA级
    • 集成度高:IO、TIM、AD、DA
    • 使用方便:C、Debug
    • 拓展灵活:IIC、SPI、FSMC
  • 单片机有什么用?

    • 仪器仪表:电源、示波器、焊台
    • 家用电器:空调、冰箱、洗衣机
    • 工业控制:机器人、PLC、电梯
    • 汽车电子:GPS、ABS、胎压监测
  • 单片机发展历程?

    在这里插入图片描述

  • 了解两种指令集?

    对比项复杂指令集计算机(CISC)精简指令集计算机(RISC)
    目的为了便于编程和提高存储器访问效率为了提高处理器运行速度
    指令特点1,指令多,模式多,格式可变
    2,指令的执行需要的时钟周期差距很大
    3,无流水线或流水线程度较低
    4,指令由微代码翻译执行
    1,指令少,模式少,格式固定
    2,大多数指令只需1个时钟周期
    3,流水线结构
    4,指令直接由硬件执行
    优点1,指令丰富、功能强大
    2,寻址方式灵活
    1,指令精简,易于设计,使用率均衡
    2,程序执行效率高
    缺点1,指令使用率不均衡
    2,不利于采用先进结构提高性能
    3,结构复杂不利于超大规模集成电路实现
    1,指令数较少,功能不及CISC强大
    2,寻址方式不够灵活

    使用CISC和RISC举例

    在这里插入图片描述

  • 冯诺依曼结构和哈弗结构的区别?

    在这里插入图片描述

    冯诺依曼结构的优点是占用的资源少,哈弗结构的优点是执行效率较高。

二、Cortex-M系列介绍

  • ARM公司:只做内核设计和IP授权,不参与芯片设计。
    在这里插入图片描述

  • ARM架构为什么能风靡全球?

    1. 低功耗、低成本、高性能
    2. 支持16/32位双指令集
    3. 拥有众多合作伙伴
  • Cortex内核分类及特征?

    对比项Cortex-A
    (Application)
    Cortex-R
    (Real-time)
    Cortex-M
    (Microcontroller)
    特点高时钟频率,长流水线,高性能较高时钟频率,较长的流水线,实时性强时钟频率较低,通常较短的流水线,超低功耗
    应用场景移动计算、智能手机、平板电脑、数字电视军工、汽车电子、无线基带、硬盘控制器工控、传感器、消费电子、家用电器、医疗器械

三、初识STM32

  • STM32是什么?

    ST:意法半导体, M:MCU/MPU,32:32位

    在这里插入图片描述

  • STM32命名规则?

    在这里插入图片描述

四、STM32原理图设计

  • 芯片的基本参数(STM32F103ZET6)

    参数范围
    主频72MHz
    FLASH512KB
    SRAM64KB
    工作电压2.0~3.6V
    最大电流150mA
    IO引脚接入电压范围COMS端口:-0.3V ~ 3.6V 兼容5V端口:-0.3V ~ 5.5V
    单个IO引脚最大电流25mA
  • STM32F103ZET6引脚分布

    在这里插入图片描述

    STM32引脚类型:电源引脚、晶振引脚、复位引脚、下载引脚、BOOT引脚、GPIO引脚。

  • 单片机最小系统?

    最小系统:保证MCU正常工作的最小电路组成单元

在这里插入图片描述

  • 电源电路

    在这里插入图片描述

  • 复位电路

在这里插入图片描述

  • BOOT启动电路

    在这里插入图片描述

  • 晶振电路

    在这里插入图片描述

  • 下载调试电路

    在这里插入图片描述

五、搭建开发环境

  • 常用开发工具

    工具名称所属公司说明
    集成开发环境(IDE)MDKKeilSTM32最常用的集成开发环境,简单易用
    EWARMIAR支持STM32开发,用的人少一些
    仿真器DAPARM开源、免驱、带虚拟串口功能、速度快、廉价
    STLINKST支持全面、稳定、廉价
    JLINKSegger稳定、高速、价格贵
    串口调试助手XCOM正点原子功能多、稳定、简单易用
    SSCOM丁丁稳定、小巧、简单易用
  • STM32串口和电脑USB通信示意图?

    在这里插入图片描述

六、STM32初体验

  • MDK5编译例程

    使用MDK5编译例程,在Program Size里面有四种数据类型,Code、 RO-Data、RW-Data、ZI-Data

    数据类型占用Flash or SRAM说明
    CodeFlash代码
    RO-DataFlash只读数据,一般是指 const 修饰的数据
    RW-DataFlash and SRAM初值为 非 0 的可读可写数据
    ZI-DataSRAM初值为 0 的可读可写数据
  • DAP下载

    • 电路连接

      在这里插入图片描述

    • 硬件连接

      在这里插入图片描述

    • 软件配置

      配置ST-Link
      在这里插入图片描述

      设置下载算法

      在这里插入图片描述

    • 开始调试

      在这里插入图片描述

    1. 复位:其功能等同于硬件上按复位按钮。相当于实现了一次硬复位。按下该按钮之后,代码会重新从头开始执行。
    2. 执行到断点处:该按钮用来快速执行到断点处,有时候你并不需要观看每步是怎么执行的,而是想快速的执行到程序的某个地方看结果,这个按钮就可以实现这样的功能,前提是你在查看的地方设置了断点。
    3. 停止运行:此按钮在程序一直运行的时候会变为有效,通过按该按钮,就可以使程序停止下来,进入到单步调试状态。
    4. 执行进去:该按钮用来实现执行到某个函数里面去的功能,在没有函数的情况下,是等同于执行过去按钮的。
    5. 执行过去:在碰到有函数的地方,通过该按钮就可以单步执行过这个函数,而不是进入这个函数单步执行。
    6. 执行出去:该按钮是在进入了函数单步调试的时候,有时候可能不必再执行该函数的剩余部分了,通过该按钮就可以一步执行完该函数的剩余部分,并跳出函数,回到函数被调用的地方。
    7. 执行到光标处:该按钮可以迅速的使程序运行到光标处,其实是挺像执行到断点处按钮功能,但是两者是有区别的。断点可以有多个,但是光标所在处只有一个。
    8. 反汇编窗口:通过该按钮,就可以查看汇编代码,可以用来分析程序。
    9. Call Stack窗口:通过该按钮,显示调用关系和局部变量窗口,显示当前函数的调用关系和局部变量,方便查看,对分析程序非常有用。
    10. 观察窗口:MDK5提供了2个观察窗口,该按钮按下,会弹出一个显示变量的窗口,输入你所想要观察的变量/表达式,即可查看其值,是很常用的一个调试窗口。
    11. 内存查看窗口:MDK5提供4个内存查看窗口,该按钮按下,会弹出一个内存查看窗口,可以再里面输入你要查看的内存地址,然后观察这一片内存的变化情况。是很好用的调试窗口。
    12. 串口打印窗口:MDK5提供4个串口打印窗口,该按钮按下,会弹出一个类似串口调试助手界面的窗口,用来显示从串口打印出来的内容。
    13. 系统分析窗口:图标下面有6个选项,我们一般用第一个,也就是逻辑分析窗口(Logic Analyzer),点击即可调出该窗口,通过SETUP按钮新建一些IO口,就可以观察这些IO口的电平变化情况,以多种形式显示出来,比较直观。
    14. 系统查看窗口:该按钮可以提供各种外设寄存器的查看窗口,选择对应外设,即可调出该外设的相关寄存器表,并显示这些寄存器的值,方便查看设置的是否正确。
    • Call Stack窗口:查看函数调用关系或局部变量

      在这里插入图片描述

    • Watch窗口:查看函数首地址或变量值

      在这里插入图片描述

    • Memory窗口:内存查看窗口

      在这里插入图片描述

      M3/M4/M7内核是小端模式,内存的值得倒着读

      • Peripheral窗口:查看寄存器的值

        在这里插入图片描述

    • 注意事项

      1. 仿真时,使用MDK的Level 0等级优化

        在这里插入图片描述

      2. 调试停止在断点处时,只是内核停止,外设会继续运行

      3. 断点的设置要有时间观念,考虑是否会打断正常通信

七、MDK5使用技巧

  • 编辑器设置

    在这里插入图片描述

  • 字体和颜色设置

    在这里插入图片描述

  • 用户关键字设置

    在这里插入图片描述

  • 代码提示/语法检查

    在这里插入图片描述

  • 快速定位函数或变量被定义的地方

    在这里插入图片描述

声明:参考文献来源: 战舰STM32F103ZET6开发板资源包

  1. Cortex-M3权威指南(中文).pdf
  2. STM32F10xxx参考手册_V10(中文版).pdf
  3. STM32F103 战舰开发指南V1.3.pdf
  4. STM32F103ZET6(中文版).pdf
  5. 战舰V4 硬件参考手册_V1.0.pdf

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Keepalived+Nginx实现高可用(上)

一、背景与简介 为了服务的高可用性&#xff0c;避免单点故障问题&#xff0c;通常我们使用"冗余设计思想"进行架构设计。冗余设计思想&#xff0c;本质就是将同一个应用或者服务放置在多台不同的服务器上[鸡蛋不放在同一个篮子里]&#xff0c;这样减少整体服务宕机的…

2023 年山东省职业院校技能大赛(高等职业教育) “信息安全管理与评估”样题

2023 年山东省职业院校技能大赛&#xff08;高等职业教育&#xff09; “信息安全管理与评估”样题 目录 任务 1 网络平台搭建&#xff08;50 分&#xff09; 任务 2 网络安全设备配置与防护&#xff08;250 分&#xff09; 模块二 网络安全事件响应、数字取证调查、应用程序安…

深入探索 Spring Boot:简化开发,加速部署的全方位利器

目录 导言 1. 自动配置&#xff08;Auto-Configuration&#xff09; 2. 起步依赖&#xff08;Starter Dependencies&#xff09; 3. 嵌入式 Web 服务器 4. Actuator 5. 外部化配置 6. 简化的安全性配置 7. Spring Boot CLI 8. Spring Boot DevTools 导言 在当今软件开…

散点图直方图折线图的替代

散点图直方图折线图的替代 seaborn官网 数据科学数据可视化&#xff0c;散点图 直方图 折线图的新方法 1.hexbinplot https://seaborn.pydata.org/examples/hexbin marginals.html相当于散点图做了聚合/分箱&#xff0c;使数据的分布展示更明显。Library: seaborn 2.瀑布图展示…

Pytorch-LSTM轴承故障一维信号分类(一)

目录 前言 1 数据集制作与加载 1.1 导入数据 第一步&#xff0c;导入十分类数据 第二步&#xff0c;读取MAT文件驱动端数据 第三步&#xff0c;制作数据集 第四步&#xff0c;制作训练集和标签 1.2 数据加载&#xff0c;训练数据、测试数据分组&#xff0c;数据分batch…

Qt Widgets 绘图行为逐步分析拆解

Qt 是目前C语言首选的框架库。之所以称为框架库而不单单是GUI库&#xff0c;是因为Qt提供了远远超过GUI的功能封装&#xff0c;即使不使用GUI的后台服务&#xff0c;也可以用Qt大大提高跨平台的能力。 仅就界面来说&#xff0c;Qt 保持各个平台绘图等效果的统一&#xff0c;并…

【EMNLP 2023】面向垂直领域的知识预训练语言模型

近日&#xff0c;阿里云人工智能平台PAI与华东师范大学数据科学与工程学院合作在自然语言处理顶级会议EMNLP2023上发表基于双曲空间和对比学习的垂直领域预训练语言模型。通过比较垂直领域和开放领域知识图谱数据结构的不同特性&#xff0c;发现在垂直领域的图谱结构具有全局稀…

Flink之迟到的数据

迟到数据的处理 推迟水位线推进: WatermarkStrategy.<Event>forBoundedOutOfOrderness(Duration.ofSeconds(2))设置窗口延迟关闭&#xff1a;.allowedLateness(Time.seconds(3))使用侧流接收迟到的数据: .sideOutputLateData(lateData) public class Flink12_LateDataC…

【华为数据之道学习笔记】3-9元数据治理面临的挑战

华为在进行元数据治理以前&#xff0c;遇到的元数据问题主要表现为数据找不到、读不懂、不可信&#xff0c;数据分析师们往往会陷入数据沼泽中&#xff0c;例如以下常见的场景。 某子公司需要从发货数据里对设备保修和维保进行区分&#xff0c;用来不对过保设备进行服务场景分析…

uniapp - 简单版本自定义tab栏切换

tab切换是APP开发最常见的功能之一&#xff0c;uniapp中提供了多种形式的tab组件供我们使用。对于简单的页面而言&#xff0c;使用tabbar组件非常方便快捷&#xff0c;可以快速实现底部导航栏的效果。对于比较复杂的页面&#xff0c;我们可以使用tab组件自由定义样式和内容 目录…

Spring 的缓存机制【记录】

一、背景 在最近的业务需求开发过程中遇到了“传说中”的循环依赖问题&#xff0c;在之前学习Spring的时候经常会看到Spring是如何解决循环依赖问题的&#xff0c;所谓循环依赖即形成了一个环状的依赖关系&#xff0c;这个环中的某一个点产生不稳定变化都会导致整个链路产生不…

WPF仿网易云搭建笔记(5):信息流控制之IOC容器

文章目录 专栏和Gitee仓库前言IOC容器Prism IOC使用声明两个测试的服务类MainWindow IOC 注入[单例]MainWindow里面获取UserController无法使用官方解决方案 使用自定义IOC容器&#xff0c;完美解决既然Prism不好用&#xff0c;直接上微软的IOC解决方案App.xaml.csViewModel里面…

axios 基础的 一次封装 二次封装

一、平常axios的请求发送方式 修改起来麻烦的一批 代码一大串 二、axios的一次封装 我们会在src/utils创建一个request.js的文件来存放我们的基地址与拦截器 /* 封装axios用于发送请求 */ import axios from axios/* (1)request 相当于 Axios 的实例对象 (2)为什么要有reque…

python自动化测试实战 —— WebDriver API的使用

软件测试专栏 感兴趣可看&#xff1a;软件测试专栏 自动化测试学习部分源码 python自动化测试相关知识&#xff1a; 【如何学习Python自动化测试】—— 自动化测试环境搭建 【如何学习python自动化测试】—— 浏览器驱动的安装 以及 如何更…

Web安全-SQL注入【sqli靶场第11-14关】(三)

★★实战前置声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将其信息做其他用途&#xff0c;由用户承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 0、总体思路 先确认是否可以SQL注入&#xff0…

深拷贝、浅拷贝 react的“不可变值”

知识获取源–晨哥&#xff08;现实中的人 嘿嘿&#xff09; react中如果你想让一个值始终不变 或者说其他操作不影响该值 它只是作用初始化的时候 使用了浅拷贝–改变了初始值 会改变初始值(selectList1) 都指向同一个地址 const selectList1 { title: 大大, value: 1 };con…

ES-分析器

分析器 两种常用的英语分析器 1 测试工具 #可以通过这个来测试分析器 实际生产环境中我们肯定是配置在索引中来工作 GET _analyze {"text": "My Moms Son is an excellent teacher","analyzer": "english" }2 实际效果 比如我们有下…

前端框架(Front-end Framework)和库(Library)的区别

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

基于OpenCV+CNN+IOT+微信小程序智能果实采摘指导系统——深度学习算法应用(含python、JS工程源码)+数据集+模型(三)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow 环境Jupyter Notebook环境Pycharm 环境微信开发者工具OneNET云平台 模块实现1. 数据预处理1&#xff09;爬取功能2&#xff09;下载功能 2. 创建模型并编译1&#xff09;定义模型结构2&#xff09;优化…

appium安卓app自动化,遇到搜索框无搜索按钮元素时无法搜索的解决方案

如XX头条&#xff0c;搜索框后面有“搜索”按钮&#xff0c;这样实现搜索操作较为方便。 但有些app没有设置该搜索按钮&#xff0c;初学者就要花点时间去学习怎么实现该功能了&#xff0c;如下图。 这时候如果定位搜索框&#xff0c;再点击操作&#xff0c;再输入文本后&#x…