STM32串行通信DMA的使用

STM32串行通信DMA的使用

  • [1. 配置](#1. 配置)
  • [2. 代码](#2. 代码)

1. 配置

简单说

  1. 发送端Memory地址自增打开;
  2. 发送模式Normal;
  3. 接收端地址自增关闭,这里每次接收并处理1字节;
  4. 接收模式Normal;

2. 代码

如果使用 printf 函数,需要更改发送函数;

使用函数:

HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

复制代码
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#define GETCHAR_PROTOTYPE int __io_getchar(FILE *f)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#define GETCHAR_PROTOTYPE int fgetc(FILE *f)
#endif /* __GNUC__ */
PUTCHAR_PROTOTYPE
{
//	HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
	HAL_UART_Transmit_DMA(&huart1, (uint8_t *)&ch, 1);
	return ch;
}
GETCHAR_PROTOTYPE
{
	uint8_t ch = 0;
//	HAL_UART_Receive(&huart1,(uint8_t *)&ch, 1, 0xFFFF);
	HAL_UART_Receive_DMA(&huart1,(uint8_t *)&ch, 1);
	if (ch == '\r')
	{
		__io_putchar('\r');
		ch = '\n';
	}
	return __io_putchar(ch);
}

回调函数

复制代码
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	if(huart->Instance == USART1)	// 判断串口
	{
		HAL_UART_Transmit(&huart1,aRxBuffer_1,1,100);	// 返回数据
//		HAL_UART_Receive_IT(&huart1,aRxBuffer_1,1);		// 使能串口1接收中断
		// Normal模式DMA传输一次就停止,必须再次开启才能收下一字节
		HAL_UART_Receive_DMA(&huart1, aRxBuffer_1, 1);
	}
}

发送接收函数

HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

相关推荐
碧海银沙音频科技研究院9 小时前
基于炬芯ATS308X 设计的上位机usb 串口音乐EQ调节工具
stm32·单片机·嵌入式硬件
三佛科技-1341638421212 小时前
过认证72W碳化硅方案(12V6A)主控HN1562+HN36228V 典型应用电路、变压器参数分享
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
Zwawa13 小时前
串口为什么会丢字节:从轮询到中断和环形缓冲区
c语言·单片机·嵌入式
Brilliantwxx13 小时前
【STM32】 内部 Flash 详解:寄存器逐位拆解 + 工作流程顺序全讲 + EEPROM再实现
stm32·单片机·嵌入式硬件·1024程序员节
木子单片机13 小时前
基于单片机的DS18B20温度传感器测温系统设计
单片机·嵌入式硬件·51单片机·keil
华清远见IT开放实验室14 小时前
实验室建设案例 | 安徽三联学院物联网实验室
stm32·单片机·嵌入式硬件·物联网·华清远见
Zw-awa14 小时前
串口为什么会丢字节:从轮询到中断和环形缓冲区
stm32
深圳光特通信豆子15 小时前
TTL 光模块在工业控制与串口通信中的应用指南(10M BIDI 单模系列)
单片机·嵌入式硬件
桀人15 小时前
SPI概念引入
stm32·单片机·嵌入式硬件
离凌寒16 小时前
一、基于stm32+freertos下LD2410D和R60ADB1两款雷达的使用效果
stm32·单片机·嵌入式硬件