本笔记资料来源 :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完全没搞
-
BKP(Backup):BKP通常指的是备份寄存器(Backup Register)。这些寄存器位于备份域中,当微控制器进入低功耗模式或复位时,备份寄存器的内容会被保留。这意味着即使系统电源被完全切断,备份寄存器中的数据也不会丢失。BKP寄存器通常用于存储关键数据,如系统配置、重要参数等,以确保在电源恢复后能够快速恢复系统状态。
-
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控制设备,在微信小程序上显示设备参数,在两台设备之间传送图片和音乐
可以把蓝牙模块当作单片机来连接温湿度传感器,继电器等外围电路