寄存器映射及地址计算(STM32F407)

寄存器PLC地址与寄存器modbus协议地址 寄存器PLC地址指存放于控制器中的地址,这些控制器可以是PLC,也可以使触摸屏,或是文本显示器。PLC地址一般采用10进制描述,共有5位,其中第一位代码寄存器类型。第一位数字和寄存器类型的对应关系如表1所示。PLC地址例如40001、30002等。 寄存器modbus协议地址指通信时使用的寄存器地址,在实际编程中,由于寄存器PLC地址前缀的区分作用,所以只需说明后4位数... 阅读详情
AI摘要

本文介绍了STM32F407寄存器映射的基本概念,以电灯开关为例解释了寄存器映射。还说明了寄存器描述可在单片机参考手册查找,以GPIO的ODR寄存器为例解读其描述。给出寄存器映射举例,最后阐述寄存器地址由总线基地址、外设偏移量和寄存器偏移量决定,并给出计算公式。

上篇文章介绍了存储器映射(存储器映射(STM32F407)-优快云博客),本文介绍寄存器映射的基本概念。

1、寄存器映射简介

寄存器是一类特殊的存储器,它的每个位都有特定的功能,可以实现对外设/功能的控制,给寄存器的地址命名的过程就叫寄存器映射。

举个简单的例子,大家家里面的纸张就好比通用存储器,用来记录数据是没问题的,但是不会有具体的动作,只能做记录,而你家里面的电灯开关,就好比寄存器。假设你家有8个灯, 就有8个开关(相当于一个8位寄存器),这些开关可以记录状态,同时还能让电灯点亮/关闭, 是会产生具体动作的。为了方便区分和使用,我们会给每个开关命名,比如厨房开关、大厅开关、卧室开关等,这个命名过程,就是映射。我们给STM32的寄存器命名,就是寄存器映射。

2、寄存器描述解读

寄存器描述是指对计算机中寄存器的功能、特性、使用方式等进行详细说明的文档或信息。寄存器描述可以在对应单片机的参考手册中查找。

以GPIO的ODR寄存器为例,其参考手册的描述如下图所示:

①寄存器名字

每个寄存器都有一个对应的名字,以简单表达其作用,并方便记忆,这里GPIOx_ODR表示寄存器英文名。例如,若x可以从A~E,说明有5个这样的寄存器,上图中,x=A~I,说明有9个这样的寄存器。

嵌入式软件开发必备知识—存储器和寄存器器映射(重要) 阅读详情

相关推荐

STM32学习——什么是寄存器(存储器映射和寄存器映射)

STM32芯片里面有什么 我们看到的STM32芯片是已经封装好阿成品,主要由内核和片上外设组成。若与电脑类比,内核与外设就如同电脑上的CPU和主板、内存、显卡、硬盘的关系。 STM32F103采用的是Cortex-M3内核,内核即CPU,由ARM公司设计,ARM公司并不生产芯片,而是出售其芯片技术授权。芯片生产厂商(SOC)如ST、TI、Freescale,负责在内核之外设计部件并生产整个芯片,这些内核之外的部件被称为核外外设或片上外设。如GPIO、USART(串口)、I2C、SPI等都叫片上外设。具体

qq_43460068的博客 8861

深入解析STM32F407寄存器地址计算与映射实践

本文深入解析STM32F407寄存器地址计算与映射实践,通过生活化比喻和实战案例,详细讲解寄存器映射的本质、地址计算方法和结构体映射技巧。文章特别针对STM32F407的GPIO寄存器进行分步推演,帮助开发者掌握底层硬件操作的核心技术,提升嵌入式开发效率。

weixin_29185493的博客 120

嵌入式开发四:STM32 基础知识入门

define 是 C 语言中的预处理命令,它用于宏定义,可以提高源代码的可读性,为编程提供方 便。常见的格式:#define 标识符 字符串“标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等。例如: #define HSE_VALUE 8000000U#define PLL_M 8 //定义标识符 PLL_M 的值为 8。定义标识符 HSE_VALUE 的值为 8000000,数字后的 U 表示 unsigned 的意思。

weixin_47040031的博客 3805

GD32F407替代STM32F407实战避坑指南

GD32F407与STM32F407虽同属Cortex-M4内核且引脚兼容,但本质是两套独立设计的MCU架构:时钟树结构、外设寄存器映射、Flash编程算法及中断优先级分组均存在底层差异。这些差异导致直接移植HAL库代码极易引发UART乱码、ADC漂移、以太网握手失败等隐蔽性故障。技术价值在于规避‘兼容假象’,通过Keil环境适配、启动文件替换、时钟参数重算、SWD调试优化等工程化手段实现稳定迁移。典型应用场景包括缺货应急替代、国产化BOM切换及工业控制设备升级。本文聚焦GD32F407替代STM32F40

weixin_29195217的博客 310

STM32寄存器映射原理:从地址到结构体的嵌入式底层编程

寄存器映射是嵌入式系统中硬件控制的核心机制,指将外设物理地址空间抽象为可编程的数据结构。其本质基于内存映射I/O原理,通过总线基地址与偏移量分层计算实现地址定位,并借助C语言结构体完成硬件寄存器布局到软件类型的精确对齐。该技术显著提升代码可读性、可维护性与跨平台兼容性,广泛应用于STM32等ARM Cortex-M系列MCU的GPIO、USART、RCC等外设驱动开发。结合位操作与标准C关键字(如typedef、#define、volatile),可构建安全、高效、可扩展的底层驱动框架。本文深入解析从51单

weixin_42103128的博客 31

STM32F407与W5500的SPI驱动详解:帧格式、寄存器映射与避坑指南

嵌入式以太网开发中,协议栈的实现方式往往决定项目周期与稳定性。相比在MCU上移植lwIP等软件协议栈,采用W5500这类集成TCP/IP硬件协议栈的芯片,通过SPI接口即可将UDP、TCP、DHCP等协议处理卸载到外部芯片,大幅简化主控逻辑。其核心原理是MCU仅需按SPI帧格式读写内部寄存器与缓冲区,即可完成网络数据收发。这种方案在工业物联网、设备远程监控等场景中应用广泛,既能降低开发门槛,又能保证通信可靠性。本文以STM32F407搭配W5500为例,详细拆解SPI通信机制、寄存器地址分配、Socket收

weixin_29192365的博客 274

STM32F407单片机内存管理实验源码教程

STM32F407是STMicroelectronics(意法半导体)生产的一款高性能Cortex-M4微控制器。理解其内存结构和容量分配对于开发高效、稳定的应用程序至关重要。该微控制器具备多种内存类型,包括静态随机存取存储器(SRAM)、闪存(Flash)以及多种外设。

weixin_42527589的博客 894

STM32F407微控制器数据手册详细解读

Cortex-M4是ARM公司设计的一款高效、低功耗的32位微处理器内核,广泛应用于微控制器(MCU)领域。它继承了Cortex-M系列处理器的实时处理能力,并且增加了数字信号处理(DSP)功能,使其能够处理更复杂的算法。本章节深入讲解了数字外设的分类与特点以及高级定时器的设计与实现,涉及定时器与计数器、串行通信接口的详细应用,以及PWM波形生成技术和死区时间控制等高级功能。通过代码示例和逻辑分析,我们不仅了解了如何配置和使用这些功能,而且掌握了其背后的原理。

weixin_32661831的博客 2777

STM32F407ZET6--01嵌入式开发基础知识

HAL 库是 ST 为 STM32 最新推出的 抽象层嵌入式软件,可以更好的 确保跨 STM32 产品的最大 可移植性。

2502_90801893的博客 721

零基础也能懂的Arduino ESP32离线安装包图文教程

手把手教你完成Arduino ESP32离线安装包的配置,无需联网也能快速搭建开发环境,适合初学者和网络受限用户,轻松实现arduino esp32离线安装包部署。

weixin_36213081的博客 2674

Android开发者必看:5分钟搞定DeepSeek API接入(附完整代码示例)

本文为Android开发者提供快速接入DeepSeek API的完整指南,包含环境配置、网络层设计、请求体构建等关键步骤,并附有详细代码示例。通过工程化实践,帮助开发者高效集成AI对话、代码生成等高级功能,提升移动应用竞争力。

bush的博客 535

C# 调用halcon中visualize_object_model_3d显示点云

3.1 判断线程是否为空,如果为空,则新创建,如果不为空,则中断线程,清空窗口后再次执行创建操作3.2 创建:调用show()方法实例化显示类的对象,传入显示参数,将线程testvisual 绑定 在 类对象的action方法上(此处action方法内部,只调用了visualize_object_model_3d算子)3.3 启动线程。

weixin_42362219的博客 1403

virtuoso--DFF

27-实验课-std_cell2

qq_61440044的博客 2005

Open3D 点云DBSCAN聚类算法

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,能够识别任意形状的聚类,并处理噪声数据。

纵马踏花向自由 1833

LeetCode 面试经典 150 题回顾

最经典 150 题,掌握面试所有知识点 面试经典 150 题 : 题目分析、解题思路、复杂度分析、代码展示

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 8万+

【网络基础2】路由器的 “两扇门”:二层接口和三层接口到底有啥不一样?

家里的路由器背后总有几个网线接口,有的标着 “LAN”,有的标着 “WAN”;公司机房的路由器上,接口更是五花八门,有的插着网线,有的连着光纤,旁边还贴着 “GE0/0/1”“Eth-Trunk1” 这样的标签。你可能会想:不就是插网线的地方吗?有啥区别?其实,这些接口分 “二层接口” 和 “三层接口”,它们的作用差得远了 —— 就像你家的门,有的是 “小区内的单元门”(只通小区内部),有的是 “小区的大门”(能通往外面的世界)。接下来,咱们用大白话 + 生活例子,一点点把这两种接口讲透。

jundao1997的专栏 565

数据挖掘实战-基于长短期记忆网络(LSTM)的黄金价格预测模型 | 97% 准确度

本实验基于Kaggle上提供的从2013年到2023年的黄金价格数据集,运用长短期记忆网络(LSTM)构建了黄金价格预测模型。该数据集详细记录了每日的黄金价格信息,包括开盘价、收盘价、高点、低点和交易量等,为模型的训练提供了丰富的数据支持。

m0_64336780的博客 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

上一篇: 存储器映射(STM32F407)
下一篇: 2010_阅读_Text1&Text2_原文
&AtTiTuDe;
博客等级 码龄6年 1074粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值