历史上的今天
返回首页

历史上的今天

今天是:2024年11月03日(星期日)

2021年11月03日 | DMA的外设地址简单说明

2021-11-03 来源:eefocus

说成外设寄存器地址不就完了么,和内核的总线地址又容易混起来,总之dma的源和目的地址,涉及到外设的,就是外设寄存器,iis数据要从总线跑到外设寄存器上,dma才能亮剑

关于在STM32的DMA中使用外设地址

在使用的DMA的时候,有时候需要将外设的地址作为源地址或者目的地址,对于初学者来说这个地址在哪边确定有点犯难,这篇文章就来告诉大家如何快速找到你需要的地址。

我们先看一个DMA初始化的例子:

//DMA初始化函数
void UsartDMA_Init(void)
{
DMA_InitTypeDef DMA_InitStructure;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);//使能DMA时钟

DMA_DeInit(DMA1_Channel7);//串口2的DMA传输通道是通道7

DMA_InitStructure.DMA_PeripheralBaseAddr = USART2_DR_Base;
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)SendBuff;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;//外设作为DMA的目的端
DMA_InitStructure.DMA_BufferSize = SENDBUFF_SIZE;//传输大小
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设地址不增加
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//内存地址自增1
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;//DMA_Mode_Normal(只传送一次), DMA_Mode_Circular (不停地传送)
DMA_InitStructure.DMA_Priority = DMA_Priority_High;//(DMA传送优先级为中等)
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel7, &DMA_InitStructure);
}

在上述代码中有一个USART2_DR_Base,这个就是我们需要的地址,也就是USART2的DR寄存器地址,这个地址有两种方法得到:

第一种:

//串口2DR寄存器的地址#define USART2_DR_Base (u32)&USART2->DR


这种方法比较讨巧,使用起来也方便,学过寄存器操作STM32的亲们还是很容易理解为什么这样可以得到我们想要的结果。

第二种:

//串口2DR寄存器的地址#define USART2_DR_Base (u32)0x40004404


这就是自己通过手册来查找到这个寄存器的地址,输入一大串数字,这种方法比较费时费事。

那么亲们会问,如何快速的找到这个寄存器的地址,首先打开参考手册,移动到2.3节---寄存器映像,也就是第28页,这里列出了STM32内部地址的划分,找到你要的外设基地址,例如USART2的基地址为0x40004400。然后再你需要的外设关于寄存器的地方找到寄存器的偏移地址,如USART的DR寄存器的偏移地址为04,基地址加偏移地址就得到这个寄存器的地址了。


其它外设一样查找,个人还是建议使用第一种方法。


推荐阅读

史海拾趣

Gwconnect (Molex)公司的发展小趣事
由于元件参数可能受温度、湿度等环境因素影响,电路的稳定性相对较差。
台湾町洋(dinkle)公司的发展小趣事

町洋注重企业文化建设,倡导以人为本的管理理念。公司为员工提供了良好的工作环境和福利待遇,并积极开展各种培训和学习活动,帮助员工提升自身素质和专业技能。这种关注员工成长和发展的企业文化使得町洋的凝聚力不断增强,为公司的持续发展提供了有力保障。

FTDI [Future Technology Devices International Ltd.]公司的发展小趣事

随着市场需求的变化,FTDI并未满足于初期的成就,而是积极拓展产品线。他们推出了如MM232R和USB-COM232-PLUS1等接口产品,这些产品在连接性和兼容性上展现了公司强大的技术实力和创新精神。同时,FTDI还涉足USB和其他通信协议的转换领域,满足了多样化的市场需求,进一步巩固了其在电子行业中的地位。

G-Mag Usa公司的发展小趣事

为了进一步提升市场竞争力,G-Mag在2015年启动了国际化布局战略。公司首先在欧洲市场设立了研发中心和销售中心,随后又逐步拓展到亚洲、非洲等多个地区。在国际化过程中,G-Mag注重本土化运营和品牌建设,根据不同地区的市场特点和消费者需求推出定制化产品和服务。同时,G-Mag还积极参与国际展会和交流活动,提升品牌知名度和影响力。通过国际化布局,G-Mag成功打开了全球市场的大门,实现了业务的快速增长和品牌的全球化发展。

Elec & Eltek公司的发展小趣事

Eltek公司是一家专注于电力电子技术的公司,成立于20世纪中期。创始人王刚(化名)意识到电力电子技术对于提高能源利用效率的重要性,于是决定投身这一领域。在他的带领下,Eltek公司不断研发出高效、可靠的电力电子产品,如变频器、逆变器等。随着可再生能源技术的兴起,Eltek公司抓住机遇,将电力电子技术应用于可再生能源领域,如太阳能、风能等。这一创新举措让Eltek公司在可再生能源领域取得了显著的成绩。

Doodle Labs公司的发展小趣事

为了进一步扩大市场份额,Doodle Labs开始寻求国际合作和业务拓展。公司与多家国际知名的无人机制造商和物联网企业建立了合作关系,共同开发新的解决方案和产品。同时,Doodle Labs还积极开拓国际市场,将产品出口到欧洲、北美等地区。这些努力不仅为公司带来了更多的商业机会,也提升了Doodle Labs在国际市场的知名度。

问答坊 | AI 解惑

电源规范

很好的资料…

查看全部问答>

毕业设计——万年历全套资料

附件里有万年历的全套资料,只为了和大家共享 [ 本帖最后由 zhaobqing163 于 2008-11-29 18:22 编辑 ]…

查看全部问答>

应网友之邀,再发一个51做的数字钟的资料

应网友之邀,再发一个51做的数字钟的资…

查看全部问答>

浅析视频监视器高清化的三种转变

随着视频监控技术的高速发展,用户对于视频监控产品的要求也在不断提高,功能要求更加完善、稳定,性能要求更加清晰、准确。如何能够迅速准确的找到目标……?所有这些问题都需要高清视频监控产品来解决。高清化,从我做起——彩色,液晶,大屏拼接 ...…

查看全部问答>

请教如何用tornado编写类似windows下的dll文件

请教如何用tornado编写类似windows下的dll文件,然后在vxworks下被主程序调用。 具体如下:我想用tornado写一个算法,然后封装成类似windows下的dll,然后供vxworks平台下的主程序调用,请教如何实现,请大家提供一点思路,谢谢!…

查看全部问答>

各位高手帮帮忙

找了数月才找到一份工作 老板让我用vc做一个数据采集,就是给我个终端,让我采集   请问该从哪突破!    不胜感激…

查看全部问答>

【原创】在VC/eVC中实现VB中的Split函数

VB中,sItem = Split(s, \",\")   CString s; CString sItem[13]; byte pItem; byte p1, p2; s += \",\"; p1 = 0; pItem = 0; for (p2 = 0; p2 < s.GetLength(); p2++) {         if (s.GetAt(p2) == \',\') &nb ...…

查看全部问答>

IO口损坏的问题

                                 请问一下版主。我在用STM32时,发现有个问题,CPU的IO口有时会莫名其妙地坏掉。而且一般都是对地短路。这可能是哪 ...…

查看全部问答>

谁要9B96的内存地址分配图

谁要9B96的内存地址分配图…

查看全部问答>

MSP-EXP430FR5739的例程及SCH

MSP-EXP430FR5739的例程及SCH…

查看全部问答>