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

本笔记资料来源 :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.mzph.cn/news/864403.shtml

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

相关文章

docker 部署jitsi meet

1. 部署环境: 1.1 vm 虚拟机 安装的 centos 7 1.2 centos7安装docker 和 docker-compose 2.docker命令 官网部署文档地址:(文档地址有可能失效) Self-Hosting Guide - Docker | Jitsi Meet 2.1Download and extract the late…

1-3.文本数据建模流程范例

文章最前: 我是Octopus,这个名字来源于我的中文名–章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的…

基于隐马尔可夫模型的股票预测【HMM】

基于机器学习方法的股票预测系列文章目录 一、基于强化学习DQN的股票预测【股票交易】 二、基于CNN的股票预测方法【卷积神经网络】 三、基于隐马尔可夫模型的股票预测【HMM】 文章目录 基于机器学习方法的股票预测系列文章目录一、HMM模型简介(1)前向后…

全球首款搭载Google Gemini和GPT-4o的智能眼镜发布

智能眼镜仍然是一个尚未完全成熟的未来概念,但生成式人工智能的到来显著提升了这些设备的能力。Meta 的 Ray-Ban 智能眼镜被许多人视为当今最好的选择之一,而现在 Solos AirGo Vision 正在为其带来竞争,这款眼镜还集成了 Google Gemini 支持。…

生命在于学习——Python人工智能原理(3.1.1)

Python部分结束了,开始概率论部分 一、概率基本知识 1.1 事件与概率 1.1.1 事件的运算与关系 (一)基本概念 定义1 随机试验 如果一个试验满足如下条件: 在试验前不能断定其将发生什么结果,但可明确指出或说明试验…

浅聊JavaScript中的栈(stack)

前言 这篇文章结合leetcode题目讲解一下栈这种结构 第20题:20. 有效的括号 - 力扣(LeetCode) 第LCR-147题LCR 147. 最小栈 - 力扣(LeetCode) 栈(stack) 在讲解题目之前,我们先来…

HTTPS是什么?原理是什么?用公钥加密为什么不能用公钥解密?

HTTPS(HyperText Transfer Protocol Secure)是HTTP的安全版本,它通过在HTTP协议之上加入SSL/TLS协议来实现数据加密传输,确保数据在客户端和服务器之间的传输过程中不会被窃取或篡改。 HTTPS 的工作原理 客户端发起HTTPS请求&…

primetime中cell和net的OCV

文章目录 前言一、Cell OCV1. POCV coefficient file2. POCV Slew-Load Table in Liberty Variation Format(LVF lib) 二、Net OCV三、如何check OCV是否已加上?总结 前言 在生产中,外界环境的各种变化,比如PVT&#…

C语言之线程的学习

线程属于某一个进程 共同点:都能并发 线程共享变量,进程不共享。 多线程任务中,其中某一个线程调用了exit了,其他线程会跟着一起退出 如果是特定的线程就调用pthread_exit 失败返回的是错误号 下面也是

代码随想录-Day44

322. 零钱兑换 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。 你可以认为每种硬币的数…

科普文:一文搞懂jvm原理(三)执行引擎

概叙 科普文:一文搞懂jvm(一)jvm概叙-CSDN博客 科普文:一文搞懂jvm原理(二)类加载器-CSDN博客 前面我们介绍了jvm,jvm主要包括两个子系统和两个组件: Class loader(类装载器) 子系统,Execution engine(执行引擎) 子系…

16_C语言编程基础

目录 C语言入门 程序段和代码段 C语言入门实例 英文分号(;) 注释 标识符 保留字 C中的空格 C数据类型 基本类型 sizeof获取存储字节 void类型 变量 C数组 C枚举 C中的左值(lvalue)和右值(rvalue) C常量 变量存储类型 C常用关键字(保留字) 宏定义#define co…

生成式AI:未来商业的变革者

在2023年,生成式人工智能(GenAI)的浪潮席卷了全球,成为科技领域最炙手可热的话题之一。它不仅改变了我们与机器的互动方式,更在商业创新和生产力提升方面发挥了巨大的作用。本文将深入探讨2024年生成式AI的应用模式、趋…

docker初始化运行mysql容器时自动导入数据库存储过程问题

问题:用navicat导出的数据库脚本,在docker初始化运行mysql容器时,导入到存储过程时出错。 ERROR 1064 (42000) at line 2452: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for t…

面经-数据库

1.MySQL 1.1什么是MySQL? MySQL 是⼀种关系型数据库,在 Java 企业级开发中⾮常常⽤,因为 MySQL 是开源免费的,并 且⽅便扩展。阿⾥巴巴数据库系统也⼤量⽤到了 MySQL ,因此它的稳定性是有保障的。 MySQL 是开放源代码的&…

微信小程序-插槽slot

一.插槽slot 在页面使用自定义组件的时候&#xff0c;如果在自定义组件里面写子组件&#xff0c;子组件的内容无法显示。 <custom01> <text slotslot-top>你好&#xff0c;上方组件</text> 你好&#xff0c;组件 <text slotslot-bottom>你好&#xf…

三层限流:为高并发系统保驾护航

文章目录 前言第一层限流&#xff1a;Nginx 层面的 IP 限流第二层限流&#xff1a;Gateway 对用户层级的限流第三层限流&#xff1a;微服务限流分布式限流和单机限流的优缺点&#xff1a;1、RateLimiter的使用2、Hystrix的使用3、Redislua脚本4、使用Sentinel 关于为何同时使用…

做PFMEA的经验之谈

在制造业的广袤领域中&#xff0c;PFMEA&#xff08;过程失效模式与影响分析&#xff09;是一项至关重要的工具&#xff0c;它用于识别并评估生产过程中的潜在失效模式&#xff0c;以及这些失效模式可能导致的后果。作为一名在制造业有多年经验的专业机构&#xff0c;深圳天行健…

安装KB5039212更新卡在25% 或者 96% 进度

系统之家7月1日消息&#xff0c;微软在6月11日的补丁星期二活动中&#xff0c;为Windows 11系统推出了KB5039212更新。然而&#xff0c;部分用户在Windows社区中反映&#xff0c;安装过程中出现失败&#xff0c;进度条在25%或96%时卡住。对于遇到此类问题的Windows 11用户&…