STM32CubeMX配置串口DMA传输实现不定长数据收发

本文详细介绍了STM32串口通信的基础知识,包括串口的全双工特性、数据帧格式(起始位、数据位、校验位和停止位)以及常见波特率。此外,还讲解了如何配置CubeMX以实现串口的DMA传输和IDLE中断。在中断处理方面,通过自定义串口空闲中断回调函数,实现了接收到不定长数据的处理,并给出了相应代码示例。最后,文章提到了如何利用串口控制舵机旋转,展示了串口在实际应用中的作用。

串口简介

串口是全双工的串行通信协议。串口通信指串口按位(bit)发送和接收字节(一个字节有8位)。尽管比特字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。串口通信协议是基于串口使得通信双方能够相互沟通信息的一种约定,其定义了双方遵循的协议数据帧格式和其传输方式。因为串口通信没有时钟线,说设备双方必须约定好相同的波特率,这样才能保证数据收发准确无误。常见的波特率有4800、9600、115200等。

起始位、停止位
数据包从起始位开始,到停止位结束。起始信号用逻辑0(最开始为拉高,当拉低后表示起始)的数据位表示,停止信号由0.5、1、1.5或2个逻辑1的数据位表示,只要双方约定一致即可。
有效数据
起始位之后便是传输的主体数据内容了,也称为有效数据,其长度一般被约定为5、6、7或8位长。
数据校验
由于在通讯过程中易受到外部干扰导致传输数据出现偏差,所以在有效数据之后加上校验位解决。校验方法有奇校验(odd)、偶校验(even)、0校验(space)、1校验(mark)及无校验(noparity)。
奇校验要求有效数据和校验位中“1”的个数为奇数,比如一个8位长的有效数据为:01101001,此时共有4个“1”,为达到奇校验效果,校验位为“1”,最后传输的是8位有效数据加1位校验位,共9位。
偶校验刚好相反,要求有效数据和校验位的“1”数量为偶数,则此时为达到偶校验效果,校验位为“0”。而0校验则无论有效数据中是什么数据内容,校验位总是为“0”,1校验校验位总是为“1”。

CubeMX配置

配置好时钟。
串口配置:使用默认配置(传输数据长度为8 Bit,奇偶检验无,停止位为1 Bit, 接收和发送都使能)
在这里插入图片描述
打开DMA传输:
在这里插入图片描述
打开串口接收中断:
在这里插入图片描述生成工程;

添加代码

添加代码实现printf函数。
在usart.c中添加如下代码,记住一定要添加在
/* USER CODE BEGIN 1 /
/
USER CODE END 1 */
里面,否则一旦CubeMX重新生成工程,就会不见。

/* USER CODE BEGIN 0 */
#include "stdio.h"
/* USER CODE END 0 */

/* USER CODE BEGIN 1 */
#if 1
#pragma import(__use_no_semihosting)                             
struct __FILE
{
   
   
int handle;
};
FILE __stdout;      
void _sys_exit(int x)
{
   
   
   x = x;
}
int fputc(int ch, FILE *f)
{
   
        
  while((USART1->SR&0X40
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值