【哈哈大一上学的全忘了,重开!!】STM32从零入门物联网开发

news2024/12/24 8:31:39

本笔记资料来源 :STM32物联网入门30步=单片机物联网入门教程 WIFI连接阿里云物联网+CubeMX+HAL库+蓝牙ESP8266+杜洋主讲_哔哩哔哩_bilibili

IOT:Internet of things

学习目标:

1.掌握洋桃IoT开发板的各功能以及驱动与基本应用

2.掌握wifi模块,蓝牙模块的通信原理和基本应用

3.能够跟随教程中的实践实例,完成物联网小项目开发

peripheral

STM32微控制器系列提供了丰富的外设(Peripheral),这些外设是微控制器中用于与外部世界进行通信和交互的硬件模块。以下是一些常见的STM32外设:
1. 通用同步/异步收发器(USART):用于串行通信,支持异步和同步操作,常用于与外部设备进行数据交换。
2. 串行外设接口(SPI):一种高速的、全双工、同步的通信协议,常用于与闪存、显示器、传感器等外设通信。
3. Inter-Integrated Circuit(I2C):一种慢速的、半双工、同步的通信协议,用于连接低速外设,如EEPROM、RTC、传感器等。
4. 定时器(Timers):包括基本定时器、通用定时器和高精度定时器(HRTIM),用于生成精确的时间延迟、脉冲宽度调制(PWM)信号、编码器接口等。
5. 并行接口(GPIO):通用输入输出端口,用于控制LED、读取按钮状态、与外部设备进行数字通信等。
6. 模数转换器(ADC):用于将模拟信号转换为数字信号,常用于读取传感器数据、电池电压监测等。
7. 数模转换器(DAC):用于将数字信号转换为模拟信号,例如生成模拟音频输出。
8. 实时时钟(RTC):用于提供日期和时间信息,即使在系统复位或电源关闭的情况下也能保持时间信息。
9. 看门狗定时器(Watchdog Timer):用于监控系统的正常运行,并在检测到故障时自动复位系统。
10. 直接内存访问(DMA):用于在不涉及CPU的情况下进行内存之间的数据传输,提高数据处理的效率。
11. 通用串行总线(USB):用于实现与USB主机或设备的通信。
12. 以太网(Ethernet):用于实现网络通信功能。
13. CAN(Controller Area Network):用于实现车辆网络通信。
14. SDIO(Secure Digital Input/Output):用于与SD卡等存储设备通信。
15.MIPI(Mobile Industry Processor Interface):用于连接摄像头和显示屏等。
这些外设的配置和使用通常需要通过STM32的库函数或直接操作寄存器来完成。每个STM32系列和型号的外设列表可能有所不同,因此在使用特定型号的STM32时,应参考该型号的数据手册和参考手册以获取详细的外设信息。
 

RCC时钟与延迟函数

RCC时钟树

STM32的时钟树是一个复杂的系统,它为微控制器的不同部分提供时钟信号。以下是STM32时钟树的详细讲解:


1. 内核与外设时钟:
   - SYSCLK(系统时钟):这是STM32的主时钟,用于为内核、内存和外设提供时钟信号。它可以通过不同的时钟源进行配置,如HSE(外部高速时钟)、HSI(内部高速时钟)或_PLL(锁相环)。
   - HCLK(AHB时钟):这是高级高性能总线(AHB)的时钟,用于连接内核和高速外设。HCLK的频率通常为SYSCLK的一半或与其相同。
   - FCLK(APB时钟):这是高级外设总线(APB)的时钟,用于连接低速外设。FCLK的频率通常为HCLK的一半或与其相同。
   - ADC功能时钟:这是为模数转换器(ADC)提供时钟信号的时钟。它的频率通常较低,以降低功耗和噪声。
2. 独立时钟:
   - PTC时钟:这是为实时时钟(RTC)提供时钟信号的时钟。它通常由低功耗的32.768kHz振荡器提供。
   - 独立看门狗时钟:这是为独立看门狗定时器提供时钟信号的时钟。它通常由低功耗的32.768kHz振荡器提供。
   - Flash编程时钟:这是为Flash编程操作提供时钟信号的时钟。它的频率通常较低,以确保Flash操作的可靠性。
   - USB接口时钟:这是为USB接口提供时钟信号的时钟。它通常由_PLL时钟提供,并且需要精确的时钟频率以满足USB规范的要求。
   - MCO时钟输出:这是微控制器的时钟输出,可以将时钟信号输出到外部设备。它可以通过编程选择不同的时钟源进行输出。
3. 时钟输出:
   - 时钟输出功能允许将STM32内部的时钟信号输出到外部设备。这可以通过MCO(微控制器时钟输出)引脚实现。MCO引脚可以输出不同的时钟信号,如HSI、HSE、PLL时钟等。这为外部芯片或者单片机与单片机间提供了一种简单的方式来获取与STM32同步的时钟信号。


STM32的时钟树还包括其他时钟信号,如为I2S接口、SPI接口、UART接口等提供时钟的时钟信号。这些时钟信号可以通过时钟控制寄存器进行配置和调整,以满足不同应用的需求。
 

时钟树从左到右三个部分:时钟源,选择器&倍频器&分频器(调节频率),最终设定的频率(单片机的数据总线和各功能的频率最后会显示在这里)

RCC程序代码

我们在图形界面里设置了时钟树选项,之后会转化成程序代码,存放在工程文件中。

启动文件中的代码:以下了解即可

cubemx中生成的代码:教你修改代码

因为单片机的运行速度太快:微秒级别——我们需要:hal中的延迟函数

最小1ms最大49.7天

串口通信与超级终端

串口通信对物联网开发特别重要,在开发过程中我们需要实时了解单片机的状态信息,需要有一个信息输入输出功能用于调试,最简单的输入输出功能是led和按键,但所能表示的信息太少。串口通讯就是很理想的调试工具。

蓝牙和WiFi的很多模块自带串口功能能够和单片机或者电脑通信:开发蓝牙和WiFi模块就是使用串口的过程。

RTC和BKP(备用寄存器)驱动程序

rtc的两种应用:

闹钟:cube做的很好

时钟,年月日:cube完全没搞

  1. BKP(Backup):BKP通常指的是备份寄存器(Backup Register)。这些寄存器位于备份域中,当微控制器进入低功耗模式或复位时,备份寄存器的内容会被保留。这意味着即使系统电源被完全切断,备份寄存器中的数据也不会丢失。BKP寄存器通常用于存储关键数据,如系统配置、重要参数等,以确保在电源恢复后能够快速恢复系统状态。

  2. RTC(Real-Time Clock):RTC是指实时时钟模块。RTC是一个独立的定时器,可以在微控制器的主电源关闭时继续运行,通常由备用电池供电。RTC用于提供日期和时间信息,即使系统复位或电源关闭,也能保持时间的连续性。RTC模块通常包括时钟日历功能、闹钟功能和有时还包括计时器功能,用于各种需要准确时间记录的应用,如时间戳、定时唤醒等

USB从设备串口驱动程序

我们想和电脑一起玩呢~比如鼠标键盘啥的是不是都用的usb接口插进电脑。Soga,当我们想把单片机也看作鼠标,键盘之类的链接电脑时……usb,虚拟串口它们来啦。

USB to TTL转换器是一种硬件设备,它允许用户将USB接口转换为TTL电平的串行通信接口。这种转换器通常用于编程和调试微控制器、嵌入式系统、无线模块、传感器以及其他需要串行通信的电子设备。
USB to TTL转换器的主要功能包括:
1. 电平转换:USB接口使用的是USB标准电平(通常是3.3V或5V),而TTL电平通常是5V。转换器在USB和TTL设备之间进行电平转换,确保两者能够正常通信。
2. 数据传输:转换器允许通过USB接口发送和接收串行数据,这对于编程、调试和监测串行通信设备非常有用。
3. 串行通信:转换器通常支持常见的串行通信协议,如RS-232、RS-485、RS-422等,以及常见的串行通信速度,如9600、19200、115200波特等。
4. 插即用:USB to TTL转换器通常不需要安装额外的驱动程序,可以即插即用,方便用户快速连接和开始通信。
5. 跨平台兼容性:由于USB接口的普遍性,USB to TTL转换器可以在多种操作系统上使用,包括Windows、macOS、Linux等。
USB to TTL转换器通常包含以下部分:
- USB接口:用于连接到计算机或其他USB主机设备。
- TTL串行接口:包括TX(发送)、RX(接收)、GND(地)等引脚,用于连接到目标设备的串行端口。
- 电平转换电路:将USB电平转换为TTL电平,并确保信号的兼容性。
- 配置跳线或开关:用于选择串行通信的参数,如波特率、数据位、停止位、校验位等。
USB to TTL转换器在电子爱好者和工程师中非常流行,因为它们提供了一种简单、低成本的方式来与串行设备进行通信和编程。

stm103内部usb和电脑连接,电脑为主设备,stm32 为slave

第15集)USB从设备串口驱动程序!_哔哩哔哩_bilibili

以上的设置只是正对usb接口硬件层面上的操作。如果想让usb接口虚拟出串口功能还需要usb驱动程序的加持,这里的驱动程序可由cub自动生成

在STM32微控制器中,DFU、虚拟串口和HID是三种不同的USB功能,它们分别代表:


1. DFU(Device Firmware Upgrade):DFU是一种USB协议,允许通过USB接口对设备的固件进行更新。在STM32中,DFU模式允许用户通过USB连接将新的固件刷写到微控制器的闪存中。这是一种非常方便的固件升级方式,因为它不需要额外的编程器或调试器。
2. 虚拟串口(Virtual COM Port):虚拟串口是STM32通过USB模拟出的一个串行通信端口。当STM32以虚拟串口模式连接到计算机时,计算机将其识别为一个串行端口(例如COM端口),可以通过串行通信软件进行数据传输。这种模式常用于调试、数据日志记录或与其他串行设备通信。
3. HID(Human Interface Device):HID是USB规范中定义的一种设备类别,用于人机交互设备,如键盘、鼠标、游戏控制器等。在STM32中,HID模式允许微控制器通过USB接口作为人机交互设备与计算机通信。这使得STM32可以轻松地实现自定义的用户输入设备或游戏控制器。
STM32微控制器支持多种USB类,包括DFU、虚拟串口和HID,这些类可以在STM32的USB库中找到相应的实现。开发者可以根据具体的应用需求选择合适的USB类,并通过STM32的USB外设来实现相应的功能。

省电模式,CRC与芯片ID

STM32微控制器提供了多种省电模式,以及一些用于确保数据完整性和安全性的功能,如CRC(循环冗余校验)和芯片ID。以下是这些功能的详细说明:
省电模式:
STM32微控制器具有多种低功耗模式,旨在减少功耗并延长电池寿命。这些模式包括:
1. 睡眠模式(Sleep Mode):在睡眠模式下,CPU停止运行,但所有的外设仍然处于工作状态,并可以通过中断唤醒CPU。
2. 停止模式(Stop Mode):在停止模式下,所有的时钟都被关闭,CPU和外设停止运行,但内部的RAM和寄存器的内容得以保持。可以通过任意外设的中断或唤醒线(WKUP)来唤醒微控制器。
3. 待机模式(Standby Mode):待机模式是功耗最低的模式,除了备用域(RTC、备份寄存器和备份SRAM)之外,所有的电源都被切断。微控制器可以通过复位信号或特定的唤醒事件(如RTC闹钟事件)唤醒。
4. 低功耗运行模式(Low Power Run Mode):在这种模式下,CPU以降低的频率运行,从而降低功耗,同时保持微控制器的运行状态。
CRC(循环冗余校验):
CRC是一种数据校验技术,用于检测数据在传输或存储过程中是否发生错误。STM32微控制器内置了CRC计算单元,可以用于计算一组数据的CRC值,并与预先定义的值进行比较,以确保数据的完整性。
芯片ID:
STM32微控制器有一个唯一的芯片ID,通常是一个96位或128位的数字,用于标识每个芯片的唯一性。这个ID可以用于安全目的,如设备认证、加密密钥生成等。芯片ID通常无法被修改,确保了其作为唯一标识符的可靠性。
这些功能使得STM32微控制器非常适合于需要低功耗和高数据安全性的应用,如嵌入式系统、物联网设备、便携式医疗设备等。


蓝牙模块驱动程序

虽然呢在无线通信领域WiFi具有更高的性能和更强大的扩展性,但是蓝牙技术以其低成本低功耗依然在移动设备的近场无线通信中占据一席之地。

1.往底层去可以讲蓝牙protocol

2.展开应用层技术可以讲解蓝牙与手机的高级连接,比如用app控制设备,在微信小程序上显示设备参数,在两台设备之间传送图片和音乐

可以把蓝牙模块当作单片机来连接温湿度传感器,继电器等外围电路

AT

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

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

相关文章

Python容器 之 字符串--字符串的常用操作方法

1.字符串查找方法 find() 说明:被查找字符是否存在于当前字符串中。 格式:字符串.find(被查找字符) 结果:如果存在则返回第一次出现 被查找字符位置的下标 如果不存在则返回 -1 需求: 1. 现有字符串数据: 我是中国人 2. 请设计程序…

vue根据文字长短展示跑马灯效果

介绍 为大家介绍一个我编写的vue组件 auto-marquee ,他可以根据要展示文本是否超出展示区域,来判断是否使用跑马灯效果,效果图如下所示 假设要展示区域的宽度为500px,当要展示文本的长度小于500px时,只会展示文本&…

mysql5.7.30忘记root密码

windows系统安装了mysql5.7.30,在使用navicat链接mysql时候,提示 如何解决: 打开任务管理器的服务,查看有没有MYSQL服务。 如果没有,则按照下面的csdn博客进行操作。 https://blog.csdn.net/clj198606061111/article…

PostgreSQL的学习心得和知识总结(一百四十七)|深入理解PostgreSQL数据库之transaction chain的使用和实现

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库…

Firewalld 概述

1.firewalld简介 firewalld的作用是为包过滤机制提供匹配规则(或称为策略),通过各种不同的规则,告诉 netfiter对来自指定源、前往指定目的或具有某些协议特征的数据包采取何种处理方式。 为了更加方便地组织和管理防火墙,firewalld 提供了支持网络区域…

【笔记】手工部署之linux中开放已安装的mysql与tomcat端口

在需要打包的springboot项目中输入mvn clean package 在target下面获得jar包 进入linux中你想要该jar包存在的位置 将jar包上传至linux中 此时在浏览器中输入linux的ip地址:端口号/mapping路径为404 故: 在linux中另开一个标签页 检查mysql和tomcat已…

JMH319【亲测整理】2017剑侠情缘2剑网2汉化版+网游VM单机版+修复纹饰翅膀+内置GM命令无限道具+一键端视频安装教学

资源介绍: 这一套新端早就在手上 一直没分享出来 既然大家放出来了 我也就发出来大家研究吧 目前在改另外一套 是否需要虚拟机:是 文件大小:压缩包约7G 支持系统:win7、win10、win11 硬件需求:运行内存12G …

遇到多语言跨境电商系统源码问题?这里有解决方案!

从手机到电脑,从线下到线上,如今,跨境电商正在打破地域界限,成为全球贸易的新引擎。在这个全球化的背景下,跨境电商平台的运营也面临着一系列的挑战,其中之一就是多语言问题。如果你遇到了多语言跨境电商系…

c进阶篇(三):字符串函数

1.strlen: strlen - C Reference strlen 函数是一个标准库函数&#xff0c;用于计算以 null 结尾的字符串的长度&#xff0c;也就是字符串中实际字符的数量&#xff0c;不包括最后的 null 终止符 \0。它定义在 <string.h> 头文件中。 函数原型:size_t strlen(const ch…

PyCharm 著名编程利器下载安装:Python开发者的必备神器!

PyCharm&#xff0c;它不仅拥有卓越的性能&#xff0c;更以其丰富多样的功能和工具&#xff0c;让开发者在 Python 项目的开发中事半功倍&#xff0c;无论是 Web 开发、科学计算&#xff0c;还是数据分析等领域&#xff0c;都能轻松应对。 在代码编辑方面&#xff0c;PyCharm 的…

C#中的时间数据格式化详解与应用示例

文章目录 1、基本概念基本格式化方法 2、实用的时间格式化方法格式化日期格式化时间格式化时间戳解析日期时间字符串 3、实际应用4、应用示例结论 在软件开发中&#xff0c;时间数据是无处不在的。无论是用户登录时间、数据备份时间&#xff0c;还是日志记录&#xff0c;都需要…

嵌入式学习——硬件(IIC、ADC)——day56

1. IIC 1.1 定义&#xff08;同步串行半双工通信总线&#xff09; IIC&#xff08;Inter-Integrated Circuit&#xff09;又称I2C&#xff0c;是是IICBus简称&#xff0c;所以中文应该叫集成电路总线。是飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备…

Pytorch实战(二)

文章目录 前言一、LeNet5原理1.1LeNet5网络结构1.2LeNet网络参数1.3LeNet5网络总结 二、AlexNext2.1AlexNet网络结构2.2AlexNet网络参数2.3Dropout操作2.4PCA图像增强2.5LRN正则化2.6AlexNet总结 三、LeNet实战3.1LeNet5模型搭建3.2可视化数据3.3加载训练、验证数据集3.4模型训…

在 Postman 中使用 Body 进行 POST 请求

Postman 是开发者日常工具箱中不可缺少的一部分&#xff0c;特别是在 API 开发和调试环节中。 为什么使用 POST 请求 POST 请求用于向服务器发送数据&#xff0c;这些数据通常被处理后存储。与 GET 请求不同&#xff0c;POST 请求将数据嵌入请求体&#xff08;Body&#xff0…

最细最有条理解析:事件循环(消息循环)是什么?进程与线程的定义、关系与差异

目录 事件循环&#xff1a;引入 一、浏览器的进程模型 1.1、什么是进程&#xff08;Process&#xff09; 1.2、什么是线程&#xff08;Thread&#xff09; 1.3、进程与线程之间的关系联系与区别 二、浏览器有哪些进程和线程 2.1、浏览器的主要进程 ①浏览器进程 ②网络…

Vue 快速入门案例

步骤一&#xff1a;引入vue.js文件 添加<script>标签并标明路径 步骤二&#xff1a;定义Vue对象 el Vue接管区域 data 定义数据模型 步骤三&#xff1a;编写视图层的展示 v-model 绑定数据模型 {{要展示的数据模型}} 运行效果 总结 文本框里的值&a…

顺序表(C语言详细版)

1. 线性表 线性表(lina list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串...... 线性表在逻辑上是线性结构&#xff0c;也就是说连续的一条直线。但是在物理结构上并…

进程,线程,虚拟内存,交换技术

参考资料&#xff1a; 参考视频1https://www.bilibili.com/video/BV1Hs421M78w/?spm_id_from333.999.0.0&vd_source97411b9a8288d7869f5363f72b0d7613 参考视频2https://www.bilibili.com/video/BV1jE411W7e8/?spm_id_from333.337.search-card.all.click&vd_source…

动手学深度学习5.6 GPU-笔记练习(PyTorch)

以下内容为结合李沐老师的课程和教材补充的学习笔记&#xff0c;以及对课后练习的一些思考&#xff0c;自留回顾&#xff0c;也供同学之人交流参考。 本节课程地址&#xff1a;17 使用和购买 GPU【动手学深度学习v2】_哔哩哔哩_bilibili 本节教材地址&#xff1a;5.6. GPU —…

STM32第十四课:低功耗模式和RTC实时时钟

文章目录 需求一、低功耗模式1.睡眠模式2.停止模式3.待机模式 二、RTC实现实时时钟1.寄存器配置流程2.标准库开发3.主函数调用 三、需求实现代码 需求 1.实现睡眠模式、停止模式和待机模式。 2.实现RTC实时时间显示。 一、低功耗模式 电源对电子设备的重要性不言而喻&#xff…