一、初始化

1.初始化串口,时钟

MX_USART1_UART_Init();

串口时钟初始化为内部时钟

PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_HSI;

PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_HSI;

2.初始化dma,端口复用

HAL_UART_MspInit()

打开空闲帧中断

__HAL_UART_ENABLE_IT(uartHandle, UART_IT_IDLE);

二、启动接收传送

1.启动数据接收

/*启动DMA接收传送*/
void Mx_Uart_DebugRxStart(UART_E uart)
{
if(uart>= UART_MAX){return ;}
if(!g_stMyUart[uart].bDebugRxStop){return ;} for(uint8 i=0;i<UART_DEBUG_BUFF_LEVER;i++)
{
if(!g_stMyUart[uart].bDebugRxAvail[i])
{
g_stMyUart[uart].bDebugRxStop=false;
HAL_UART_Receive_DMA(g_stMyUart[uart].huart
,g_stMyUart[uart].cDebugBuffRx[i]
,UART_RX_BUFF_SIZE-1);
g_stMyUart[uart].cCurDebugRxBuff=i;
g_stMyUart[uart].uDebugRxCount[i]=0;
break;
}
}
}

2.如果接收完数据则触发DMA中断,触 发DMa中断后,调用传送完成中断,如果收到空闲帧,也会调用传送完成中断

uint32_t temp;
temp = huart->Instance->ISR;
temp = huart->Instance->RDR;
if(HAL_OK !=HAL_UART_DMAStopRx(huart))
{
Error_Handler();
}
g_stMyUart[uart].bDebugRxStop=true;
if(NULL != huart->hdmarx)
{
temp = huart->hdmarx->Instance->CNDTR;
MX_UART_DebugGetData(uart,temp);
Mx_Uart_DebugRxStart(uart);
}
else{Error_Handler();}

停止DMA传送,置接收停止标志,读取数据,重新开始数据接收

三、发送DMA

1.启动传送

if(HAL_UART_Transmit_DMA(g_stMyUart[UART_DEBUG].huart
, g_stMyUart[UART_DEBUG].cDebugBuffTx[i]
, g_stMyUart[UART_DEBUG].uDebugTxCount[i]) == HAL_OK)
{
g_stMyUart[UART_DEBUG].cCurDebugTxBuff=i;
g_stMyUart[UART_DEBUG].uDebugTxCount[i]=0;
}

2.DMA传送完成时,打开串口发送完成中断,

void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
UART_E uart;
for(uart=UART_DEBUG;uart<UART_MAX;uart++)
{
if(g_stMyUart[uart].huart == huart){break;}
}
if(UART_MAX == uart){return ;} HAL_UART_DMAStopTx(huart);
if(g_stMyUart[uart].cCurDebugTxBuff <UART_DEBUG_BUFF_LEVER)
{
g_stMyUart[uart].bDebugTxEn[g_stMyUart[uart].cCurDebugTxBuff]=false;
}
}

UartDma工作方式的更多相关文章

  1. dicom通讯的工作方式及dicom标准简介

    本文主要讲述dicom标准及dicom通讯的工作方式.dicom全称医学数字图像与通讯 其实嘛就两个方面 那就是“存储”跟“通讯”. 文件数据组织方式  网络数据组织方式.文件数据组织方式就是解析静态 ...

  2. 通过iMindMap改善你的工作方式的教程

    对于iMindMap 10,已经介绍了很多新增与改进的功能,你以为已经结束了?其实不然,本文,小编还会继续和你分享它的一个新功能与一个更新功能.这两个功能将在不经意间改善你的工作方式. 多媒体支持 在 ...

  3. 输入/输出系统的四种不同工作方式对CPU利用率比较

    程序控制工作方式:输入/输出完全由CPU控制,整个I/O过程中CPU必须等待其完成,因此对CPU的能力限制很大,利用率较低 程序中断工作方式:CPU不再定期查询I/O系统状态,而是当需要I/O处理时再 ...

  4. 从一个简单例子来理解js引用类型指针的工作方式

    <script> var a = {n:1}; var b = a; a.x = a = {n:2}; console.log(a.x);// --> undefined conso ...

  5. SPI总线的特点、工作方式及常见错误解答

    1.SPI总线简介 SPI(serial peripheral interface,串行外围设备接口)总线技术是Motorola公司推出的一种同步串行接口.它用于CPU与各种外围器件进行全双工.同步串 ...

  6. LVS三种工作方式八种算法

    一.集群简介 什么是集群 计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台计算机.集群系统中的单个计算 ...

  7. MVC4 WebAPI(二)——Web API工作方式

    http://www.cnblogs.com/wk1234/archive/2012/05/07/2486872.html 在上篇文章中和大家一起学习了建立基本的WebAPI应用,立刻就有人想到了一些 ...

  8. php在apache中一共有三种工作方式:CGI模式、FastCGI模式、Apache 模块DLL

    php在apache中一共有三种工作方式:CGI模式.FastCGI .FastCGI是什么? FastCGI是语言无关的.可伸缩架构的CGI开放扩展,其主要行 为是将CGI解释器进程保持在内存中并因 ...

  9. Git教程(9)集中式工作方式常用的设计分支的方案

    Git是一个复杂的版本管理系统,管理代码有很多工作方式,如集中式,管理者式,司令/副官式 本文是假设选用集中式工作方式时,设计分支的方案. 中小型项目: 维护两个长期分支,分别是master 和 de ...

随机推荐

  1. 使用jquery实现局部刷新DIV

    实现页面的定时刷新功能:jquery使用的是jquery-1.8.3.min.js1:定时刷新 A界面的一段代码如下:<script type="text/javascript&quo ...

  2. oracle 自增列设置

    序列 create sequence sq_1 minvalue maxvalue start increment cache ; 触发器 create or replace trigger 触发器名 ...

  3. Mac OS X 配置 Apache+Mysql+PHP 详细教程

    网上的教程已经有很多,这里简洁的记录一下.以 Mac OS X Mavericks 10.9.X 为例. 先附上如何进入指定目录文件夹,按键盘 Command + Shift + G ,然后输入指定目 ...

  4. 【基础数学知识】UVa 11314 - Hardly Hard

    Problem H HARDLY HARD You have been given the task of cutting out a quadrilateral slice of cake out ...

  5. Mac环境下svn的使用(转载)

    在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境.在Mac环境下,由于Mac自带了svn的服务器端和客户端功能,所以我们可以在不装任何第三方软件的前提下使用svn功能,不过还 ...

  6. 海量小文件存储与Ceph实践

    海量小文件存储(简称LOSF,lots of small files)出现后,就一直是业界的难题,众多博文(如[1])对此问题进行了阐述与分析,许多互联网公司也针对自己的具体场景研发了自己的存储方案( ...

  7. CSS之鼠标经过字体光标形状的改变

    CSS中的cursor属性是规定要显示的光标的类型(形状). 参阅JavaScript正则表达式 default 默认光标(通常是一个箭头) auto 默认.浏览器设置的光标. crosshair 光 ...

  8. mssql 查询效率

    (1)临时表.表变量 据说:当数据量<100行数据时使用表变量,数据量较大时使用临时表(可创建索引提高查询效率). 表变量只能创建主键或唯一索引,准确讲是约束不是索引. (2)存储过程直接在查询 ...

  9. SQL_CURSOR_游标循环

    ) DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT column1 FROM #temp1) --查出需要的集合放到游标中 OPEN My_Cursor; -- ...

  10. ifndef/define/endif作用和用法

    问题:ifndef/define/endif”主要目的是防止头文件的重复包含和编译,偶只知道这个概念不懂的是怎么个用法,和为什么要用它~~高手请指点一下~~谢谢~~~!!! ------------- ...