STM32串口通信——DMA中断 (简单配置即可直接使用)

本文提供了一套STM32串口调试输出、DMA中断初始化以及中断回调函数的实现方法,包括串口调试输出、格式化输出、用户串口DMA初始化和中断回调函数的使用步骤,并详细解释了配置CubeMx串口的基本参数和中断优先级。此外,还介绍了字符串校验函数和实际应用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

各函数的功能及使用方法

1.串口调试输出

2. 串口调试输出 接口设置   

3. 串口格式化输出

4.用户串口DMA中断初始化函数

使用方法

1.找到系统的串口初始化函数

2.在结束位置添加我们的串口初始化函数

 5.用户中断回调函数

使用方法

1.找到系统的中断服务.c文件 打开

 2.找到串口中断服务函数 在结束位置添加我们的中断服务函数

6.校验字符串函数

CubeMx 串口配置

1.配置串口基本参数

2.开启串口DMA

 3.打开串口中断

 4.在NVIC中配置中断优先级​编辑

实际应用

源代码 "usart_dma.c"

源代码 "usart_dma.h"


话不多说,直接上教程

文章末尾附源代码


 这是 usart_dma.h 文件,里面都是配置所需功能的宏定义及串口相关的初始化函数和功能函数

配置的方法都·已经注释说明了,只需要启用需要使用的串口或者禁用不需要使用的串口即可

usart_dma.c 文件不用管 只需要配置该头文件就能使用了


各函数的功能及使用方法


1.串口调试输出

void debug(char* p, ...);	//串口调试输出

2. 串口调试输出 接口设置   

#define PRINTF	1			//   1: 启用串口1调试输出		 2: 启用串口2调试输出	
                            //   3: 启用串口3调试输出      4: 启用串口4调试输出		
                            //   5: 启用串口5调试输出	     其他:禁用串口调试输出

3. 串口格式化输出

/******************************************************************************
	*方法名称: void User_Printf(UART_HandleTypeDef *huart,char *p,...)
	*功能:     使用指定的串口格式化输出
	*参数:     * huart :用来输出数据的串口句柄
			    * p, ...:需要输出的数据
	*返回:		    无
	*说明:			无
*******************************************************************************/
void User_Printf(UART_HandleTypeDef *huart,char *p,...);		//串口格式化输出

4.用户串口DMA中断初始化函数

/******************************************************************************
	*方法名称:	void User_USART_UART_Init(UART_HandleTypeDef huart);
	*功能:     串口初始化输出
	*参数:     串口对应的 huart 句柄

	*返回:		无
	*说明:			用户串口DMA接收模式初始化函数
					需在系统串口初始化函数 MX_USARTx_UART_Init(void) 结束时调用
*******************************************************************************/
void User_USART_UART_Init(UART_HandleTypeDef huart); 
// 用户 串口DMA接收模式初始化函数需在 系统初始化函数 MX_USARTX_UART_Init(void) 函数结束时调用

使用方法

1.找到系统的串口初始化函数

2.在结束位置添加我们的串口初始化函数

 我这是在函数内部调用,你们也可在main函数中直接调用,只需保证在系统初始化函数后面就行


 5.用户中断回调函数

/******************************************************************************
	*方法名称: void User_UART_RxCpltCallback(UART_HandleTypeDef *huart)
	*功能:     串口回调函数  重新开启串口DMA接收
	*参数:     *huart: 串口对应的 huart 句柄

	*返回:		无
	*说明:			用户串口中断回调函数
					需在系统中断函数 USARTx_IRQHandler() 结束时调用
*******************************************************************************/
void User_UART_RxCpltCallback(UART_HandleTypeDef* huart); 
//用户 串口中断回调函数   需在系统中断回调函数 USARTx_IRQHandler() 函数结束时调用

使用方法

1.找到系统的中断服务.c文件 打开

 2.找到串口中断服务函数 在结束位置添加我们的中断服务函数


6.校验字符串函数

/******************************************************************************
	*方法名称: unsigned char hand(char* rec_data,char *ptr)
	*功能:     校验字符串 rec_data 是否包含字符串 ptr
	*参数:     rec_data :需要校验的字符串
			    ptr		 :需要包含的字符串
	*返回:		  校验结果 1:包含  0:不包含
	*说明:			无
*******************************************************************************/
unsigned char hand(char* rec_data,char *ptr);	
//校验字符串 rec_data 是否包含字符串 ptr    校验结果 1:包含  0:不包含

CubeMx 串口配置

1.配置串口基本参数

2.开启串口DMA

 

 3.打开串口中断

 4.在NVIC中配置中断优先级


实际应用

void usart3(void)
{
	/****************************************  从这里添加串口3功能代码 ****************************************/
	if ( (USART_RX_STA & ~(0x0001<<2)) != 0)		//串口3接收到数据
	{
		USART_RX_STA &= ~(0x0001<<2);	//串口3清标志位
		if (hand((char *)u3NewBuffer, "QRcode"))	//串口收到的数据是否包含 "QRcode"
		{
			destination=My_Atoi((char *)u3NewBuffer);	//如果包含则执行这条代码
		}
		User_Printf(&huart1, "usart3:%s \n  ", u3NewBuffer);	//使用串口1发送串口3接收到的数据
		memset(u3NewBuffer, '\0', strlen((char *)u3NewBuffer)); // 清除串口3缓存数据
	}
}


源码在这请自取: STM32Fx系列串口DMA中断接收(简单配置即可直接使用)资源-CSDN文库一键三连关注私聊博主有例程哦~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值