STM32时钟设置

第4课【STM32的时钟】时钟 时钟源 内外部时钟 高低速时钟 目录基本知识框架课堂笔记时钟什么是时钟?时钟有什么作用时钟源HSE 外部高速时钟HSI 内部高速时钟LSE 外部低速时钟LSI 内部低速时钟PLL锁相环主要时钟和其他时钟主要时钟其他时钟配置系统时钟实验基本知识框架Xmind文件下载 基本知识框架 课堂笔记 时钟 什么是时钟?时钟有什么作用 时钟是STM32内部最核心的器件,它可以提供时钟信号。依赖于这个信号,STM32中的器件才可以有条不紊地将工作进行下去。正如人类的脉搏一般。 时钟源 STM32中能够主动发出时钟信号的元器件,可以用作时钟源。STM32 阅读详情



2010-12-27 09:33:47|  分类: ARM |  标签: |举报 |字号大中小 订阅

    大家都知道在使用单片机时,时钟速度决定于外部晶振或内部RC振荡电路的频率,是不可以改变的。而ARM的出现打破了这一传统的法则,可以通过软件随意改变时钟速度。这一出现让我们的设计更加灵活,但是也给我们的设计增加了复杂性。为了让用户能够更简单的使用这一功能,STM32的库函数已经为我们设计的更加简单方便。

    在比较靠前的版本中,我们需要向下面那样设置时钟:

ErrorStatus HSEStartUpStatus;

/**************************************************************************************
* FunctionName   : RCC_Configuration()
* Description    : 时钟配置
* EntryParameter : None
* ReturnValue    : None
**************************************************************************************/
void RCC_Configuration(void)
{
    /*
复位所有的RCC外围设备寄存器,不改变内部高速振荡器调整位(HSITRIM[4..0])以及
    备份域控制寄存器(RCC_BDCR),控制状态寄存器RCC_CSR */
    RCC_DeInit();    // RCC system reset(for debug purpose)

    /* 开启HSE振荡器 */
    /* 三个参数: RCC_HSE_ON-开启 RCC_HSE_OFF-关闭 RCC_HSE_BYPASS-使用外部时钟振荡器*/
    RCC_HSEConfig(RCC_HSE_ON); // Enable HSE

    /* HSEStartUpStatus为枚举类型变量,2种取值,0为ERROR,非0为SUCCESS
    等待HSE准备好,若超时时间到则退出*/
    HSEStartUpStatus = RCC_WaitForHSEStartUp(); // Wait till HSE is ready

    if (HSEStartUpStatus == SUCCESS)                  // 当HSE准备完毕切振荡稳定后
    {
     /* 配置AHB时钟,这个时钟从SYSCLK分频而来分频系数有1,2,4,8,16,64,128,256,512 */
     RCC_HCLKConfig(RCC_SYSCLK_Div1);                   // HCLK = SYSCLK
 
      /* 设置低速APB2时钟,这个时钟从AHB时钟分频而来分频系数为1,2,4,8,16 */
     RCC_PCLK2Config(RCC_HCLK_Div1);                  // PCLK2 = HCLK
 
     /* 设置低速APB1时钟,这个时钟从AHB时钟分频而来分频系数为1,2,4,8,16 */
     RCC_PCLK1Config(RCC_HCLK_Div2);                  // PCLK1 = HCLK/2
 
     FLASH_SetLatency(FLASH_Latency_2);                 // Flash 2 wait state
     FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);  // Enable Prefetch Buffer
 
     /* 设置PLL的时钟源和乘法因子
     第一个入口参数为时钟源,共有3个
     RCC_PLLSource_HSI_Div2          
     RCC_PLLSource_HSE_Div1
     RCC_PLLSource_HSE_Div2
     乘法因子RCC_PLLMul_2~RCC_PLLMul_16,之间参数连续 */
     RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);   // PLLCLK = 8MHz * 9 = 72 MHz
 
    
/* 输入参数为ENABLE及DISABLE */
     RCC_PLLCmd(ENABLE);            // Enable PLL
 
     while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
     {
      ;               // Wait till PLL is ready
     }
 
      /* 选择系统时钟源,三个参数
      RCC_SYSCLKSource_HSI   内部高速振荡器
      RCC_SYSCLKSource_HSE   外部高速振荡器
      RCC_SYSCLKSource_PLLCLK PLL时钟 */
      RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);      // Select PLL as system clock source
 
      /* 返回系统当前的时钟源,返回值有3种
      0x00 HSI是当前时钟源
      0x04 HSE是当前时钟源
      0x08 PLL是当前时钟源
     */
     while (RCC_GetSYSCLKSource() != 0x08)       // Wait till PLL is used as system clock source
     {
      ;
     }
 }
}

随之函数库的不断升级,到3.0以上时,我们就不用再这样编写时钟设置了,我们只要做如下两部即可:

第一个: system_stm32f10x.c 中 #define SYSCLK_FREQ_72MHz 72000000
第二个:调用SystemInit()

说明:在stm32固件库3.0中对时钟频率的选择进行了大大的简化,原先的一大堆操作都在后台进行。系统给出的函数为SystemInit()。但在调用前还需要进行一些宏定义的设置,具体的设置在system_stm32f10x.c文件中。

文件开头就有一个这样的定义:
//#define SYSCLK_FREQ_HSE    HSE_Value
//#define SYSCLK_FREQ_20MHz 20000000
//#define SYSCLK_FREQ_36MHz 36000000
//#define SYSCLK_FREQ_48MHz 48000000
//#define SYSCLK_FREQ_56MHz 56000000
  #define SYSCLK_FREQ_72MHz 72000000

    ST 官方推荐的外接晶振是 8M,所以库函数的设置都是假定你的硬件已经接了 8M 晶振来运算的.以上东西就是默认晶振 8M 的时候,推荐的 CPU 频率选择.在这里选择了:
     #define SYSCLK_FREQ_72MHz 72000000
也就是103系列能跑到的最大值72M

然后这个 C文件继续往下看
#elif defined SYSCLK_FREQ_72MHz
const uint32_t SystemFrequency         = SYSCLK_FREQ_72MHz;   
const uint32_t SystemFrequency_SysClk   = SYSCLK_FREQ_72MHz;   
const uint32_t SystemFrequency_AHBClk   = SYSCLK_FREQ_72MHz;   
const uint32_t SystemFrequency_APB1Clk  = (SYSCLK_FREQ_72MHz/2);
const uint32_t SystemFrequency_APB2Clk  = SYSCLK_FREQ_72MHz;

    这就是在定义了CPU跑72M的时候,各个系统的速度了.他们分别是:硬件频率,系统时钟,AHB总线频率,APB1总线频率,APB2总线频率.再往下看,看到这个了:
#elif defined SYSCLK_FREQ_72MHz
static void SetSysClockTo72(void);

    这就是定义 72M 的时候,设置时钟的函数.这个函数被 SetSysClock ()函数调用,而SetSysClock ()函数则是被 SystemInit()函数调用.最后 SystemInit()函数,就是被你调用的了。

所以设置系统时钟的流程就是: 首先用户程序调用 SystemInit()函数,这是一个库函数,然后 SystemInit()函数里面,进行了一些寄存器必要的初始化后,就调用 SetSysClock()函数. SetSysClock()函数根据那个#define SYSCLK_FREQ_72MHz 72000000 的宏定义,知道了要调用SetSysClockTo72()这个函数,于是,就一堆麻烦而复杂的设置~!@#$%^然后,CPU跑起来了,而且速度是 72M.

STM32F107的时钟设置 STM32F107的时钟设置 STM32的库函数好像只有外部8M倍频到72M,现在用的板子外部25M的晶振,如何倍频到72M呢? 解决办法: STM32F107的时钟分4步的:      1> 25MHz先除5分频到5MHz;      2> 再8倍频到40MHz;      3> 再5分频到8MHz;      4> 再9倍频到72MHz.     STM... 阅读详情

相关推荐

STM32+RTC实现时钟无法设置时间以及掉电时间清零的问题

STM32+RTC实现时钟无法设置时间以及掉电时间清零的问题 最近在实现一个万年历的功能,其中遇到了无法设置时间以及掉电时间清零的问题。 .h文件代码如下: #ifndef __RTC_H #define __RTC_H //时间结构体 typedef struct { vu8 hour; vu8 min; vu8 sec; //公历日月年周 vu16 w_year; vu8 w_month; vu8 w_date; vu8 week; }_calendar_o

MaxWei 7638

STM32滴答定时器计时速率过高问题的解决

STM32滴答定时器计时速率过高问题的解决 问题: 使用滴答定时器的时候发现l实际中断速率是设定中断速率的4倍左右。 解决 如图,这2个函数的调用顺序错误,反过来即可。 原因 还没有找到原因,有知道原因的大神还请在评论区我指导一下,感谢。 ...

qq_41552491的博客 919

STM32系统时钟设置详解

本文主要详细介绍了STM32系统时钟的设置,主要是采用控制寄存器来进行操作的,介绍的较为详细,可以作为参考。

u014449366的博客 1万+

stm32中DMA,时钟树、内存总线、配置时钟时先配置flash->acr、通过寄存器点亮led

DMA STM32 DMA使用详解 1、画图Cortex-M3内部结构图,要体现相应的总线,并标注其作用。 Icode:程序存在Flash中,通过ICode(Instruction Code)总线与Cortex连接取指令。 Dcode:数据被存放在外设内部Flash(SRAM)中,通过DCode(Data Code)访问。 Systembus: 访问外设的寄存器,通常说的寄存器编程就是用这条总线的。 DMA: 数据变量拷贝时可以不占用CPU,通过DMA(Direct Memory Acc

weixin_42224577的博客 3068

STM32完全学习——系统时钟设置

首先我们知道STM32在上电初始化之后使用的是内部的HSI未经过分频直接通过SW供给给系统时钟,由于内部HSI存在较大的误差,因此我们在系统完成上电初始化,之后需要将STM32的时钟切换到外部HSE作为系统时钟,那么我们需要完成下面一些设置完成切换。首先我们需要打开外部HSE的震荡电路然后,等待外部震荡电路就绪后,在切换PLLTPRE为HSE的1分频,在设置PLLSRC为PLLXTPRE过来的时钟。然后设置PLLMUL倍频系数,然后打开PLL开关等待PLL稳定。

2401_83010734的博客 3615

STM32 系统时钟设置

1、使用3.5.0的库,系统自动设置为外部时钟8M的时钟,72M工作频率,无需再进行配置。 2、若要自定义时钟时不要用SystemInit函数,把启动代码的SystemInit函数注释掉,main函数加这个RCC配置函数 Reset_Handler   PROC                  EXPORT  Reset_Handler             [WEAK]   

gzw19900817的专栏 783

STM32时钟如何设置

STM32的时钟设置是确保微控制器以正确频率运行的关键步骤,涉及时钟源的选择、系统时钟的设置、外设时钟的配置等多个方面。

weixin_57010826的博客 1539

STM32的时钟设置

在实际使用时,应参考芯片的参考手册和对应的外设库文档来进行正确的时钟配置。在STM32微控制器中,时钟是一个关键的组成部分,它驱动着芯片的各种功能和外设。在STM32中,每个外设都有对应的时钟使能位,需要通过相应的寄存器来使能或禁用外设时钟。STM32微控制器提供了多种系统时钟源选择,常见的有内部时钟源(HSI),外部时钟源(HSE)和PLL(锁相环)时钟源。在STM32中,时钟频率的配置涉及到多个分频器和倍频器。通过调整这些分频器和倍频器的值,可以得到期望的时钟频率。

JeeVue的博客 431

【STM32Cube笔记】4-STM32Cube配置时钟设置

STM32H7系列时钟配置介绍

Amadues0_0的博客 1万+

STM32配置72M时钟时,为什么还要配置Flash?

本文介绍了STM32Flash时序、配置等问题。

如何适配自定义激光雷达数据到LIO-SAM:解决ring和time参数缺失问题

本文详细解析了如何将非标准激光雷达(如速腾、Livox)适配到LIO-SAM框架中,重点解决ring和time参数缺失问题。提供了从源码修改到通用适配中间件的多层级解决方案,并包含实机测试与性能调优指南,帮助开发者高效完成雷达数据适配。

weixin_42551227的博客 421

初学STM32系统时钟设置

在学习江科大教程示例的时候默认系统时钟是72MHZ,但是这个系统时钟是怎么过来的呢,通过时钟树以及相关的资料的学习可知,系统时钟它可以是内部RC时钟HSI 8MHZ通过锁相环倍频而来,也可以是外部晶振4-16MHZ通过锁相环倍频而来。但如果我们不想用外部时钟做为系统时钟的来源,而是内部时钟作为系统时钟该怎么设置呢?以外部晶振作为系统时钟如果不想设置为72MHZ,那么该怎么配置这个函数呢?最大是64MHZ,因此如果想达到72MHZ必须要使用外部时钟源。该配置能设置为内部时钟倍频后得到的36MHZ的系统时钟。

firewood2024的博客 1544

AI大模型学习(13)小白也能学会的10分钟豆包大模型的python教程1

豆包AI大模型API是字节跳动推出的智能对话接口服务,开发者可以通过简单的HTTP请求调用强大的AI能力,实现智能问答、内容生成等功能。

isoft888的专栏,致力于C#/python分享物联网、大数据,神经网络的等领域,欢迎讨论交流! 1001

STM32系统时钟设置过程

STM32系统时钟架构STM32采用多时钟源树状结构,核心时钟源包括:HSI(内部高速时钟):8MHz RC振荡器,精度较低但成本低HSE(外部高速时钟):4-26MHz晶振/陶瓷谐振器,精度高(需外部元件)LSI(内部低速时钟):40kHz RC振荡器,用于独立看门狗LSE(外部低速时钟):32.768kHz晶振,适合RTC应用。

2503_91737204的博客 647

STM32 IAP+APP合并Hex文件全自动脚本(Keil5一键生成)

本文详细介绍了一种基于Keil5开发环境的STM32 IAP与APP程序Hex文件全自动合并方案。通过编写批处理或Python脚本,并将其集成到Keil的编译后流程中,实现一键编译、自动合并,彻底解决手动操作繁琐易错的问题,极大提升STM32固件开发与远程升级的效率。

weixin_29191761的博客 306

sift、surf、orb 特征提取——三维重建

参考文章:[sift、surf、orb 特征提取及最优特征点匹配] 最近刚刚入门三维重建,在SFM算法的代码中注意到了feature_type( feature extraction method)这个参数,想细致了解一下这几种特征提取算法,在这里做一下笔记。 SIFT 简介 SIFT(Scale-Invariant Feature Transform)——尺度不变特征变换,是一种计算机视觉的特征提取算法,用来侦测与描述图像中的局部特征。 实质上,它是在不同的尺度空间上查找关键点(特征点),并计算出关键点的

bb_sy_w的博客 4362

STM32 时钟设置

时钟设置 时钟树介绍 有以下三种时钟可以作为系统时钟(SYSCLK): HSI 振荡器时钟 HSE 振荡器时钟 PLL 时钟 时钟树如下: OSC_OUT 和 OSC_IN 为外部晶振的接口,为 HSE(高速) 提供振荡源,接 4 -16 MHz 的晶振; OSC32_OUT 和 OSC32_IN 为外部晶振的接口,为 LSE(低速) 提供振荡源,接 32.768 kHz 的晶振。其...

hc372893308的博客 907

告别复杂配置:利用原生DDNS实现IPv6直连群晖的极简指南

本文详细介绍了如何利用原生DDNS实现IPv6直连群晖NAS的极简方法,告别复杂配置。从检查IPv6网络环境、路由器防火墙设置到群晖DDNS配置,一步步指导用户完成设置,并分享移动网络下的使用体验和安全防护建议,帮助用户轻松实现远程访问。

weixin_30918633的博客 414

STM32读写RTC内部时钟外设,设置和显示时钟

第二步:启动RTC的时钟,使用RCC模块里的RCC_LSEConfig函数,开启LSE的时 钟。第六步:配置CNT的值(给RTC一个初始时间)需要闹钟的话,配置个闹钟;今天学习了STM32单片机的内部时钟外设,学会了更改内部时钟和提取时钟数值的操作,只要后备电池有电,该时钟就会一直走,时间不会复位,哪怕没有给单片机供电。第三步:把结构体中的时间存放到我们指定的全局变量数组中。第二步:把时间戳转换成时间,存放到结构体中。

腹有诗词气自华 2173

如何处理NC数据?(Python和IDL语言实现)

如何处理NC数据?(Python和IDL语言实现) NetCDF(network Common Data Form)网络通用数据格式是一种面向数组型并适于网络共享的数据的描述和编码标准。目前,NetCDF广泛应用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。用户可以借助多种方式方便地管理和操作 NetCDF 数据集。(参考自:https://zhuanlan.zhihu.com/p/129351199) 在我看来,nc和hdf有异曲同工之妙,我用的数据以hdf结构为主(HDF:层次文件格式,相当于

zhanglingfeng1的博客 4636

Hindsight 内存爆炸 4 个词排查清单:9,284 条 6 成是 SSH 调试日志——Agent 标签系统的实战复盘

9,284 条记忆里 66% 是 SSH 调试日志。4 个标签被滥用=0 区分度。3 个 entity_labels + retain_mission + retain_every_n_turns 配置把噪声压回 5%——附 PATCH 脚本和实测前后数据。

Starry-SkyJing的博客 57

stm32程序怎么设置apb2总线时钟_一目了然!图文教你理解单片机STM32时钟

PCB布板一些简易常用规则,你不得不看!如何将微小型PCB线圈用做电感式传感器元件?(点击上方红字,即可获取)众所周知STM32有5个时钟源HSI、HSE、LSI、LSE、PLL,其实他只有四个,因为从上图中可以看到PLL都是由HSI或HSE提供的。其中,高速时钟(HSE和HSI)提供给芯片主体的主时钟.低速时钟(LSE和LSI)只是提供给芯片中的RTC(实时时钟)及独立看门狗使用,图中...

weixin_39927683的博客 3085

二十八.国民技术MCU开发之UID获取与应用

在国民NT MCU中均有一个96位和128位的唯一设备标识符,其中UCID128 位, UID 为 96 位。手册中描述的作用是:通常用来做为序列号或作为密码,在编写闪存时,将此唯一标识与软件加解密算法相结合,进一步提高代码在闪存存储器内的安全性,也可用于激活带安全功能的自举程序(SecureBootloader)。UCID 和 UID,遵守国民技术芯片序列号定义,它包含芯片生产及版本相关信息。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 1677

STM32 RTC设置时钟时,用BCD码设置和BIN码设置有什么区别

STM32 RTC设置时钟时,用BCD码设置和BIN码设置有什么区别

m0_68510271的博客 3523

深度学习工具包 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")

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

上一篇: stm32F 记录--建工程注意
pcbdddcz
博客等级 码龄15年 0粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值