STM32端口IO方向设置问题

STM32寄存器_GPIO操作 gpio寄存器 阅读详情

例程:STM32F103系列 I2C软件模拟实验(mini板)

问题:下面两行关于“IO方向”的代码不太明白。

//IO 方向设置
#define SDA_IN() {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=8<<12;}
#define SDA_OUT() {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=3<<12;}

 
  • 1
  • 2
  • 3

进过研读开发手册大概解决了这个问题。

STM32 的 IO 口可以由软件配置成如下 8 种模式:
1、输入浮空
2、输入上拉
3、输入下拉
4、模拟输入
5、开漏输出
6、推挽输出
7、推挽式复用功能
8、开漏复用功能

每个 IO 口可以自由编程,但 IO 口寄存器必须要按 32 位字被访问。STM32 的很多 IO 口都是 5V 兼容的,这些 IO 口在与 5V 电平的外设连接的时候很有优势,具体哪些 IO 口是 5V 兼容的,可以从该芯片的数据手册管脚描述章节查到(I/O Level 标 FT 的就是 5V 电平兼容的)。STM32 的每个 IO 端口都有 7 个寄存器来控制。他们分别是:

配置模式的 2 个 32 位的端口配置寄存器 CRL 和 CRH;
2 个 32 位的数据寄存器 IDR 和 ODR;
1 个 32 位的置位/复位寄存器BSRR;
一个 16 位的复位寄存器 BRR;
1 个 32 位的锁存寄存器 LCKR;
我们常用的 IO 端口寄存器只有 4 个:CRL、CRH、IDR、ODR。CRL 和 CRH 控制着每个 IO 口的模式及输出速率。

STM32 的 IO 口位配置表如表所示:

STM32 输出模式配置如表 :

接下来我们看看端口低配置寄存器 CRL 的描述

STM32 的 CRL 控制着每组 IO 端口(A~G)的低 8 位的模式。每个 IO 端口占用 CRL 的 4 个位,高两位为 CNF,低两位为 MODE。

换句话说我们要控制PA0,就只要这样写:

GPIOA->CRL&=0XFFFFFFF0;
//GPIOA->CRL=GPIOA->CRL & 0b1111 1111 1111 1111 1111 1111 1111 0000;

 
  • 1
  • 2

把PA0设置为输入就要这样写:

GPIOA->CRL|=8<<0;
//GPIOA->CRL=GPIOA->CRL|(0b1000)<<0;

 
  • 1
  • 2

合起来控制PA0为输入就是这样写:

GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=8<<0;

 
  • 1

PA0为输入(上/下拉)

GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=8<<0;

 
  • 1

PA1为输入(上/下拉)

GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=8<<4;

 
  • 1

PA2为输入(上/下拉)

GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=8<<8;

 
  • 1

PA3为输入(上/下拉)

GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=8<<12;

 
  • 1

PA4为输入(上/下拉)

GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=8<<16;

 
  • 1

PA5为输入(上/下拉)

GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=8<<20;

 
  • 1

PA6为输入(上/下拉)

GPIOA->CRL&=0XF0FFFFFF;GPIOA->CRL|=8<<24;

 
  • 1

PA7为输入(上/下拉)

GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=8<<28;

 
  • 1

同理设置为输出就是

PA0为输出(通用推挽输出50MHZ)

GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=3<<0;

 
  • 1

PA1为输出(通用推挽输出50MHZ)

GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=3<<4;

 
  • 1

PA2为输出(通用推挽输出50MHZ)

GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=3<<8;

 
  • 1

PA3为输出(通用推挽输出50MHZ)

GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=3<<12;

 
  • 1

PA4为输出(通用推挽输出50MHZ)

GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=3<<16;

 
  • 1

PA5为输出(通用推挽输出50MHZ)

GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=3<<20;

 
  • 1

PA6为输出(通用推挽输出50MHZ)

GPIOA->CRL&=0XF0FFFFFF;GPIOA->CRL|=3<<24;

 
  • 1

PA7为输出(通用推挽输出50MHZ)

GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=3<<28;

 
  • 1

PA8为输入(上/下拉)

GPIOA->CRH&=0XFFFFFFF0;GPIOA->CRH|=8<<0;

 
  • 1

PA9为输入(上/下拉)

GPIOA->CRH&=0XFFFFFF0F;GPIOA->CRH|=8<<4;

 
  • 1

PA10为输入(上/下拉)

GPIOA->CRH&=0XFFFFF0FF;GPIOA->CRH|=8<<8;

 
  • 1

PA11为输入(上/下拉)

GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=8<<12;

 
  • 1

PA12为输入(上/下拉)

GPIOA->CRH&=0XFFF0FFFF;GPIOA->CRH|=8<<16;

 
  • 1

PA13为输入(上/下拉)

GPIOA->CRH&=0XFF0FFFFF;GPIOA->CRH|=8<<20;

 
  • 1

PA14为输入(上/下拉)

GPIOA->CRH&=0XF0FFFFFF;GPIOA->CRH|=8<<24;

 
  • 1

PA15为输入(上/下拉)

GPIOA->CRH&=0X0FFFFFFF;GPIOA->CRH|=8<<28;

 
  • 1

同理设置为输出就是

PA8为输出(通用推挽输出50MHZ)

GPIOA->CRH&=0XFFFFFF0F;GPIOA->CRH|=3<<0;

 
  • 1

PA9为输出(通用推挽输出50MHZ)

GPIOA->CRH&=0XFFFFFF0F;GPIOA->CRH|=3<<4;

 
  • 1

PA10为输出(通用推挽输出50MHZ)

GPIOA->CRH&=0XFFFFF0FF;GPIOA->CRH|=3<<8;

 
  • 1

PA11为输出(通用推挽输出50MHZ)

GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=3<<12;

 
  • 1

PA12为输出(通用推挽输出50MHZ)

GPIOA->CRH&=0XFFF0FFFF;GPIOA->CRH|=3<<16;

 
  • 1

PA13为输出(通用推挽输出50MHZ)

GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRH|=3<<20;

 
  • 1

PA14为输出(通用推挽输出50MHZ)

GPIOA->CRH&=0XF0FFFFFF;GPIOA->CRH|=3<<24;

 
  • 1

PA15为输出(通用推挽输出50MHZ)

GPIOA->CRH&=0X0FFFFFFF;GPIOA->CRH|=3<<28;

 
  • 1

GPIOC->CRL&=0XFFFFFFF0;

GPIOx->CRL,这句话表示要操作GPIOx的低8位,就是Px0 ~ Px7
GPIOx->CRH,这句话表示要操作GPIOx的高8位,就是Px8 ~ Px15

所以GPIOC->CRL,这句话表示要操作GPIOC,

后面的0XFFFFFFF0,表示操作PC0;
0XFFFFFF0F,表示操作PC1;
0XFFFFF0FF,表示操作PC2;
0XFFFF0FFF,表示操作PC3;
0XFFF0FFFF,表示操作PC4;
0XFF0FFFFF,表示操作PC5;
0XF0FFFFFF,表示操作PC3;
0X0FFFFFFF,表示操作PC7;

合起来的意思就是:利用“与”运算,把这个位清0,同时不影响其他的位的设置。

GPIOC->CRL|=8<<0;

意思就是将1000左移0位(不移位),然后再与GPIOC->CRL进行“或”运算。

再根据原子的寄存器开发手册可以知道CNF0[10]、MODEO[00],对应的就是设置为上拉/输入模式。

======================================================
本文转载于果果小师弟的 STM32端口IO方向设置问题

交直流双电源无缝切换 使用ATmega32编写交直流双电源无缝切换,输入过欠压保护,输出过流保护。主要使用了单片机自带的比较器功能,比较器的一端使用了LT431制作的2.5V基准源。 -------------------------------------------------- #include "iom32v.h" #define WDR() asm("WDR") #define NOP() asm("NOP") unsigned char dcovervoltage_flag=0,acovervo... 阅读详情

相关推荐

STM32通用输入输出端口GPIO(IO口)

IO口:通用输入输出端口,通过软件控制其输入输出,STM32芯片的GPIO引脚与外部设备连接起来,从而可以实现与外部的通信,控制以及数据采集的功能;输出模式下,可控制端口输出高低电平,用于驱动LED,蜂鸣器,模拟通信协议输出时序等;当控制功率较大的设备可以加入驱动电路;输入模式下,可读取端口的高低电平或电压,用于读取按键输入,外接模块电平信号输入,ADC电压采集,模块通信协议接收数据等;

2201_75735537的博客 7341

STM32 宏定义 IO口方向设置

8<<8 即1000<<8 1000 0000 0000。GPIOC->CRH&=0XFFFF0FFF 即清零GPIOx(x= A..E)^11。GPIOC->CRH&=0XFFFF0FFF 即清零GPIOx(x= A..E)^11。3<<8 即11 0000 0000。MODE11[1:0]=11, 对应配置为 输出模式 最大速度50MHZ。CNF11[1:0]=00, 对应配置为 通用推挽输出模式。

u014040676的博客 1071

STM32的GPIO端口的八种模式解析

STM32的GPIO端口的八种模式解析。

牧以南歌的博客 5410

STM32-IO方向设置

通过IIC的IO方向设置,加深了对GPIO中CRH,CRL寄存器的一些理解

weixin_45857444的博客 2318

学习STM32(2)-IO-AFIO(复用功能IO和调试配置)

最近在学习STM32,在BZ上一篇关于的串口通信文章里有这么一段代码:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO,ENABLE); 当初是参考开发的里子写的一直对GPIOD或上“RCC_APB2Periph_AFIO”这句话的意思没搞懂,通过这几天在网上查找资料和看手册,终于高清楚了,不敢独享,希望能对跟我一...

huobengluantiao8 3255

STM32F103的GPIO双向模式

使用STM32实现51的双向IO口功能。调试成功可用

STM32端口IO方向设置问题的

例程:STM32F103系列 I2C软件模拟实验(mini板) 问题:下面两行关于“IO方向”的代码不太明白。 //IO 方向设置 #define SDA_IN() {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=8<<12;} #define SDA_OUT() {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=3<<12;} 进过研读开发手册大概解决了这个问题。 STM32 的 IO 口可以由

果果小师弟的博客 1万+

中文文本纠错实战:pycorrector与kenlm的安装与高效使用指南

本文提供了一份详细的中文文本纠错实战指南,重点介绍了pycorrector与kenlm的安装与高效使用方法。内容涵盖从编译环境准备、依赖安装到核心参数调优、批量处理及领域自适应等全流程,旨在帮助开发者快速部署并优化纠错系统,提升中文文本处理的质量与效率。

weixin_29055699的博客 411

STM32端口IO方向设置问题的IO方向设置问题

例程:STM32F103系列 I2C软件模拟实验(战舰例程)问题:下面两行关于“IO方向”的代码不太明白。之前一直看的例程都是库函数的代码,突然间冒出来两行寄存器的代码一时间手足无措。 #define SDA_IN() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)8<<28;}//Ⅰ #define S...

2772

从扇束到平行束:等角重排算法在CT重建中的核心原理与MATLAB实践

本文深入解析了CT图像重建中等角扇束重排算法的核心原理与MATLAB实现。通过将实际采集的扇束投影数据,利用几何映射和两次关键插值,转换为适用于经典滤波反投影算法的平行束数据,打通了高效重建的关键路径。文章结合Shepp-Logan模型仿真,提供了完整的MATLAB代码实践,并分析了源-物距、采样率等关键参数对重建质量的影响。

cnn8visionary的博客 645

CMU开源NavRL:深度强化学习如何破解无人机动态避障难题?

卡内基梅隆大学(CMU)开源了NavRL框架,利用深度强化学习解决无人机在复杂环境中的动态避障难题。该框架通过创新的状态表示、多目标奖励函数设计以及独立的安全屏障机制,使无人机能够通过仿真训练自主学会灵活、安全的导航策略,并成功实现从仿真到真实环境的零样本迁移。

hope8的博客 720

warning: #61-D: integer operation result is out of range

integer operation result is out of range //Set GPIO Direction #define DHT22_IO_IN() {GPIOA-&gt;CRL &amp;= 0X0FFFFFFF;GPIOA-&gt;CRL |= (8 &lt;&lt; 4*7);} #define DHT22_IO_OUT() {GPIOA-&gt;CRL &amp;=...

零点开发的博客 1万+

Windows 必看!OpenClaw 一键安装教程|告别报错,一次成功不踩坑

OpenClaw 完整安装与配置的全流程教程

m0_70389289的博客 1085

如何设置STM32 IO端口输入输出

PA0为输入(上/下拉)习惯了PIC单片机的IO设置,就一个TRISx/PORTx/LATx 三个寄存器就搞定了,但应用到STM32时,调试ds18b20时,要设置IO读了ds18b20的数据,开始就有点蒙,看了规格书,感觉还是有点摸不着头脑,所以狂查资料,并写个笔记。//IO方向设置现在我要定义到PB6引脚,应该怎么定义呢?配置模式由2 个 32 位的端口配置寄存器 CRL 和 CRH,2 个 32 位的数据寄存器 IDR 和 ODR;1 个 32 位的置位/复位寄存器BSRR;

qq_57798018的博客 8567

第1部分 基础算法(提高篇)--第2章 二分与三分1439:【SCOI2010】传送带

1439:【SCOI2010】传送带 时间限制: 2000 ms 内存限制: 65536 KB 提交数: 372 通过数: 212 【题目描述】 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段。两条传送带分别为线段AB和线段CD。lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R。现在lxhgww想从A点走到D点,他想知道最少需要走多长时间。 【输入】 输入数据第一行是4个整数,表示A和B的坐标,分别为Ax,Ay,Bx,By 第二行是4个整

zqhf123的博客 834

github创建账号第一步始终出错

github创建账号总结:第一次注册GitHub,填好用户名邮箱密码后进入下一步就卡在哪里,上面还提示Unable to verify your captcha response等,进入网址的解决办法以及下载其他的浏览器也无法解决,用手机浏览器抱着试一试的心态竟然成功了,分享给大家。手机下载谷歌浏览器,进入GitHub正常注册,能向下继续,邮箱验证完以后再用电脑登陆就ok啦

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 4373

STM32IO端口相关配置

STM32 IO口可以配置的8种模式: 输入浮空; 输入上拉; 输入下拉; 模拟输入; 开漏输出; 推挽输出; 推挽输出 推挽式复用输出; 开漏复用功能; I/O 5V兼容: I/O Level 标 FT 的就是 5V 电平兼容的  ; I/O 控制寄存器说明: 2 个 32 位的端口配置寄存器 CRL 和 CRH; 2 个 32 位的数据寄存器 IDR 和 ODR; 1 个 32 位的置位/复位寄存器BSRR; 1个 16 位的复位寄存器 BRR; 1 个 32 位的锁存寄存器 LCKR。

gwh1010的博客 6960

模型预测控制(MPC)算法介绍

模型预测控制(Model Predictive Control,MPC)是一种先进的控制策略,广泛应用于工业过程控制、机器人控制、电力系统等领域。它基于系统的模型,通过滚动优化来预测系统未来的行为,并据此确定当前的最优控制输入。

AI的内部世界的博客 7168

STM32 IO端口对应的内阻

通过编程, 改变QR10的电阻从 50欧姆变化到5000欧姆,  测量每个阻值下电阻箱的电压,  实际上也是单片机IO口输出电压。在 输出电流 30mA 之前, 输出电压近似线性下降,  由这两个电压对应的变化电流可以计算出 IO 端口近似输出电阻为 22.2欧姆。这里绘制了不同输出电流下对应的输出等效串联电阻。将PB7置为低电平, QR10连接工作电源 3.3V 和PB7,  测试不同电阻下, 对应的电阻箱上的电压。在输出电流小于 30mA 下,  输出端口可以等效串联一个 25欧姆左右的电阻。

TSINGHUAJOKING 4362

Xilinx平台SRIO介绍(五)示例工程Example Design介绍

理解IP的使用,少不了Example Design的学习。

数字IC/FPGA杂货铺,找一找,或许有你想要的~ 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

STM32F1模拟I2C通信中寄存器操作IO方向详解

#关于软件模拟I2C通信IO方向设置史上最详细解答

枫华雪悦 3786

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

STM32的IO端口输出电流与工作电流

可以看到单片机工作电流的增加与IO口输出电流之间基本上是符合的。通过编程, 设置负载QR10不同的电阻,  进而可以对比 IO 不同的输出电流、电压下, 对应的工作电流的变化, 进而对比IO口的输出电流与工作电流的变化是对应的。文测试了单片机在不同的IO电阻负载下,  它的IO端口输出的电流,  与单片机的工作电流之间的关系。这个STM32单片机上午用于测试IO端口输出电阻,  有一个问题, 那就是当单片机IO端口设置为 高电平的时候,  它的IO输出的电流是否与单片机工作电流的增加是一一对应的。

TSINGHUAJOKING 7104

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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

STM32 IO 简介

STM32 IO 简介1.IO介绍2.仿真与下载 1.IO介绍 STM32 的 IO 口可以由软件配置成如下 8 种模式: 1、 输入浮空 2、 输入上拉 3、 输入下拉 4、 模拟输入 5、 开漏输出 6、 推挽输出 7、 推挽式复用功能 8、 开漏复用功能 每个 IO 口可以自由编程, 但 IO 口寄存器必须要按 32 位字被访问。 STM32 的很多 IO 口都 是 5V 兼容的,这些 IO...

Jack魏 2881

STM32学习笔记四——IO读取操作

本片博客是学习STM32零零散散的记录STM32怎么读取输出口电平参考链接 STM32怎么读取输出口电平 库函数操作,以PC13为例: GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13);//读取输入口PC13值 GPIO_ReadOutputDataBit (GPIOC,GPIO_Pin_13); //读取输入口PC13值 两个读取函数操作区别在于读取的寄存器不一...

繁华落尽心殇 1万+
上一篇: 使用STM32F103CBT6自制ST LINK V2-1多功能烧录器
下一篇: STM32 DHT11单总线I/O方向设置问题
Guard_Byte
博客等级 码龄5年 599粉丝 15原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值