在项目中,原来使用的是八根数据线,读取数据没有问题,在后来改用十六根地址线并把数据宽度改为十六位之后读出来的数据就很奇怪了,经过仔细分析师由于STM32的内外地址映射造成的,具体参照STM32技术参考手册中文翻译第十版的327页,根据我的理解叙述如下:
块1存储区被划分为4个NOR/PSRAM区,这四个区在内部地址上是连续排列的。但是实际上每个区共用的是同一组地址线与数据线,因此需要有内外的一个地址映射,因此在STM32中实际上有两个地址,一个是在内部访问的地址,另外一个是实际地址线输出的地址。
HADDR[27:0]对应的是需要转换到外部存储器的内部AHB地址线,其中HADDR[27:26]位用于选择四个存储块之一。
HADDR[25:0]包含外部存储器地址。HADDR是字节地址,而不同的外部存储器数据长度也不一样,因此在数据宽度为8位和16位时映射关系也不一样。
在数据宽度为8位时HADDR[25:0]与FSMC_A[25:0]对应相连,这时候在STM32中访问的地址和实际地址线产生的地址是一致的。而在16位数据宽度时HADDR[25:1]与FSMC_A[24:0]对应相连,HADDR[0]未接,这时候实际地址线上给出的地址为需要访问的偏移地址的一半。
在本系统中由于使用了高精度的16位AD,实际数据读取与处理也都是16位,为了快速访问STM32采用的就是16位数据宽度,因此需要针对两者的地址进行相应的映射。重新计算地址之后问题解决。
关键字:STM32 数据宽度 地址问题
引用地址:
STM32 在16位数据宽度下的地址问题
推荐阅读最新更新时间:2024-11-16 19:45
STM32为什么要有SysTick
STM32为什么要有SysTick?STM32里面有很多tim定时器,为什么还要有SysTick呢? 系统时基定时器 这个定时器是专用于实时操作系统,也可当成一个标准的递减计数器。它具有下述特性: ● 24位的递减计数器 ● 自动重加载功能 ● 当计数器为0时能产生一个可屏蔽系统中断 ● 可编程时钟源 这个里面的定时器是24位的,普廷的TIM定时器最多也就是16位的,如果想做长时间的延时,这个是不二的选择
[单片机]
stm32 C语言的数据类型说明
stm32编程过程经常定义变量类型,经常担心数据运算过程中 超过变量类型范围。因为在编程过程中,不同的CPU,其数据类型的意义各不相同,所以一定要注意相应变量数据类型的定义和转换,否则在计算中可能会出现不确定的错误。所以下面列出常见数据类型: 一、C语言数据类型 stm32使用的数据类型定义在 stm32f4xx.h中 整型定义: #include core_cm4.h /* Cortex-M4 processor and core peripherals */ #include system_stm32f4xx.h #include stdint.h /** @addtogroup Export
[单片机]
STM32关于USB的相关寄存器
这里要贴上STM32 USB相关的寄存器的具体设置,对学习STM32的USB很有帮助。对于涉及到寄存部分的代码,参考这些寄存器的说明,就可以差不多都懂了。由于网页贴不上表格,所以就截屏成图片贴上来,如果看不清楚,就下载图片去看 1.编程好习惯之变量定义: 定义变量时总是按变量类型所占空间大小来排序是最好的! 如果是只有某个函数使用些变量,而且你又需要在函数让函数退出时不被销毁,那么就使用static吧 2.编程好习惯之函数定义: 如果我们定义的C函数仅在此C文件中被调用那么加上static吧(适用于多文件编程) 如果我们想躲避C函数参数的类型检查,那 么K&R的函数定义声明方式还
[单片机]
一种基于μC/OS-III及STM32的多功能控制器
电动轨道车控制系统一般分为多个子系统,子系统受一个主控器控制。这样的结构设计繁琐,编程复杂。采用μC/OS-III操作系统、STM32F103RC微控制器、12864液晶屏、PVC按键、无线串口模块、锂电池等实现具有人机界面、无线串口功能的总线主控器。该控制器具有人机界面、轨道车主控器、遥控接收器、遥控面板等多种功能,并且能在不同项目中使用。μC/OS-III从官网上下载,文件名为Micrium_uC-Eval-STM32F107_uCOS-III,版本为V1.29.01.00. 1硬件结构 从系统接口看,该控制器具有显示、按键、无线收发、串口、485总线等接口,作遥控面板时用电池供电,内部具有电池和充电电路。硬件框图如图
[单片机]
STM32 - GPIO 的位带操作
我采用得是STM32F10RC 参考得是STM32普中科技的给出得例子:https://www.bilibili.com/video/av30149282/?p=45(这里给出网址) https://blog.csdn.net/bulebin/article/details/73730141 这个博文还可以 ps:在15中 是个hi用sbit 进行位带 1、位带介绍 什么是位带呢? stm32 中没有sbit, 所以我们采用的是位带别名区 (1) 通过访问Bit band Alias 他 来控制 bit Band ALias 的位 (2)位带区和位带别名区的转换 别名区地址=外设微带别名区的基地址
[单片机]
STM32串口中断、DMA接收的几点注意地方
1UART串口中断接收 使能UART串口中断之后,有接收到UART数据,进入中断,此时要清除RXNE接收标志位: 1.通过软件向该RXNE标志位写入零来清零; 2.通过对 USART_DR 寄存器执行读入操作将该位清零。 这里可以查看对应《参考手册》,一般我们选择第2种,通过读取UART串口数据来清零。 1.中断接收数据丢失 在UART串口中断函数中,或者更高优先级中断函数中长时间执行,导致接收丢失,所以,请勿在中断函数中长时间执行。 特别有些人,还在中断函数添加延时函数。实际应用中,只要不是特殊情况,比如测试某个功能可以添加延时函数,都不建议在中断函数添加延时函数。 2.ORE上溢错误 ORE上溢错误是什么意思呢? 可能很
[单片机]
意法半导体沿用STM32的DNA,新产品瞄准低成本应用
中国,2012年5月15日 ——横跨多重电子应用领域、全球领先的半导体供应商、世界领先的微控制器供应商意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)扩大已取得巨大成功的经过市场检验的包含300多款产品的 STM32® 微控制器产品阵容,推出全新的STM32 F0系列32位微控制器。新产品基于超低功耗的 ARM® Cortex™-M0处理器内核,整合增强的技术和功能,瞄准超低成本预算的应用。新系列微控制器缩短了采用8位和16位微控制器的设备与采用32位微控制器的设备之间的性能差距,能够在经济型用户终端产品上实现先进且复杂的功能。 Cortex-M处理器对电子产品设计进行了一次重大革命,它重
[单片机]