初学者入门:认识STM32单片机

这篇具有很好参考价值的文章主要介绍了初学者入门:认识STM32单片机。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本教程含有较多专业词汇,大部分时候,不完全理解并不影响继续往下阅读,大家只需要了解大致的概念即可。当然,也鼓励大家多查百度和多问chatgpt,让自己学会的更多。

什么是单片机?

单片机,就是把中央处理器CPU、存储器、等计算机的功能部件,和定时器、I/0(输入输出接口)、串口等外设集成在一块集成电路芯片上的微型计算机。

单片机的特点:

1.体积小,集成度高,电源功耗低

2.控制功能强,易拓展外设

3.价格便宜,性价比高

STM32是意法半导体(ST)推出一款32位的单片机。STM32具有超低的价格、超多的外设、丰富的型号、优异的实时性、极低的开发成本等优势。

既然大家已经了解单片机了(bushi) ,那我们就一起走进STM32的世界吧!

如下图,是STM32的系统结构原理图,是不是一脸懵,那就别看下面这个先

初学者入门:认识STM32单片机

让我们简化并翻译一下:

初学者入门:认识STM32单片机

各部分功能如下:

  1. CPU:包含运算器,控制器及若干寄存器,是单片机的控制和指挥中心。

  2. ROM(STM32中称为FLASH):用于存放程序和数据,为只读储存器。更改(擦除)和写入程序都较为麻烦,需要遵守FLASH相关的协议。可以认为是计算机的硬盘。

  3. RAM(STM32中称为SRAM):用于存放运算的中间结果、数据暂存及数据缓冲等。可以随机读入或读出,读写速度快,读写方便;但是断电或复位会丢失数据。可以认为是计算机的内存。

  4. 总线矩阵:总线矩阵用于主控总线之间的访问仲裁管理,提高了各部件交流的效率。

  5. 寄存器:虽然图里面没有寄存器,但是后续会经常提到它。寄存器可以看成储存0和1的一个指定名字和功能的地址。如果我们要在某个引脚输出一个低电平,我们只要往相的引脚对应的寄存器写一个1,即可实现.

  6. GPIO:通用型输入输出(接口),意思是你可以随意使用它输出或输入0和1,甚至以115200次每秒的速度翻转或接收0和1。

  7. 注意:上面的所有东西,都集成在了单片机的芯片上,因此说单片机集成度高,是真的很高。

虽然大家大致了解了STM32单片机的结构,但肯定还不清楚自己将要如何操控这个精妙装置。接下来,让我们一起了解一个程序如何实现整个运算过程。

一. 假设一个客户需求

1. x=3   y=x+5 

2. 先计算出y的值,若y大于0则点亮位于GPIO_ PA0(也就是单片机上的A0接口)处的LED

看起来很简单,但这是了解单片机运行原理的一个非常重要的案例:

二. 配置初始化文件

什么?你说你想直接把代码写了跑起来?

单片机还在睡觉呢,或者他脑袋里还想着上一个程序。

你输入单片机的每一个程序,都必须要用很多很多的篇幅告诉它,脑干怎么指挥全身(各种CPU指令)、心脏该怎么跳动(配置时钟树)、血液该怎么流动(定义各种宏以方便数据传输),因为每次输入新程序进去都完全擦除ROM再重写,所以每个程序都必须包含初始化的内容。不然,它当场给你表演一个原地睡觉(卡死)。

配置初始化文件的方法有两种:

1. 基于STM32库函数的开发

STM32库函数的开发,可以避免大家对着数据手册查并操作各种寄存器,而是直接用库的函数来实现各种参数的初始化和功能。

如果你想点亮一个led。你需要准备好一个包含整个单片机初始化的内容的源代码,如下图所示(不用细看,我也也不熟)。

初学者入门:认识STM32单片机

然后再复制粘贴一个GPIO_init(初始化GPIO接口)的函数进去,然后再改成相应的序号。当然,如果你想启动串口、定时器、ADC等其他功能,也需要把相应的初始化代码块一个个塞进去,如下图所示(不用细看,不是重点)。

初学者入门:认识STM32单片机

(上图:GPIO,PB5和PE5的初始化代码块)

然后再在主函数中输入相应的代码(见下一节),我们的程序才能完成。

使用标准库开发有助于大家更了解底层的代码和寄存器的使用,可以保证基础更加的扎实。但是对新手来说不够友好。

2. 基于STM32Cubemx(下面那个蓝蓝的软件,你们的好帮手)的HAL库开发

如果按照上面的方法,那当我们遇到下面问题的时候,可能就有些棘手:

我们手上有STM32f103c8t6单片机的启动文件,但是此次项目要求我们用STM32f427IIH单片机,且要求你打开CAN1、CAN2、USART1、USART2、TIM23456、和十路的PWM,并按照需求配置参数。那我们可要忙的屁股着火螺旋起飞啰,而且不好检查参数是否正确。

因此,我们需要有更加高效、准确的方法:使用STM32Cubemx配置文件

打开STM32Cubemx,并经过操作,可以看到如下界面:

你可以直接生成相应芯片(此时为F427iih)的初始化和配置文件,非常的舒服。

接下来,直接用图形化界面即可设置好各种参数(可以跟着详细的文档做,一套做下来就能用了)

初学者入门:认识STM32单片机

(上图:左边为希望使用的功能,中间为功能的参数配置,右边为图形化的功能展示)

当然,我也是从萌新走过来的,第一次看到上图也很害怕,感觉自己根本驾驭不了这个恐怖的机器

下图是做出遥控小车的STM32f103c8t6和引脚图(仅供参考)。是不是感觉不算特别复杂?

初学者入门:认识STM32单片机

什么?看起来还复杂。那我们只能通过我们自己的努力,慢慢熟悉这个软件。我也尽我的力把教程写的有趣一点,让大家愿意跟着一步一步走,收获更多的知识。

跑题了,当我们按下这个按钮

初学者入门:认识STM32单片机

 我们就直接得到了一份结构规范的启动和初始化代码。(如下)

初学者入门:认识STM32单片机

点几下鼠标,我们给单片机写的脑干、血液、心脏的程序就全部完成啦!

因此可以看出,STM32CubeMx是一个很便捷的图形化配置软件,可以快速配置、维护、修改工程。后续所有教程都将基于STM32Cubemx的开发。

三. 写代码

直接上干货

需求如下:

x=3   y=x+5

计算出y的值,若大于0则点亮位于GPIO_ PA0(也就是单片机上的A0接口)处的LED

代码是这个(基于HAL库编程)要写在主函数的无限循环中(为什么是无限循环呢,我们可以假设一个智能家居设备,即使你没按下按钮,他也会一直运行着,一直判断你是否按下按钮,或者监测一些其他的数据)

uint8_t x=3;      
uint8_t y=0;

while(1)
{
y=x+5;
if(y>0)
  GPIO_Writepin(GPIOA,GPIO_PIN_0,0);
}

代码很好读懂,定义x,y两个unsigned int类型的变量(HAL库有对数据类型单独进行宏定义,感兴趣的可以右击uint8_t并进入definition

 然后做加法,然后判断,若y>0,输出低电平,电流从LED的正极流进PA0,LED点亮。

四. 编译代码

STM32是机器,他只听得懂机器语言(汇编语言),因此我们需要把我们上面写的给人看的代码变成汇编语言,大概是下面的效果(别细看 不考)

初学者入门:认识STM32单片机

因此我们写完代码,要点一下编译按钮。

初学者入门:认识STM32单片机

此时的内容不只是程序,而更应该称为 指令。

五. 烧录代码

我们用专门的烧录器将代码直接烧写至单片机的FLASH内,即完成了代码的烧录。注:一般烧录后需要按一下复位的按钮单片机才会开始运行。

Keil这个软件等于说自带烧录的环境,只需要按照教程选好型号即可将编译好的代码烧录进单片机。

六. 代码如何变成现实(略微介绍一下微机原理,感兴趣可以看)

汇编语言的代码烧写至FLASH内。

复位单片机!

单片机开始运行!

PC(程序计数器)从零开始累加,执行以下循环

  1. 它数到n,FLASH里的n号指令被取出,拿去CPU执行。

  2. 指令会涉及到一个地址,某个数字住在内存的一个房间里,房间的号码叫做地址。这一步只会将地址送去地址寄存器,并解出住在那的数字。

  3. 那个数字被拿去CPU,进行计算,计算结果将以变量放在某处

这三步,每步的时间,在STM32f103c8t6单片机中,大约为一至两个机器周期,也就是10——40纳秒。

在第n=114514时,CPU收到指令,将一个1塞进一个叫GPIOA->BRR寄存器的某一位中

随着一个1塞进了那个位置,寄存器的电路所连接的一个三极管轰然导通,电流如泉涌一般沿着三极管导向了GND(可以理解为负极),如此,那个名为PA0的引脚变为了低电平,LED也随之点亮。

初学者入门:认识STM32单片机

七. 总结

这就是我们如何点亮一个led的全过程,写的挺粗糙的。希望这篇教程能起到抛砖引玉的效果,让大家能通过此教程了解到单片机工作的原理,并有兴趣更进一步的深入学习,在之后的学习中事半功倍。

其他的教程,由于CSDN插入图片较为麻烦,因此我直接将生成的PDF文档放入免费的资源中,可以进入我的主页查找。

如下,包含IO、PWM控制舵机、电路搭建、电机控制的教程,代码和演示视频,都置于其中。

(80条消息) 基于STM32的机械臂遥控麦轮小车-之超级适合新手的教程-嵌入式文档类资源-CSDN文库

祝大家学业有成。文章来源地址https://www.toymoban.com/news/detail-469214.html

到了这里,关于初学者入门:认识STM32单片机的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 初学者思路-实现独立按键检测(以STM32为例)

            本文以初学者角度切入,详细剖析按键检测原理,实现按键短按、短按抬起、首次长按、持续长按次数、长按抬起功能; 目录 前言 波形图分析 抖动原因 为什么要消抖 如何消抖 原理图分析 程序设计思路 代码实践 按键配置 按键检测 实验结果 留下反思         如

    2024年01月16日
    浏览(49)
  • STM32初学者,到底选标准库还是HAL库?

    当初学者尝试学习STM32开发时,通常会面临一个关键的选择:是选择STM32的标准库,还是HAL库?这两个库各自有着优势与适用场景,本文将从多个角度分析,帮助初学者更好地选择适合自己的库。 在开始之前,让我们先搞清楚这两个库的基本概念。标准库是一组用于STM32系列微

    2024年02月08日
    浏览(39)
  • 不怕没项目做!github上的STM32 优秀开源项目和初学者项目

    TinyGo - Go语言编译器,适用于微控制器、WebAssembly、命令行工具,基于LLVM。 语言:Go 星标数:14,267+ 描述:TinyGo带来了Go语言在嵌入式系统的实现,使得STM32等微控制器编程更加多样化。 Flipper Zero Firmware - Flipper Zero的固件源码。 语言:C 星标数:10,699+ 描述:为Flipper Zero多功能

    2024年03月20日
    浏览(94)
  • 了解 ESP32 FreeRTOS:初学者指南

    ESP32 FreeRTOS是针对ESP32微控制器的一个实时操作系统(RTOS),它采用了FreeRTOS内核,可以帮助开发人员在ESP32芯片上进行多任务处理。简单来说,FreeRTOS提供了一种方式来管理软件任务并协调它们的执行。 ESP32是一个功能强大的嵌入式系统,可以用于构建各种物联网应用程序。

    2023年04月14日
    浏览(51)
  • Python爬虫入门(一)(适合初学者)

    关于爬虫是什么,怎样保证爬虫的合法性小编在这就不再过多的阐述,从本章起,小编将和大家一起分享在学习python爬虫中的所学,希望可以和大家一起进步,也希望各位可以关注一下我! 首先我们来初步了解下如何使用开发者工具进行抓包。以 https://fanyi.baidu.com/ 为例。在

    2024年01月24日
    浏览(57)
  • MATLAB初学者入门(8)—— 动态规划

            动态规划是一种数学方法,用于解决具有递归结构的决策问题,特别是那些涉及顺序决策的问题。在MATLAB中实现动态规划,可以通过定义状态变量、决策变量、状态转移方程以及目标函数来完成。以下是具体的案例分析。 案例分析:项目资源分配优化        

    2024年04月28日
    浏览(34)
  • MATLAB初学者入门(24)—— 聚类算法

            聚类是一种广泛使用的无监督学习技术,用于将数据集中的对象分组,使得同一组内的对象比其他组的对象更为相似。MATLAB提供了多种工具和函数来实现和分析不同类型的聚类算法。 案例分析:使用K-均值聚类对数据进行分组         假设我们有一组二维数据

    2024年04月29日
    浏览(53)
  • K8s 初学者入门教程

    Kubernetes 简称为 K8s 最近想要通过 K8s 部署一些前端应用。但苦于之前没有接触过集群相关的概念,操作时,对 Deployment、Pod、Service 和 Ingress 等概念不是很理解,导致对部署的流程不太清晰(例如,在创建 Deployment 时,不清楚要填哪些选项,那些选项有什么作用和区别, Pod,

    2024年02月07日
    浏览(49)
  • 电脑入门: 路由器初学者完全教程

     路由器初学者完全教程                                    本文以Cisco2620为例,讲述了路由器的初始化配置以及远程接入的配置方法,探讨了如何使用内部网络的DHCP服务功能为远程拨入的用户分配地址信息以及路由器常见故障的排除技巧。                         

    2024年02月09日
    浏览(46)
  • C++ 测试框架 GoogleTest 初学者入门篇 丙

    *以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/RIztusI3uKRnoHVf0sloeg 开发者虽然主要负责工程里的开发任务,但是每个开发完毕的功能都是需要开发者自测通过的,所以经常会听到开发者提起单元测试的话题。那么今天我就

    2023年04月15日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包