STM32采用DMA方式向上位机发送数据

STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据。

一、DMA

1.1 DMA简介

DMA的出现大大减轻了CPU的工作量。在硬件系统中,主要由CPU(内核)、外设、内存(SRAM)、总线等结构组成,数据经常要在内存和外设之间,外设和外设之间转移。例如:CPU需要处理从外设采集回来的数据,CPU需要先将数据从ADC外设的寄存器读取到内存中(变量)去,然后进行运算处理,这是一般的解决方法。CPU的资源是非常宝贵的,我们可以设法把转移的工作交给其他部件来完成,CPU把更多的资源用于数据运算和中断响应上,如此DMA便登场了。DMA正是为CPU分担数据转移工作,因为DMA的存在,CPU才被解放出来,它可以在数据转移的同时进行数据运算,相应中断,大大提高了效率。

1.2 MDA的主要特性

在这里插入图片描述

1.3 DMA中断特性

在这里插入图片描述

1.4 传输方式

  • 普通模式:传输结束后(即要传输数据的数量达到零),将不再产生DMA操作。若开始新的DMA传输,需在关闭DMA通道情况下,重新启动DMA传输。
  • 循环模式:传输结束后(即要传输数据的数量达到零),将不再产生DMA操作。若开始新的DMA传输,需在关闭DMA通道情况下,重新启动DMA传输

二、串口通信DMA传输完成中断

2.1 步骤

  • 打开CUBRMX新建项目,芯片选择是F103C8,点击后创建项目;

请添加图片描述

  • 把PA9和PA10选择为USART1_RX和USART1_TX,然后再点击左边的USART1,将mode置为异步通信模式,我们这里只需要接收,不需要发送,后面再点击add键,添加引脚

请添加图片描述
请添加图片描述

请添加图片描述

2.2 代码

Open Project 打开keil5,进入到main.c文件,在main.c文件中的while循环那块的代码如下:

while (1)
  {
   uint8_t send_char[]="hello world\n";//发送的字符串
    HAL_UART_Transmit_DMA(&huart1,(uint8_t *)send_char,0xc);//DMA发送
		HAL_Delay(500);//延时
  }

2.3 实验结果

  • 烧录
  • 串口调试

请添加图片描述

小小的总结

DMA是一种在传输时不使用cpu的数据传输方式,可以节省cpu资源,提高CPU的利用率。对于DMA的串口发送函数HAL_UART_Transmit_DMA,需要size匹配你要发送的字符串。

参考文献

  1. stm32之串口通信DMA传输完成中断
  2. STM32F103C8通过DMA方式向上位机连续发送信息
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值