【STM32CubeMX】DMA

STM32CubeMX配置串口DMA传输实现不定长数据收发 STM32通过串口的IDLE空闲中断来实现串口的不定长数据收发。 阅读详情

下述以STM32F407VGT6为例,记录下学习DAM的相关理解以及记录。

理论

DMA介绍摘要自官方手册介绍

该设备具有两个通用双端口dma (DMA1和DMA2),每个DMA1和DMA2有8个流。它们能够管理内存到内存、外设到内存和内存到外设的传输。它们具有用于APB/AHB外设的专用fifo,支持突发传输,旨在提供最大的外设带宽(AHB/APB)。这两个DMA控制器支持循环缓冲区管理,因此当控制器到达缓冲区的末端时不需要特定的代码。两个DMA控制器还具有双重缓冲功能,可以自动使用和切换两个内存缓冲区,而不需要任何特殊代码。每个流连接到专用硬件DMA请求,支持每个流上的软件触发。配置由软件完成,源和目标之间的传输大小是独立的。

此外我发现ST官网也有对DMA的相关介绍STM32F2 STM32F4 DMA,肯定是讲的嘎嘎好的。

模式

  正常模式:是最基本的DMA传输模式,它执行一次性的数据传输。工作方式,在正常模式下,DMA控制器会在完成指定数量的数据传输后停止传输。应用场景,适合一次性传输固定数量的数据,例如,从一个缓冲区复制数据到另一个缓冲区,或者从外设读取一定数量的数据。

  循环模式:是一种特殊的DMA传输模式,它允许DMA传输在一个指定的缓冲区内循环进行。工作方式,在循环模式下,当DMA控制器完成指定数量的数据传输后,它会重新回到缓冲区的起始位置,并继续传输。适合需要持续传输数据的应用场景,例如实时数据流处理、音频数据传输等。例如,从ADC读取连续的数据流,或者向DAC写入连续的数据流。

Fifo

相当于使用先进先出的队列结构和其下的结构,来控制DMA的每次传输的数据量,传输触发条件等


Mx配置

STM32CubeMX的配置框图中参数介绍:

在这里插入图片描述

在MenToMen处添加的,只能是内存到内存的控制流,假如是内存到外设或者外设到内存,如串口,ADC等,就要对外设配置好后,在看那个DMA总线的连接到该外设上,就可以去对应的DMA1或DMA2的选项卡上添加,都是有专属的DMA请求名称的。

通常DMA请求确定后,方向也随之确定了,也就是无法修改了。至于流的选择,可以点看查看还有那个空闲的流可以选的,通常部分外设与内存之间的流有唯一的映射流(可以在数据手册中查看到),是不可选的。优先级:共四级可选,Low(低),Medium(中),High(高),Very High(非常高),用于管理多个DMA请求之间的优先顺序。

下框图,模式:有正常模式和循环模式,内存到内存模式无法启用循环模式。地址是否自增:源内存和目的内存都可以勾选,例如:想要把一个数组的数据复制到另一个空数组中,那源内存和目的内存都必须勾选了,这样才能达到一一对应。数据长读:三种可选,Byte(8位),Half Word(16位),Word(32位)。

当勾选上Use Fifo后,下述参数可配置:阀值:One Quarter Full(四分之一),Half Full(一半),Three Quarters Full(三分之一), Full(全满),当到达预设阀值后便会开始释放。释放值:Single(单次传输),4 Increment(4个节拍的突发增量传输),8 Increment(8个节拍的突发增量传输),16 Increment(16个节拍的突发增量传输)。

  参考网上资料,对上述使用Fifo的突发增量传输,写下个人理解:DMA要进行传输,就要获得总线仲裁管理总线事务裁决后分配的控制权,像是单次触发,就是接收到数据后就向裁决器申请控制权,至于突发增量传输的释放量,则是一次什么控制权后要传输的数据量,相对应的也是占用总线的时间数。阀值:则是内部数据量达到配置量时,会触发一次DMA传输。以目前开放板STM32F4为例,Fifo区的大小为4字(16字节)。例如:数据长度配置为word,释放量为4 Increment,阀值就只能选Full。因为目标传输数量就是数据长度*释放量=4*word=Fifo缓冲区大小。

  狭义总结:数据长度*释放量=传输大小(以及占用总线的节拍时间),阀值为Fifo缓冲区的数据达到多少了,就触发一次DMA传输,因为启用Fifo,数据的走向是,函数提交数据–>Fifo缓冲区–>达到阀值,开始申请DMA传输。


相关代码

STM32CubeMX中DMA的相关函数声明:

/*** 操作 ***/
HAL_StatusTypeDef HAL_DMA_Start (DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);	// 开始DMA传输
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);	  // 启用中断启动DMA传输
HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma);		// 终止DMA传输
HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma);	// 终止在中断模式下的DMA传输
HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, HAL_DMA_LevelCompleteTypeDef CompleteLevel, uint32_t Timeout);	// 完成传输轮询
void              HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma);	// 处理DMA中断请求
HAL_StatusTypeDef HAL_DMA_CleanCallbacks(DMA_HandleTypeDef *hdma);	// (没有定义)
HAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID, void (* pCallback)(DMA_HandleTypeDef *_hdma));	// 注册回调函数
HAL_StatusTypeDef HAL_DMA_UnRegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID);	// 注销回调

/*** 状态 ***/
HAL_DMA_StateTypeDef HAL_DMA_GetState(DMA_HandleTypeDef *hdma);
uint32_t             HAL_DMA_GetError(DMA_HandleTypeDef *hdma);

轮询模式

轮询模式,又称堵塞模式。基本的使用流程,这里验证用的是DMA2流4,要预先在STM32CubeMX上定义,验证的是内存到内存(变量到变量)。

// 定义两个变量
uint32_t i = 0;uint32_t num = 0; 
// DMA_MemToMen验证(堵塞模式)
HAL_DMA_Start(&hdma_memtomem_dma2_stream4,(uint32_t)&i,(uint32_t)&num,1);
HAL_DMA_PollForTransfer(&hdma_memtomem_dma2_stream4, HAL_DMA_FULL_TRANSFER, HAL_MAX_DELAY);

中断模式

中断模式,又称非堵塞模式。基本的使用流程,除了上述讲到的按定义好DMA2流2外,还要在NVIC中使能该控制流的全局中断,才能使用下述函数。

// 定义两个变量
uint32_t i = 0;uint32_t num = 0; 
// DMA_MemToMen验证(非堵塞模式)
HAL_DMA_Start_IT(&hdma_memtomem_dma2_stream4,(uint32_t)&i,(uint32_t)&num,1);
STM32CubeMX 实现串口 DMA 通信 STM32CubeMX 实现串口 DMA 通信 文章目录STM32CubeMX 实现串口 DMA 通信1、了解DMA2、 DMA_ InitTypeDef 初始化结构体3、DMA接口函数4、STM32CubeMX 配置 DMA5、添加代码6、串口调试7、总结 1、了解DMA 直接存储器访问 (DMA) :用于在外设与存储器之间以及存储器与存储器之 间进行高速数据传输。DMA传输过程的初始化和启动由CPU完成,传输过 程由DMA控制器来执行,无需CPU参与,从而节省CPU资源,提高利用率。 DMA数据传输的四 阅读详情

相关推荐

使用stm32cubeMX进行串口DMA收发

这里写自定义目录标题一、DMA的基本介绍二、使用cubeMX创建DMA1)创建工程功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 一、DMA的基本介绍 DMA,全称Direct Memory Access,即直接存储器访问。 DM

boomboomy的博客 4723

STM32开发(16)----CubeMX配置DMA

本章介绍使用STM32CubeMX对DMA进行配置的方法,DMA的原理、概念和特点,配置各个步骤的功能,并通过串口DMA传输实验方式验证。DMA(Direct Memory Access),即直接存储器访问。DMA 传输方式无需 CPU 直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为 RAM 与 I/O 设备开辟一条直接传送数据的通路, 能使 CPU 的效率大为提高。STM32F103 内部有 2 个 DMA 控制器(DMA2 仅存大容量产品中), DMA1 有 7 个通道。

疯狂飙车的蜗牛的博客 7414

HAL库 STM32CubeMX实现串口DMA发送接收

HAL库 STM32CubeMX实现串口DMA发送接收

Xqiubi的博客 5499

【工具使用】STM32CubeMX-DMA配置(ADC+DMA 和 UART+DMA)

DMA(Direct Memory Access)直接内存访问,其实就是一个数据搬运工,负责将数据从一个地方搬运到另一个地方而不需要内核介入。STM32里的DMA支持从外设到内存,从内存到外设和从内存到内存三种传输方式。

知识噬元兽的博客 1万+

STM32 CubeMX 实现 DMA 串口空闲中断

STM32 CubeMX 实现 DMA 串口空闲中断 一 前言 二 参考资料 三 实现过程

CH的博客 4479

【STM32 CubeMX】串口编程DMA

在嵌入式系统中,串口通信是一项至关重要的功能,它允许单片机与外部设备进行数据交换,如传感器、显示器或其他设备。然而,在高速数据传输的场景下,传统的串口通信方式可能会使CPU过于繁忙,从而影响系统的性能。为了解决这一问题,STM32系列微控制器提供了DMA(直接内存访问)技术,可以在不占用CPU资源的情况下实现高速的数据传输。本文将介绍如何利用STM32 CubeMX配置串口通信并使用DMA进行数据传输。通过本文的介绍,我们学习了如何在STM32 CubeMX中配置串口通信并使用DMA进行数据传输。

m0_62599305的博客 3922

【STM32】HAL库 STM32CubeMX教程十一---DMA (串口DMA发送接收)

前言: 本系列教程将 对应外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1、芯片: STM32F407ZET6/ STM32F103ZET6 2、STM32CubeMx软件 3、IDE: MDK-Keil软件 4、STM32F1xx/STM32F4xxHAL库 知识概括: 通过本篇博客您将学到: DMA工作原理 STM32CubeMX创建...

Z小旋 17万+

STM32 cubemx配置USART DMA传输

本篇文章来讲解DMA的概念,并使用DMA来进行串口的数据收发。下面我们来看到DMA的两种模式,一种是循环模式,一种是内存到内存的模式。在循环模式下,DMA传输的数据可以在源和目的地之间循环传输,以连续地进行数据传输操作。这种模式下,一旦DMA传输完成,它会自动重新开始下一轮传输,而无需软件干预。循环模式对于需要在连续数据块之间进行重复传输的应用非常有用,如音频、视频流等。它可以在不中断DMA传输的情况下循环传输数据,大大提高了数据传输效率和系统性能。

m0_49476241的博客 7738

STM32CubeMX配置ADC采样(轮询、中断、DMA)

STM32CubeMX能够极大减小STM32外设配置的工作量,本文介绍如何利用STM32CubeMX配置ADC采样,记录了作者学习过程中遇到的问题及解决办法

weixin_46461874的博客 3万+

STM32:STM32DMA编程:STM32CubeMX中配置DMA

DMA,全称为Direct Memory Access(直接内存访问),是一种硬件技术,允许数据在内存和外设之间直接传输,而无需CPU的干预。在DMA操作中,DMA控制器接管数据传输任务,释放CPU去执行其他更重要的任务,从而提高系统的整体性能和效率。STM32微控制器通常配备有多个DMA控制器,每个控制器可以管理多个DMA通道。例如,STM32F4系列微控制器具有两个DMA控制器(DMA1和DMA2),每个控制器有7个通道,总共14个通道。这些通道可以独立配置,用于不同的数据传输任务。

kkchenjj的博客 5390

MuJoCo 机械臂关节空间阻抗控制Impedance实现(附代码)

阻抗控制通过调整关节的刚度和阻尼,让机器人在接触时产生顺应性,减少冲击力,其核心目标是在接触外部载荷时能够自适应调整输出力矩,实现力与位置的协同控制。阻抗控制可以很快的到达设定位置,在此基础上,使用mujoco交互中的施加外力操作,可以看到当外力松开后,机械臂也可以很快的回弹回设定位置。其中self.Kp和self.Kd为固定刚度和阻尼系数,通过修改刚度和阻尼参数,可以变得更柔顺来应对各种场景。注释掉该行后,直接simulate仿真可以看到机械臂控制位置震荡等情况,接下来引入关节空间阻抗控制的代码。

darcsdn 1265

STM32CubeMX教程14 ADC - 多通道DMA转换

使用STM32CubeMX软件配置STM32F407开发板的ADC实现ADC多通道DMA采集,具体为使用ADC_IN5/6/7三个通道进行DMA连续ADC转换

lc_guo的博客 1万+

深入解析LVDS电平标准在LCD屏接口设计中的关键作用

本文深入解析了LVDS电平标准在LCD屏接口设计中的核心作用。文章不仅阐释了LVDS低电压差分信号的工作原理、关键电气参数及抗噪优势,还详细对比了VESA与JEIDA两种主流数据格式,并提供了从PCB布局布线到信号调试的实战避坑指南,是确保高速、稳定显示的关键技术参考。

weixin_28419039的博客 326

STM32CUBEMX配置教程(九)STM32串口DMA收发数据

STM32CUBEMX配置教程(九)STM32串口DMA收发数据 基于STM32H743VI 使用STM32CUBEMX两年了,始终觉得这个工具非常的方便,但因为不是经常使用,导致有些要点总是会有些遗忘,因此写下这一系列教程以供记忆,顺便让我这个大萌新给广大小萌新提供一些学习帮助。 此次工程效果:串口115200波特率,接收串口助手XCOM发送的数据并发送回XCOM 本次配置的工程链接在最下方,有需要自取。 0基础可以从第一个教程开始阅读 STM32CUBEMX配置教程(一)基础配置 STM32CUBEMX

weixin_44584198的博客 2万+

单点DToF激光测距传感器各家产品的比较

汇总DToF 单点测距传感器的相关信息

Linux 设备驱动概述及开发环境构建 (一) 1762

【Attention Is All You Need】Transformer模型精读

Attention Is All You Need》这篇论文奠定了Transformer模型的基础,为深度学习的发展提供了新的方向。Transformer通过自注意力机制和并行化处理显著提升了计算效率和模型性能。然而,Transformer的广泛应用也带来了新的挑战,如计算资源的消耗和对长序列的处理能力等。随着技术的不断发展,研究人员已经提出了诸如Efficient Transformer、Reformer等变种,旨在提升Transformer的效率和适应性。

Lewiz_124的博客 1490

STM32 CubeMx配置DMA-HAL库

什么是DMA (DMA的基本定义)DMA,全称Direct Memory Access,即直接存储器访问。DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。我们知道CPU有转移数据、计算、控制程序转移等很多功能,系统运作的核心就是CPU,CPU无时不刻的在处理着大量的事务,但有些事情却没有那么重要,比方说数据的复制和存储数据,如果我们把这部分的CPU资源拿出来,让CPU去处理其他的复杂计算事务,是不是能够更好的利用CPU的资源呢?

ltqdxl的博客 2386

Android SDK 国内镜像及配置方法(2025最新,包好使!)

android sdk 国内镜像配置方法,纯小白避坑指南,2025最新,亲测包好使!还有包奉上!

土豆是狗的博客 4655

STM32CubeMX实现串口DMA中断通信

文章目录一. 环境二. 使用STM32CubeMX三. USART DMA中断通信1. UART函数库介绍2. 编写代码3. 最终效果四. 软件调试五. 总结 一. 环境 硬件:stm32f103c8t6 核心板 软件:STM32CubeMX 6.3.0 软件:keil5 mdk 二. 使用STM32CubeMX 这里与前一篇串口通信文章只在于多了个DMA设置以及开启串口中断使能。STM32CubeMX实现串口通信_diyu-CSDN博客 与前一篇串口中断文章只多了个DMA设置。STM32CubeMX

You can do more than just get by. 6174

CoaXPress FMC子卡:高速图像采集与FPGA原型开发实战指南

在机器视觉和工业检测领域,高速、可靠的数据传输是核心需求。CoaXPress(CXP)协议作为一种基于同轴电缆的高速接口标准,通过其高带宽、长距离传输和低延迟的特性,有效解决了传统接口在确定性实时传输方面的短板。其技术价值在于为海量图像数据提供了稳定、高效的物理层和数据链路层解决方案,广泛应用于半导体检测、医疗成像等对吞吐量有极致要求的场景。要实现CXP系统的快速原型验证,集成了高速SerDes接口和时钟管理的FMC子卡与FPGA开发板的组合成为关键。这种平台将复杂的硬件设计封装,让开发者能聚焦于图像处理算

weixin_31815843的博客 274

基于Ansys Fluent和Mechanical的血管稳态流固耦合模型

流固耦合模型在医学中也会被用到,本次小编为大家带来针对人造血管内血液流动的仿真实例。 在开物云平台上找到Workbench 点击进入:https://cloud.yuansuan.cn/?user_source=community 在左侧的Toolbox中找到对应的模块:Fluid Flow(Fluent)和Static Structure 双击“Geometry”,进入建模功能 文件-打开-找到保存的模型文件 退回到主界面,在fluid flow(Fluent)中找到mesh

huasheng233的博客 3903

6,STM32CubeMX配置ADC+DMA工程

单片机型号:STM32F407编程环境 :STM32CubeMX + Keil v5硬件连接 :串口1,ADC1CH5--->PA5注:本工程在基础上完成。本工程在基础上完成。

LC_8575的博客 4033

网口电路/Bob Smith电路思考及测试

上表中的数据为实际数据,此时可以看出在结果比对中,分别为以上三种时,结果基本上变化很小,且网口一致性指标都是测试通过的,而且如果真的Bob Smith电路是有阻抗变换的作用的,我的以上操作(保留阻容、去掉电阻、去掉电阻电容)完全破环了阻抗平衡,但是实际上对网口一致性指标没有多大的影响,这是我认为该电路不具有阻抗变换的第一个原因。网口变压器的共模电感,就是电流型中的T10、T14、T17、T18,我们知道辐射超标一般都是共模电流导致的,而共模电感就是来消耗差分线路中的共模电流的,而对差模电流基本无影响。

domen_pan的博客 6036

STM32CubeMX教程12 DMA 直接内存读取

使用STM32CubeMX软件配置STM32F407开发板上串口USART1进行DMA传输数据

lc_guo的博客 3006

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

HAL 库 STM32CubeMX 实现串口 DMA 通信

一个简单的 DMA 实例

qq_53081685的博客 2950

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

基于CubeMX的STM32串口DMA模式配置

本文提出基于CubeMX的STM32芯片配置串口DMA模式的方法,本文方法仅供参考.

mianbaodeshou的博客 3487

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: 【STM32CubeMX】STM32CubeMX基本介绍
下一篇: uthash
紫阡星影
博客等级 码龄5年 645粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值