:串口通信(USART)与DMA解密)
前言 欢迎来到STM32期末复习系列的第四篇如果说GPIO是单片机的“手脚”那串口通信USART就是单片机的“嘴巴和耳朵”它让单片机能和电脑、WIFI模块、蓝牙模块进行对话。 而DMA则是单片机里的“超级快递员”专门负责搬运数据给单片机的大脑CPU减负。这两个知识点经常结合在一起考大题让我们用最通俗的大白话一次性搞懂它们考点一通信的基本概念⭐️⭐️⭐️ 必考选择/填空在学习串口之前必考以下几个通信的基础分类大家一定要分清1. 串行通信 vs 并行通信串行通信数据一根线一根线地传就像单行道排队过收费站。优点引脚少成本低适合长距离传输。缺点速度相对较慢。现在的USB、USART都是串行。并行通信多条数据线同时传比如8根线一起传8位就像8车道的高速公路。优点速度快。缺点占用的引脚多成本高而且距离长了容易互相干扰。2. 单工、半双工、全双工常考生活中的例子单工通信只能A发给B不能反过来。就像收音机、广播。半双工通信A可以发给BB也可以发给A但不能同时进行必须交替。就像对讲机一个人按住说话另一个只能听。代表IIC总线、RS485。全双工通信A和B可以同时互相发送和接收数据。就像打电话两个人可以同时说话和听到对方。代表USART。考点二串口通信 USART⭐️⭐️⭐️⭐️ 核心应用USART的全称是“通用同步/异步收发器”。但在实际项目中我们99%的情况下都把它当做异步通信UART来用。1. 核心引脚记牢这俩对头TX (Transmit)发送引脚。单片机通过这个引脚把数据“说”出去。RX (Receive)接收引脚。单片机通过这个引脚把数据“听”进来。注意接线时单片机A的TX必须接单片机B的RX交叉相连别接反了2. 串口通信的“接头暗号”波特率 (Baud Rate)因为是“异步通信”没有时钟线同步单片机和电脑必须约定好说话和听话的语速这个语速就是波特率。常见波特率9600、115200 bps位/秒。考试避坑如果串口收到了一堆乱码第一反应就是去检查发送端和接收端的波特率是不是设置得不一样3. 数据帧格式串口发出的数据不是连成一片的而是打包成“帧”起始位1位低电平 数据位8或9位 校验位可无 停止位1位高电平。考点三直接存储器访问 DMA⭐️⭐️⭐️⭐️⭐️ 压轴简答/概念题这是本章的绝对重点考试如果问“什么是DMA为什么要用DMA”请把下面的话写上去1. 什么是DMA大白话官方解释官方解释DMADirect Memory Access在外设如串口与存储器如内存数组之间建立一条直接的数据通道整个数据传输过程不需要CPU的中转和参与。大白话超级快递员没有DMA时串口每收到一个字节CPU就要放下手头的工作中断跑去把这个字节搬到内存里。如果有1000个字节CPU就要被打断1000次效率极低有了DMA时CPU把首地址和数量告诉“快递员”DMADMA就会自动在后台默默地把串口收到的数据搬到内存去。搬完1000个字节后DMA再告诉CPU“老板货搬完了”。大大节省了CPU的资源提高了系统效率2. STM32中的DMA特性STM32F103最多有2个DMA控制器DMA1有7个通道DMA2有5个通道。优先级仲裁当多个外设比如串口和ADC同时呼叫DMA“快递员”时DMA有优先级管理分为软件优先级和硬件优先级决定先帮谁搬东西。考点四串口结合DMA的应用设计思路⭐️⭐️⭐️ 综合应用在实际工程或大题中我们经常使用USART DMA 空闲中断来接收不定长的数据。思路如下设置串口和DMA开启串口接收DMA通道设置好接收数组的地址放货仓库。正常接收中串口来数据了DMA默默把数据搬到数组里CPU在干别的事情比如算算法、点屏幕完全不操心。数据发完了空闲中断触发串口发现一小段时间没收到数据了总线空闲触发“空闲中断”。CPU收尾在空闲中断服务函数里CPU算一下DMA这次到底搬了多少个字节然后把这批完整的数据拿去处理。复习建议这一章重在理解**“并行/串行、全双工/半双工”的分类死磕DMA是用来干嘛的解放CPU**。如果你对这两个概念彻底清晰了考试绝不丢分下一篇我们将进入时间管理的艺术——定时器(TIM)与系统滴答定时器(SysTick)准备好迎接PWM波了吗