历史上的今天
返回首页

历史上的今天

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

正在发生

2019年09月11日 | STM32F4 HAL库DMA学习

2019-09-11 来源:eefocus

用了一段时间HAL库,不知道是不是用外设固件库时间长一点的原因,个人感觉没有固件库来的直接。看DMA部分看的有点乱,捋一下。


DMA的使用方法及细节直接看官方的手册就可以了,注意的是如果原地址和目的地址的数据长度不一样的话只能使用FIFO模式,直接模式下原地址和目的地址的数据长度必须一致。


主要是简单整理一下使用DMA的初始化过程,以串口发送使用DMA为例:


 (1)  定义一个外设的句柄,对外设的基本参数、IO、时钟、中断等进行初始化。


UART_HandleTypeDef UART1_Handler; 


               ....

 HAL_UART_Init(&UART1_Handler);

调用外设的初始化函数完成对外设的初始化


 (2)  定义一个 DMA的句柄,对DMA的数据流、通道、传输方向、数据长度等基本参数进行初始化


DMA_HandleTypeDef     UART1TxDMA_Handler; 


                      ....

HAL_DMA_Init(&UART1TxDMA_Handler);


调用初始化函数完成对句柄的填充。


 (3)  使用HAL库中对DMA的一个宏定义完成外设发送DMAT或者接收DMAR和第二步的DMA句柄进行关联


__HAL_LINKDMA(&UART1_Handler,hdmatx,UART1TxDMA_Handler);           

  每个外设的句柄结构体中都一个该外设关于DMA相关的设置:


 DMA_HandleTypeDef      *hdmatx;          UART TX 的DMA句柄参数

 DMA_HandleTypeDef      *hdmarx;          UART RX 的DMA句柄参数


 使用__HAL_LINKDMA 宏定义的作用就是将第二步初始化的DMA句柄赋值给外设的发送或者接收DMA句柄,并且外设的句柄(第一步定义的)赋给DMA结构体中的.parent 参数,调用DMA的函数都会间接调用 

             

 UART1TxDMA_Handler.parent->hdmatx  

            

 对DMA的个别寄存器的参数进行填充,比如调用 HAL_DMA_Start()函数就会调用DMA_SetConfig()函数配置数据个数、源地址、目的地址等。而hdmatx 和第二步的DMA句柄是一模一样的,感觉最后转了一圈又转回会来了。。。

  (4)  外设初始化、DMA初始化、外设和DMA进行关联、外设使能DMA发送或者接收、DMA调用函数开始发送或者接收。


 个人感觉有时候HAL库的确有些冗余了,这时候可能就需要部分进行寄存器操作了。


二、使用过程总结


1、传输数据数目设置


 注意传输数据的个数的设置:如果源的数据宽度和目标数据宽度不一样,即PSIZE、MSIZE不相等时,DMA_SXNDTR寄存器配置要传输的数据项数目的宽度等于外设总线的宽度(和传输方向无关)。例如外设的宽度设置为字,存储器的宽度设置为半字,假如要传输100个字节的数据,NDTR寄存器配置要传输的数据数目 100/4.外设宽度是字=4个字节。


2、DMA初始化


 HAL_DMA_Init() ;   初始化函数中会使能所有的中断,如果不想用中断,可以在初始化之后关闭。初始化完成后会自动使能流的DMA。 




三、调试过程问题解决


直接模式中出现FIFO溢出错误,可能是DMA的源地址或者目的地址设置有问题。


推荐阅读

史海拾趣

Handok Co Ltd公司的发展小趣事

在电子行业中,Hamlin(现为Littelfuse的一部分)的发展充满了创新与挑战的故事。以下是五个关于Hamlin如何在Littelfuse旗下发展壮大的实际案例:

1. 从独立到并购:Hamlin的加入

Hamlin,一家在传感器领域享有盛誉的公司,于2012年被Littelfuse收购。这一战略举措标志着Littelfuse在电路保护基础上,进一步向传感器与功率器件领域扩展。Hamlin的加入为Littelfuse带来了丰富的传感器技术,特别是其在磁性传感器方面的专长,使得Littelfuse能够为客户提供更全面的解决方案。这次并购不仅增强了Littelfuse在汽车电子和工业市场的竞争力,也为其后续的技术创新和市场拓展奠定了坚实基础。

2. 创新引领:55300系列传感器的诞生

Hamlin在加入Littelfuse后,继续发挥其创新优势,推出了55300系列非接触式磁性传感器。这一系列传感器克服了传统干簧开关在机械磨损和污染方面的限制,具有长寿命、高速度、不受恶劣环境影响的特点。其广泛的工作温度范围和集成的汽车级EMI/EMC测试,使得这些传感器在汽车和工业市场得到了广泛应用,如液压缸位置、变速箱换挡位置等关键控制领域。

3. 技术突破:Hamlin在车用传感器领域的贡献

随着汽车行业的快速发展,对安全、节能和舒适性的要求日益提高。Hamlin利用其在磁感应技术上的专长,为Littelfuse的车用传感器产品线增添了新的活力。Hamlin的车用传感器涵盖了安全类、动力总成、排放和舒适性四大类别,通过检测转速、位移、位置和角度等参数,为汽车提供了精准的监控和控制。这些传感器不仅提升了汽车的性能和安全性,也满足了消费者对驾驶体验的高要求。

4. 市场拓展:Littelfuse与Hamlin的全球化战略

在Hamlin的助力下,Littelfuse加快了全球化步伐。通过在欧洲、亚洲和美国的持续扩张,Littelfuse的产品和服务覆盖了更广泛的市场。Hamlin的传感器技术成为了Littelfuse在全球市场上的一张重要名片,吸引了众多国际客户的关注。同时,Littelfuse也加大了对新兴市场的投入,特别是在中国市场,通过与本土合作伙伴的紧密合作,进一步提升了品牌影响力和市场份额。

5. 持续增长与未来展望

自Hamlin加入以来,Littelfuse的业绩实现了持续增长。通过不断的研发投入和市场拓展,Littelfuse在电路保护、传感器与功率器件领域均取得了显著成就。展望未来,Littelfuse将继续依托Hamlin等子公司的技术优势和市场资源,推动产品创新和市场升级。同时,随着新能源汽车、物联网等新兴领域的快速发展,Littelfuse将迎来更多的发展机遇和挑战,为电子行业的进步贡献更多力量。

FOX [Fox Electronics]公司的发展小趣事

为了进一步扩大市场份额和增强技术实力,Fox Electronics在近年来进行了多起战略并购和合作。公司通过收购具有核心竞争力的中小型企业,快速获取了新技术、新产品和客户资源。同时,Fox Electronics还与行业内的知名企业和研究机构建立了长期合作关系,共同开展技术研发和市场推广。这些并购与合作不仅加速了公司的业务扩张,还提升了其在全球电子行业的影响力。

厦门法拉(faratronic)公司的发展小趣事

FMI公司成立于1971年,作为标准通信公司的受控供应商,公司自成立之初便专注于为通信市场提供快速交货和严格公差的石英晶体及晶体振荡器。在成立初期,FMI面临着市场竞争激烈和技术挑战的双重压力,但公司凭借其卓越的产品质量和快速响应客户需求的能力,逐渐在行业中站稳脚跟。通过不断的技术创新和产品优化,FMI逐渐扩大了其市场份额,为后续的快速发展奠定了坚实基础。

AMI [American Megatrends Inc]公司的发展小趣事

随着电子技术的飞速发展,FMI公司紧跟时代步伐,不断研发新技术和新产品。在1992年,FMI成功将频率管理扩展到OEM市场,进一步拓宽了其业务范围。这一举措不仅增强了公司的市场竞争力,还为公司带来了更多的商业机会。通过为计算机外设、工业仪器、局域网/广域网等多个领域提供定制化的频率控制解决方案,FMI逐渐成为了行业内的佼佼者。

Cellergy公司的发展小趣事

为了进一步扩大市场份额,Cellergy公司积极寻求与其他电子企业的战略合作。通过与一家知名电子产品制造商的合作,Cellergy公司的电容器产品得以进入更广阔的市场。双方共同研发新产品,共享技术和市场资源,实现了互利共赢。这一合作不仅提升了Cellergy公司的知名度,也为其带来了更多的商业机会。

Crystal Semiconductor Corp公司的发展小趣事

随着产品质量的提升和技术创新的积累,Crystal Semiconductor Corp开始积极拓展国内外市场。公司加强了与全球知名企业的合作,通过参加国际展会、举办技术研讨会等方式提升品牌知名度。同时,公司还注重客户服务,积极解决客户在使用过程中遇到的问题,赢得了良好的口碑。

问答坊 | AI 解惑

漏电保护开关的正确选用与运行维护

漏电保护开关的正确选用与运行维护 http://www.iacmall.com/news-4-2622.html 或下载附件…

查看全部问答>

为什么蓝牙模块对HCI命令没反应啊?

我最近在做一块ARM板上的蓝牙底层初始化驱动,环境如下 板子:ARM11板 Linux内核版本:2.6.18 蓝牙模块:采用CSR的Bluecore5核心,和CPU通过UART相连 蓝牙驱动:1.自己根据蓝牙的datasheet在系统启动时给蓝牙模块发送了一条Reset信号,并初始化 ...…

查看全部问答>

卡车也要有能“耐”我来晒晒中国勒芒轻卡耐力赛PP

早晨起来,一看上海天马上赛车场已经装扮一新,赛道内有专门的维修通道,与正式的F1比赛管理别无二致,已悄然感受到大战的气息。在赛事现场,热辣的美女、轰鸣的马达、绚丽的奥铃CTX赛车、激情呐喊的观众,这就是2010(第二届)福田奥铃CTX中国勒芒 ...…

查看全部问答>

【MSP430共享】最全电子书收集

请大家更贴完善 [ 本帖最后由 fengzhang2002 于 2011-9-7 12:13 编辑 ]…

查看全部问答>

定时中断 ad采样问题

写了一个定时中断函数,将AD采样写在定时中断中,结果不能得到正确的AD值,定时时间为0.1ms, 采用dsp2806,系统时钟为50MHz,外部引脚ADCIN已经连接到1.6V直流电压,为什么我的AD值却总是零呢? 请高手帮帮忙!! void ADC_Init(void)  {&nb ...…

查看全部问答>

易电源学习心得

易电源顾名思义,就是个高集成度的电源,让设计更方便,快捷,简单,TI就是强…

查看全部问答>

28335的AD采样?

在做AD采样时,初始化AD时,如果没有这段代码,发现采样结果不对,加上后,检测结果正常:         AdcRegs.ADCTRL1.bit.RESET=1; //复位整个ADC模块         DSP28x_usDelay(1);      ...…

查看全部问答>

通过手机App给SensorTag OAD升级固件

不知道有多少朋友已经拿到SensorTag了? 今天来说一下SensorTag的OAD(Over the Air Download) 无线下载升级固件功能 大家都知道 单片机开发测试一般需要用JTAG下载器烧写固件,但如果是开发产品都会面临一个比较头疼的问题,如果产品已经投放市场 ...…

查看全部问答>

求基于点阵led的图文显示设计

1、设计显示的图片内容,图形内容为笑脸 2、显示方式设计为:左右上下移动 3、实现图形的放大和缩小,并能按设定的路径自动在显示屏移动 4、页面开始显示姓名:夏赞义 学号:2010044213 有意做的请联系qq:357271420,价格私聊 谢谢!!! …

查看全部问答>

从某贴吧看到的一道题 觉得好玩所以转了

1、图中电路当最右边开关S闭合时,请写出所有工作的用电器。(10分)2、图中电路闭合所有开关时,请计算出电路消耗的总功率、总电阻。(10分)3、向图中变压部分输入AC 220V,根据电路及元件参数,计算出输出的最大DC电压为?最大输出电流为?(20 ...…

查看全部问答>