UartDma工作方式
一、初始化
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工作方式的更多相关文章
- dicom通讯的工作方式及dicom标准简介
本文主要讲述dicom标准及dicom通讯的工作方式.dicom全称医学数字图像与通讯 其实嘛就两个方面 那就是“存储”跟“通讯”. 文件数据组织方式 网络数据组织方式.文件数据组织方式就是解析静态 ...
- 通过iMindMap改善你的工作方式的教程
对于iMindMap 10,已经介绍了很多新增与改进的功能,你以为已经结束了?其实不然,本文,小编还会继续和你分享它的一个新功能与一个更新功能.这两个功能将在不经意间改善你的工作方式. 多媒体支持 在 ...
- 输入/输出系统的四种不同工作方式对CPU利用率比较
程序控制工作方式:输入/输出完全由CPU控制,整个I/O过程中CPU必须等待其完成,因此对CPU的能力限制很大,利用率较低 程序中断工作方式:CPU不再定期查询I/O系统状态,而是当需要I/O处理时再 ...
- 从一个简单例子来理解js引用类型指针的工作方式
<script> var a = {n:1}; var b = a; a.x = a = {n:2}; console.log(a.x);// --> undefined conso ...
- SPI总线的特点、工作方式及常见错误解答
1.SPI总线简介 SPI(serial peripheral interface,串行外围设备接口)总线技术是Motorola公司推出的一种同步串行接口.它用于CPU与各种外围器件进行全双工.同步串 ...
- LVS三种工作方式八种算法
一.集群简介 什么是集群 计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台计算机.集群系统中的单个计算 ...
- MVC4 WebAPI(二)——Web API工作方式
http://www.cnblogs.com/wk1234/archive/2012/05/07/2486872.html 在上篇文章中和大家一起学习了建立基本的WebAPI应用,立刻就有人想到了一些 ...
- php在apache中一共有三种工作方式:CGI模式、FastCGI模式、Apache 模块DLL
php在apache中一共有三种工作方式:CGI模式.FastCGI .FastCGI是什么? FastCGI是语言无关的.可伸缩架构的CGI开放扩展,其主要行 为是将CGI解释器进程保持在内存中并因 ...
- Git教程(9)集中式工作方式常用的设计分支的方案
Git是一个复杂的版本管理系统,管理代码有很多工作方式,如集中式,管理者式,司令/副官式 本文是假设选用集中式工作方式时,设计分支的方案. 中小型项目: 维护两个长期分支,分别是master 和 de ...
随机推荐
- Java基础知识强化之网络编程笔记24:Android网络通信之 AndroidAsync(基于nio的异步通信库)
1. AndroidAsync AndroidAsync 是一个基于nio的异步socket ,http(客户端服务器端),websocket,socket.io库,AndroidAsync 是一 ...
- Android(java)学习笔记98:关于string类型的面试题
package cn.itcast_02; /* * String s = new String(“hello”)和String s = “hello”;的区别? * 有.前者会创建2个对象,后者创建 ...
- sql 自定义函数-16进制转10进制
做过笔记,好记性不如烂笔头: if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[HEXTOINT]') and ...
- TCP/IP与UDP区别
最近面试,问到这方面的问题,这里总结一下: TCP (Transmission Control Protocol 传输控制协议):面向连接的,不可靠的,数据流服务.UDP (User Dat ...
- Simple Arithmetics
def Add(a, b): l = [] alen = len(a) blen = len(b) result = str(int(a) + int(b)) relen = len(result) ...
- [改善Java代码]多种最值算法,适时选择
建议64:多种最值算法,适时选择. 对一批数据进行排序,然后找出其中的最大值或最小值,这是基本的数据结构知识.在Java中我们可以通过编写算法的方式,也可以通过数组先排序再取值的方式来实现.下面以求最 ...
- 关于Winform发布时,资源文件缺失的解决方案
今天和大家分享一下,我这几天一直困惑的问题,今天不经意间解决了这个问题,接下来描述一下这个问题: 问题: 最近公司给人家做二次开发,是C/S结构的,我在做Winform时发现,当我选择一个项目发布时, ...
- Web前端学习笔记1
Day1. 1.Windows常用快捷键. 快捷键 功能 ctrl+c 复制 ctrl+v 粘贴 ctrl+x 剪切(复制和剪切后都可以粘贴) ctrl+a 全选 ctrl+s 保存 ctrl+tab ...
- ActiveMQ(5.10.0) - Building a custom security plug-in
If none of any built-in security mechanisms works for you, you can always build your own. Though the ...
- Ehcache(2.9.x) - API Developer Guide, Cache Extensions
About Cache Extensions Cache extensions are a general-purpose mechanism to allow generic extensions ...