基于HAL库的DMA串口通信及中断方式的串口通信

基于HAL库的DMA串口通信及中断方式的串口通信

(一)DMA串口通信

  1. DMA相关信息:

​ ①DMA,全称Direct Memory Access,即直接存储器访问。DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。
​ ②DMA用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。
​ ③DMA的作用就是实现数据的直接传输,而去掉了传统数据传输需要CPU寄存器参与的环节。

  1. CubeMX项目创建

①设置RCC与SYS
在这里插入图片描述
在这里插入图片描述

②设置USART1

选择异步通信Asynchronous,下方参数可修改,但本次操作不需要。

在这里插入图片描述

点击该界面的NVIC Setting,设置使能串口

在这里插入图片描述

点击DMA Setting 添加通道,点击Add,添加RX,TX两个通道

在这里插入图片描述

其余操作与其他STM32Cube项目创建基本一致。

3.代码部分

在main函数代码如下

  HAL_Init();
	uint8_t message[]="hello Windows!";//定义发送数组
  SystemClock_Config();
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_USART1_UART_Init();
  while (1)
  {
		HAL_UART_Transmit_DMA(&huart1,(uint8_t *)message,sizeof(message));
		HAL_Delay(1000);
  }

编译烧录,运行结果如下:

在这里插入图片描述

(二)中断方式的串口通信

1.中断方式与流水灯不同,有专门的函数:

HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

功能:串口中断接收,以中断方式接收指定长度数据。
大致过程是,设置数据存放位置,接收数据长度,然后使能串口接收中断。
接收到数据时,会触发串口中断。
再然后,串口中断函数处理,直到接收到指定长度数据
而后关闭中断,进入中断接收回调函数,不再触发接收中断。(只触发一次中断)

2.STM32Cube项目创建

基本与前面一致,不过还需设置NVIC

在这里插入图片描述

3.代码部分

在main函数部分添加如下代码

    uint8_t message[]="hello Windows!";//输出信息
	uint8_t flag='*';//指令 0:停止  1:开始
  while (1)
  {
		HAL_UART_Receive_IT(&huart1, (uint8_t *)&flag, 1);//设置中断
		if(flag=='*'){
			HAL_UART_Transmit_IT(&huart1, (uint8_t *)message, sizeof(message)); //发送信息
			HAL_Delay(1000);//延时
		}
		else if(flag=='#')
		{
			
		}
  }

编译烧录,结果如下:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值