【STM32F103】DMA学习笔记(陆续添加)

本文详细介绍了STM32F103的DMA特性,包括两个独立DMA模块、四级优先级、循环模式等。阐述了DMA处理过程及配置步骤,并提供了硬件设计和软件设计的编程实例,涉及USART1通过DMA1通道4和5进行数据传输。

参考:STM32F10xxx参考手册

DMA主要特性比较多,简要为以下几条:

1.两个独立DMA模块,其中DMA2只有在大容量和互联网型号中有

2.四级优先级,同级的请求,则根据通道号大小,小的优先级高

3.可设置为循环缓存

4.传输宽度可设,字节,半字,全字(对应的字的长度应该是32bits,stm32是32位单片机)

5.三种事件可触发中断:DMA半传输,DMA传输完成,DMA传输错误

6.最大传输数目为65535

DMA处理过程

DMA_CPARx或DMA_CMARx用于设置传输开始地址

DMA_CNDTRx用于保存未完成的操作数目,会自递减(应该是16位寄存器)

DMA通道配置步骤

1.在DMA_CPARx中设置外设寄存器的地址,在DMA_CMARx中设置数据存储器的地址

2.DMA_CNDTRx设置传输的数据量,启动传输后,该寄存器值会递减

3.DMA_CCRx的PL位设置优先级

4.DMA_CCRx设置传输方向、循环模式、外设和存储器的增量模式、数据宽度、以及中断事件

5.DMA_CCRx的ENABLE位置1启动DMA通道

6.中断会在DMA_ISR寄存器置位对应的标志

循环模式

用于处理循环缓冲区和连续的数据传输(例如ADC扫描)。DMA_CCRx中CIRC位用于开启该功能

可编程设置数据传输宽度、对齐方式、数据大小端

PSIZE用于设置外设数据宽度

MSIZE用于设置存储器数据宽度

PINC和MINC用于设置大小端

DMA1控制器

外设与DMA通道是对应的,不是可以随意映射的。一个通道对应一个外设,而一个外设只对应一个通道

注意这里的外设只指一个外设请求,例如USART1就包括USART1_RX和USART1_RX两个

对应见下表

06-02
### RAGFlow Framework or Library in IT Context RAGFlow 是一种基于检索增强生成(Retrieval-Augmented Generation, RAG)理念的框架或工作流,旨在通过结合信息检索和生成模型来提升自然语言处理任务的效果。以下是关于 RAGFlow 的详细解析及其相关技术资料: #### 1. RAGFlow 的核心概念 RAGFlow 的设计目标是将传统的检索系统与现代生成式模型相结合,从而在生成过程中引入外部知识[^1]。这种结合能够显著提高生成内容的相关性和准确性。具体来说,RAGFlow 包含以下关键组件: - **检索模块**:负责从大规模文档集合中提取与用户查询最相关的片段。 - **生成模块**:利用检索到的信息作为上下文,生成高质量的回答或文本。 #### 2. RAGFlow 的实现方式 RAGFlow 的实现通常依赖于深度学习框架和开源工具库。例如,LangChain 提供了完整的 RAG 实现示例,其中包括: - 数据索引:使用向量数据库(如 FAISS 或 Pinecone)存储文档嵌入。 - 查询处理:将用户输入转化为嵌入向量,并检索最相似的文档片段。 - 文本生成:结合检索结果和预训练语言模型(如 GPT 或 BERT)生成最终输出。 #### 3. 相关技术栈 除了 LangChain,还有其他工具和技术可以支持 RAGFlow 的开发[^2]: - **Data Processing Libraries**: 工具如 `data-juicer` 和 `MinerU` 可以帮助清洗和准备数据集。 - **Document Parsing Tools**: 如 `PDF-Extract-Kit` 和 `Docling`,用于高效解析非结构化文档。 - **LLM Integration**: 利用 AutoGen 等框架实现多代理协作和 RAG 功能[^3]。 #### 4. 示例代码 以下是一个简单的 RAGFlow 实现示例,使用 Python 和 Hugging Face Transformers 库: ```python from transformers import pipeline # 初始化检索和生成模型 retriever = pipeline("feature-extraction") generator = pipeline("text-generation") def rag_flow(query, documents): # 检索相关文档 embeddings = retriever([query] + documents) scores = [sum(a * b for a, b in zip(embeddings[0], e)) for e in embeddings[1:]] top_doc = documents[scores.index(max(scores))] # 生成回答 context = f"Context: {top_doc}\nQuestion: {query}" answer = generator(context, max_length=100)[0]["generated_text"] return answer # 示例运行 documents = ["The capital of France is Paris.", "Germany is known for its engineering."] print(rag_flow("What is the capital of France?", documents)) ``` #### 5. RAGFlow 的优势与挑战 - **优势**:通过引入外部知识,RAGFlow 能够生成更加准确和多样化的文本。 - **挑战**:需要高效的检索系统和高质量的数据源,同时对计算资源要求较高。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值