IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32cubeMX+keil+HAL库(DMA+空闲中断收发不定长数据) -> 正文阅读

[嵌入式]STM32cubeMX+keil+HAL库(DMA+空闲中断收发不定长数据)

目录

文章目录

前言

一、DMA介绍

二、配置

1.接口函数

2.STM32cubeMX的配置

3.keil代码

总结


?MCU型号:STM32H743ZI

IDE环境:MDK 535

文章目录

前言

我是一个单片机小白呀!!!!!!


一、DMA介绍

?1.? ? DMA概念

直接存储器访问 (DMA) :用于在外设与存储器之间以及存储器与存储器之间进行高速数据传输。DMA传输过程的初始化和启动由CPU完成,传输过 程由DMA控制器来执行,无CPU参与,从而节省CPU资源,提高利用率。

2.? ? DMA四要素

?? ? ? ?①? 传输源? :DMA数据传输的来源

? ? ? ?②? 传输目标:DMA数据传输的目的

?? ? ? ?③? 传输数量:DMA传输数据的数量

? ? ? ?④? 触发信号:启动一次DMA数据传输的动作??

3.? DMA数据传输方式

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

循环模式:可用于处理环形缓冲区和连续数据流(例如ADC扫描模式)。当激活循 环模式后,每轮传输结束时,要传输的数据数量将自动用设置的初始值 进行加载, 并继续响应DMA请求。

二、配置

1.接口函数

串口DMA方式发送函数:

HAL_StatusTypeDef? HAL_UART_Transmit_DMA?

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

2? 串口DMA方式接收函数:

HAL_StatusTypeDef? HAL_UART_Receive_DMA

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

目录

文章目录

前言

一、DMA介绍

二、配置

1.接口函数

2.STM32cubeMX的配置

3.keil代码

总结


3 获取未传输数据个数函数 ? HAL_DMA_GET_COUNTER

2.STM32cubeMX的配置

?然后配置Project Managei,接着生成工程,此时,STM32cubeMX的配置已经做完了!!

3.keil代码

stm32h7xx_it.c文件中



extern DMA_HandleTypeDef hdma_usart3_rx;
extern DMA_HandleTypeDef hdma_usart3_tx;
extern UART_HandleTypeDef huart2;
extern UART_HandleTypeDef huart3;




void USART3_IRQHandler(void)
{
  
  HAL_UART_IRQHandler(&huart3);

	//添加idle中断处理
  if(__HAL_UART_GET_FLAG(&huart3,UART_FLAG_IDLE)!=RESET)  //是否发生idle中断
	{
		__HAL_UART_CLEAR_IDLEFLAG(&huart3);   //清除idle中断
		HAL_UART_IdleCpltCallback(&huart3);   //用户编写的中断回调函数
	}
	

}

?main.c文件,变量定义

uint8_t			Rx_Flag = 0;         //标志位
uint8_t		RecCount = 0;         //个数
uint8_t			Rx_Buf[256];	     //接收缓冲区
uint8_t    Tx_Buf[256];


extern DMA_HandleTypeDef hdma_usart3_rx;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)         //接收中断函数
{
	if(huart->Instance == USART3)
	{
	   HAL_UART_Transmit(&huart3,(uint8_t *)Rx_Buf, 256,0xFFFF);    
	}
	
}
void HAL_UART_IdleCpltCallback(UART_HandleTypeDef *huart)     //空闲中断函数
{
   Rx_Flag = 1;                                              // 设置接收完成标志
   HAL_UART_DMAStop(huart);                                 // 停止DMA传输

   //发生空闲中断时,已接受的数据等于数据总减去dma中待接收的数据
   RecCount= 256 - __HAL_DMA_GET_COUNTER(&hdma_usart3_rx);   

	 memcpy(Tx_Buf, Rx_Buf, RecCount);                     //内存复制函数
	 memset(Rx_Buf, 0, sizeof(Rx_Buf));                    // 清零接收缓存区
	 HAL_UART_Receive_DMA(&huart3,Rx_Buf, sizeof(Rx_Buf));   //重新开启DMA传输
	 
	
}
int main(void)
{
  
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_USART2_UART_Init();
  MX_USART3_UART_Init();

  HAL_UART_Receive_DMA(&huart3, Rx_Buf,256);           //使能dma中断

  __HAL_UART_ENABLE_IT(&huart3,UART_IT_IDLE);          //使能idle中断


  while (1)
  {
     HAL_Delay(5);
     if(Rx_Flag==1)                                    //判断数据是否接收完成
		{
	      Rx_Flag=0;                                   //清除标志位
	      HAL_UART_Transmit_DMA(&huart3,Tx_Buf,RecCount);   //采用DMA的方式将接收数据发送到PC
	      RecCount = 0;
		}

  }
		
}


总结

我只是一个小菜鸡啊。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-16 11:27:52  更:2021-07-16 11:27:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:32:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码