STM32HAL库学习之路(四):DMA方式实现串口数据收发

我使用的串口3进行调试

目录

(一)、DMA方式:

(二)、DMA方式所用到的HAL库函数

(三)、示例代码


(一)、DMA方式:

在主存储器和外设之间开辟直接的数据通道,可以进行基本的数据通道,可以进行基本上不需要CPU接入的内存和外设之间的信息传递,这样不仅保证了CPU的高效率也保证了高速外设的需要,一般串口我们不推荐使用DMA方式进行串口数据的收发,因为DMA的优先级是远高于中断和不同的串口收发的。当开有多个串口工作时可能会由于优先级的问题使得其他串口的工作任务被抢占而无法是正常工作。

(二)、DMA方式所用到的HAL库函数

//发送数据
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData,
uint16_t Size, uint32_t Timeout);
//接收数据
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData,
uint16_t Size, uint32_t Timeout);
//发送中断
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *
pData, uint16_t Size);
//接收中断
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData
, uint16_t Size);
//使用DMA发送
HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *
pData, uint16_t Size);
//使用DMA接收
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *
pData, uint16_t Size);
//DMA暂停
HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart);
//DMA恢复
HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart);
//DMA停止
HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart);
//串口回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);

(三)、示例代码

#define UART3_DMA
uint8_t IRMA[]={"Welcome to UART3_DMA\r\n"};//示例字符串,用来验证是否进入串口DMA
uint8_t MData;//串口3接受到的数据
#ifdef UART3_DMA
    HAL_UART_Transmit_DMA(&huart3,&IRMA,sizeof(IRMA));
    HAL_UART_Receive(&huart3, &MData, 1,0xff);//触发DMA方式串口收发,使用0xff降低DMA的发送速度
#endif
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{

#ifdef UART3_DMA
  HAL_UART_Transmit(&huart3, &MData, 1,0xff);
  HAL_UART_Receive_DMA(&huart3, &MData,1);
#endif
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

靳小锅er

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值