STM8L 在USART中使用DMA来发送与接收数据

STM32单片机基础08——使用USART发送和接收数据(DMA模式) 本篇文章主要介绍如何使用STM32CubeMX初始化STM32L431RCT6的USART,并使用DMA模式发送数据和接收数据。 1. 准备工作 硬件准备 开发板 首先需要准备一个开发板,这里我准备的是STM32L4的开发板(BearPi): 软件准备 需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的代码; Keil MDK和串口助手的安装包都可以关注“小熊派开源社... 阅读详情
以USART为例子来使用DMA
分两部分,第一为,DMA这个外设自身的配置;第二为,USART的DMA部分配置,
DMA与USART的DMA配置
void SYS_DMA_Init(void)
{		
	CLK_PeripheralClockConfig(CLK_Peripheral_DMA1, ENABLE);</span>	//打开时钟,很重要
	/* Deinitialize DMA channels */
	DMA_GlobalDeInit();
 
	DMA_DeInit(DMA1_Channel1);
	DMA_DeInit(DMA1_Channel2);
	
	/* DMA channel Rx of USART Configuration */
    //该函数主要要配置好接受的数组,以及USART的数据寄存器地址,数组大小,以及DMA模式
	DMA_Init(DMA1_Channel2, (uint16_t)RxBuffer, (uint16_t)0x5231, \
	         10, DMA_DIR_PeripheralToMemory, DMA_Mode_Normal, \
	         DMA_MemoryIncMode_Inc, DMA_Priority_Low, DMA_MemoryDataSize_Byte);
 
	/* DMA channel Tx of USART Configuration */
    //该函数主要配置发送数组,以及USART的数据寄存器地址,数组大小,以及DMA模式
	DMA_Init(DMA1_Channel1, (uint16_t)TxBuffer, (uint16_t)0x5231, \
			 60, DMA_DIR_MemoryToPeripheral, DMA_Mode_Normal, \
			 DMA_MemoryIncMode_Inc, DMA_Priority_High, DMA_MemoryDataSize_Byte);
	
	/* Enable the USART Tx/Rx DMA requests */
	USART_DMACmd(USART1, USART_DMAReq_TX, ENABLE);
	USART_DMACmd(USART1, USART_DMAReq_RX, ENABLE);
 
	/* Global DMA Enable */
	DMA_GlobalCmd(ENABLE);
 
	/* Enable the USART Tx DMA channel */
	DMA_Cmd(DMA1_Channel1, ENABLE);
	/* Enable the USART Rx DMA channel */
	DMA_Cmd(DMA1_Channel2, ENABLE);         
}


下面主要对void DMA_Init(DMA_Channel_TypeDef* DMA_Channelx,
              uint32_t DMA_Memory0BaseAddr,
              uint16_t DMA_PeripheralMemory1BaseAddr,
              uint8_t DMA_BufferSize,
              DMA_DIR_TypeDef DMA_DIR,
              DMA_Mode_TypeDef DMA_Mode,
              DMA_MemoryIncMode_TypeDef DMA_MemoryIncMode,
              DMA_Priority_TypeDef DMA_Priority,
              DMA_MemoryDataSize_TypeDef DMA_MemoryDataSize )
函数的主要参数做一下说明,DMA_Channelx:针对不同的外设,这个有可能是通道0123,主要根据下表来进行选择:

在

本例子中,USART_TX 对应的是通道1,USART_RX对应的是通道2。
DMA_Memory0BaseAddr:该参数为存储器地址,在本例中为接收数组RXBuffer或发送数组TxBuffer的指针地址。
DMA_PeripheralMemory1BaseAddr:该参数为外设的数据地址,在本例中为USART的数据寄存器的地址
DMA_BufferSize:该参数为接收数组或发送数组的缓存区大小。
DMA_DIR_TypeDef DMA_DIR:该参数为DMA数据传输的方向,在USART_TX中为存储器到外设,在USART_RX 中就为外设到存储器。
DMA_Mode_TypeDef DMA_Mode:该参数为DMA的模式,分正常模式和循环模式两种。正常模式下响应了DMA请求后不再响应请求。
下面再讲讲如何在DMA正常模式下,响应了一次DMA请求后,再次启动DMA请求,分别以USART_TX、USART_RX为例子讲解
USART_TX:在上面例子中,TxBuffer[]存放着待发送的数组,当调用DMA_Cmd(DMA1_Channel1, ENABLE);
启动DMA通道后,DMA响应了该次请求,如需再次响应请求则需先关闭DMA通道DMA_Cmd(DMA1_Channel1, DISABLE); 并调用DMA_SetCurrDataCounter(DMA1_Channel1, 60)函数重新设置待发送的数据大小,之后再使能DMA通道DMA_Cmd(DMA1_Channel1, ENABLE); 即可重新发送数据。
USART_RX:USART DMA接收中,与上面USART_TX的流程相同,当调用了DMA_Cmd(DMA1_Channel1, ENABLE)之后,DMA可响应首次接收请求,如需再次响应请求则需要关闭DMA通道DMA_Cmd(DMA1_Channel1, DISABLE); 并调用DMA_SetCurrDataCounter(DMA1_Channel2, 10)函数重新设置待接收的数据大小,之后再使能DMA通道DMA_Cmd(DMA1_Channel1, ENABLE); 即可再次响应USART接收DMA请求。

单片机基础——使用USART发送和接收数据(DMA模式) 1. 准备工作 硬件准备 开发板 首先需要准备一个小熊派IoT开发板,并通过USB线与电脑连接。 2.生成MDK工程 选择芯片型号 打开STM32CubeMX,打开MCU选择器: 搜索并选中芯片STM32L431RCT6: 配置时钟源 如果选择使用外部高速时钟(HSE),则需要在System Core中配置RCC; 如果使用默认内部时钟(HSI),这一步可以略过; 这里我都使用外部时... 阅读详情

相关推荐

串口接收数据 存储成int_STM32Cube08 | 使用USART发送和接收数据(DMA模式)

更多精彩~点击上面蓝字关注我们呀! 寻求更好的阅读体验,请点击阅读原文移步:Mculover666的个人博客。本篇文章主要介绍如何使用STM32CubeMX初始化STM32L431RCT6的USART,并使用DMA模式发送数据和接收数据。1. 准备工作硬件准备开发板首先需要准备一个开发板,这里我准备的是STM32L4的开发板(BearPi):软件准备需要安装好Keil - MDK及芯...

weixin_42356340的博客 717

STM8L USART+DMA配置,使用DMA完成串口收发。

USART配置 /*----------------------------------------------------------------------------- * 函 数 名 : USART1_Config() * 函数功能 : USART1初始化配置 * 输 入 : 无 * 输 出 : 无 ----------------------------------------------------------------

ChenRy的博客 2473

【STM32Cube_08】使用USART发送和接收数据(DMA模式)

本篇文章主要介绍如何使用STM32CubeMX初始化STM32L431RCT6的USART,并使用**DMA模式**发送数据和接收数据。

Mculover666的博客(嵌入式) 4876

USART_DMAReq_Tx和USART_DMAReq_Rx的使用场景

使用USART进行串口通信时,可以通过配置DMA通道来实现通过DMA传输串口数据的功能,这时可以使用USART_DMAReq_Tx来告知DMA传输数据应该从USART的Tx缓存寄存器中获取数据。USART_DMAReq_Tx和USART_DMAReq_Rx是在使用DMA传输数据时的请求控制位,用于告知DMA器件应该读取哪一个寄存器来获取数据并进行传输。要使用USART_DMAReq_Tx或USART_DMAReq_Rx,需要先使能USART的DMA传输模式,然后配置DMA控制器进行数据传输。

zss_1994的博客 942

【STM32Cube_07】使用USART发送和接收数据(中断模式)

1. 准备工作 硬件准备 首先需要准备一个开发板,这里我准备的是STM32L4的开发板(BearPi): 软件准备 需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的代码; 准备一个串口调试助手,这里我使用的是Serial Port Utility; 2.生成MDK工程 — 初始化GPIO为输入 选择芯片型号 打开STM32CubeMX,打开MCU选择器: 搜索并选中芯片S...

Mculover666的博客(嵌入式) 6433

STM32:STM32 DMA编程:DMA与USART的数据传输

在STM32微控制器中,USART(Universal Synchronous/Asynchronous Receiver/Transmitter)是一种串行通信接口,用于实现设备之间的数据交换。USART支持异步和同步通信模式,能够发送和接收数据。在异步模式下,USART使用起始位、数据位、奇偶校验位和停止位来封装数据,这使得它能够与各种串行设备进行通信。同步模式则通过时钟信号来同步数据的发送和接收。通过上述步骤,可以配置STM32的DMA与USART进行高效的数据传输。

kkchenjj的博客 1557

STM32之CubeL4(二)---USART + DMA + HAL

一、UART简介 1.1 串口通信简介 一般情况下,设备之间的通信方式可以分成并行通信和串行通信两种,它们的区别是: 通信方式 并行通信 串行通信 传输原理 数据各个位同时传输 数据按位顺序传输 优点 传输速度快 占用引脚资源少 缺点 占用引脚资源多 传输速度相对较慢 在集成电路芯片的内部、同一硬件板上各部件之间等(比如指令总线、数据总线、系统总线等)的数据传送通常采用...

流云 6444

STM32 USART与DMA的结合使用教程

STM32微控制器是STMicroelectronics(意法半导体)生产的32位ARM Cortex-M系列处理器的广泛系列。这些微控制器以其高性能、低功耗、丰富的外设接口和高性价比而闻名。STM32系列可根据性能、内存大小、外设集、引脚数量、封装类型和温度范围等因素进行选择,使得它在各种嵌入式应用中都能找到用武之地。要实现USART与DMA的硬件连接,首先需要确保电路设计上能够支持这一功能。对于STM32微控制器,通常需要连接以下信号线:USART Tx/Rx线:与通信伙伴进行数据交换。

weixin_29867767的博客 1339

STM8L的USART1串口通信详解 含例程

STM8L除了可以进行串口通信,还可支持红外通信,智能卡协议,这些功能后续会开发,发布程序源码。STM8L还可以使用DMA缓存数据,减少CPU负担,为了简单起见,本文没有用到DMA功能。只需要简单的配置发送的字长度,停止位数,波特率,打开发送接收,就可以进行串口数据收发。下图为串口发送数据流程。对于串口发送数据,需要注意的是,打开发送后,数据发送完成,如果不关闭中断,程序会一直进入中断。所以在确保...

yueng_tao的博客 8571

基于IAR的STM8L152的USART+ADC(双通道)带DMA+RTC定时唤醒+外部中断唤醒+低功耗HALT模式(源码)

基于IAR的STM8L152的USART+ADC(双通道)带DMA+RTC定时唤醒+外部中断唤醒+低功耗HALT模式(源码)

基于IAR的STM8L152的USART、ADC(双通道)带DMA+外部中断唤醒+低功耗HALT模式+RTC定时唤醒(源码)

基于IAR的STM8L152的USART+ADC(双通道)带DMA+RTC定时唤醒+外部中断唤醒+低功耗HALT模式(源码)

[转]一个严谨的STM32串口DMA发送&接收(1.5Mbps波特率)机制

文章目录 1 前言 2 串口有必要使用DMA吗 3 实现方式 4 STM32串口使用DMA 5 串口DMA接收 5.1 基本流程 5.2 相关配置 5.3 接收处理 5.3 .1 接收数据大小 5.3.2 接收数据偏移地址 5.4 应用读取串口数据方法 6 串口DMA发送 5.1 基本流程 5.2 相关配置 5.3 发送处理 6 串口设备 6.1 数据结构 6.2 对外接口 7 相关文章 8 完整源码 1 前言 直接存储器访问(Direct Memory Access)

xuanjianqiang的博客 3万+

stm8l的DMA的用法

stm8l的DMA模式,可以连接很多器件

基于stm32使用usart发送实现HAL库DMA方式

可以看到在main函数中使用DMA发送一大串数据正常使用,不影响cpu的的实时性,同时我这里使用逻辑分析仪简单的抓取了发送的数据,可以观察到每发送一个数据都附带一个时钟,同步模式就是就是带有时钟,异步发送模式不带时钟,逻辑分析仪也正确解析出了我们发送的数据,本次实验验证成功。

weixin_44317448的博客 1549

OpenAI Codex 桌面端国内使用全坑解決指南(2026 Windows 实测)

本地文件报错:SQLite 初始化失败、启动闪退、卡加载页 → 本地缓存/数据库损坏,和网络无关网络地区报错→ 网络IP/地区被拦截,和本地软件文件无关Codex 桌面端的大部分报错,都不是软件故障,而是海外软件适配国内网络、国内模型协议不兼容导致的适配问题。不用盲目重装、换网络、改系统设置,只要区分「本地文件问题」和「网络地区问题」,搭配国内大模型 API 替代方案,就能完美解决所有痛点。(注:部分内容可能由 AI 生成)

ups_hxc的博客 1126

Silvaco TCAD仿真例库——肖特基二极管正向特性(例子)

此示例演示了肖特基二极管正向特性的仿真。 展示了: 使用 Atlas 语法形成二极管结构 设置阳极的肖特基势垒高度 正向偏置阳极 代码 第一部分:描述设备 mesh(网格) electrodes locations(电极位置) doping distribution(掺杂分布) 这是位于结构左侧和右侧的,2维n型器件,具有重掺杂浮动 p 型保护环区域, (2D n-type device with heavily doped floating p-type guard ring regio.

weixin_41788560的博客 2万+

STM32 HAL库 USART DMA驱动

本文是在使用 STM32L4 的串口 DMA 功能时,使用 HAL 库出现的一些问题,通过以下方式解决了 HAL 库中存在 DMA 发送和接收的一些问题。 DMA 相关配置及使用 以下根据 STM32L43xxx 系列进行 USART2 + DMA 的开发。 串口配置 sg_USART2_HandleStruct.Instance = USART2; sg_USART2_Han...

大橙子的博客 3204

基因家族快速鉴定指南:Windows平台下的HMMER实战解析

本文详细解析了在Windows平台下使用HMMER工具进行基因家族快速鉴定的完整实战流程。通过手把手指导,从软件获取、数据准备到模型构建与序列搜索,帮助生物信息学新手无需Linux环境,即可高效完成bZIP转录因子等家族的鉴定工作,大幅降低分析门槛。

weixin_29255731的博客 460

串口在接收数据后还一直在接收_单片机基础——使用USART发送和接收数据(DMA模式)...

本篇文章主要介绍如何使用STM32CubeMX初始化STM32L431RCT6的USART,并使用DMA模式发送数据和接收数据。1. 准备工作硬件准备开发板首先需要准备一个小熊派IoT开发板,并通过USB线与电脑连接。2.创建Cube工程选择芯片型号打开STM32CubeMX,打开MCU选择器:搜索并选中芯片STM32L431RCT6:配置时钟源如果选择使用外部高速时钟(HSE),则需要...

weixin_39897687的博客 999

从零配置ORB-SLAM3:TUM-VI数据集yaml文件参数调优指南

本文深入解析了ORB-SLAM3在TUM-VI数据集上的yaml配置文件参数调优方法。针对双目惯性模式,详细拆解了相机标定、IMU噪声模型和ORB特征提取三大模块的关键参数,解释了其原理与影响,并通过实战案例展示了如何通过调整特征点数量、FAST阈值及IMU噪声参数,有效提升系统在低纹理环境下的鲁棒性和轨迹精度。

weixin_29071809的博客 151

用AI免费制作30分钟电影:完整工作流与实操解析

AI视频生成技术正大幅降低影视创作门槛,但真正制作一部完整电影并非一键生成,而是涉及剧本、分镜、画面、配音、剪辑的复杂流水线。理解其基本原理,是将文本转化为连续视觉叙事的关键。对于创作者而言,掌握角色一致性控制、素材批量管理、免费额度合理分配等技术价值,能有效避免生成结果崩坏与资源浪费。该能力可广泛应用于短视频创作、独立电影预演、教学演示等场景。本文以30分钟AI电影制作为例,拆解从工具选择到成片输出的全流程,重点分析免费方案下的时间与积分成本,以及最容易翻车的环节,并给出基于实践验证的排查与优化策略。

weixin_29056865的博客 330

STM32DMA+串口完成中断 接收和发送

最近在使用STM32F103单片机进行串口接收处理不定长数据测试时有两个需求。1、需要接收不定长的数据。2、提高串口响应速度。 一直看过很多贴子关于串口+DMA+完成中断的用法,但是没有找到合适的。参考了很多资料自己整理一份程序代码,供大家参考。 软件链接:https://download.youkuaiyun.com/download/shaozp529/11573556 软件设计思路: 接收函数串...

shaozp529的博客 1万+

Stateflow使用C语言结构体,关于使用Stateflow调用外部C代码的教程介绍

无论是Simulink仿真,还是对模型做代码生成,已有C代码的调用都是我们经常会遇到的情形:如何调用现有的外部C代码?很多人首先想到的是S-Function。的确,S-Function提供了一种途径,可以让我们把C函数封装成Simulink模块在Simulink环境下运行。另外还有一种方式,叫做Legacy Code Tool,说白了也是S-Function,只是MATLAB提供了这样的接口便于用...

weixin_34947914的博客 2673

STM32L4使用DMA发送串口数据

在上一个工程的基础上添加使用DMA传输串口数据 (上次工程见STM32使用LL库建立工程) 一、CubeMX的配置 依次点击Configuration->DMA即可进入DMA口详细配置界面。 点击【Add】添加DMA传输请求,然后选择USART1_TX请求; 其他设置如下即可 然后依旧是工程设置里,将HAL改成HAL 然后便可以生成代码 二、用户代码修改 代码生成后打开工程,我们可...

qq_38113006的博客 3910

边缘AI工业落地:YOLO26-Seg + RK3588 NPU 极致部署(低功耗+实时实例分割,工业场景全覆盖)

本次实战汇总了「YOLO26-Seg+RK3588 NPU」工业边缘部署中最常见、最致命的8个坑点,所有坑点均来自真实工业项目,解决方案均为零代码/一键操作,无需复杂配置,能让你少走90%的弯路,节省大量时间,必看必记!❌ RKNN转换报错「算子不支持/模型加载失败」→ ✅ 导出ONNX时必须指定opset=12,重新导出即可,RK3588唯一兼容版本;❌ 分割mask错位/轮廓模糊 → ✅ 导出ONNX时加,并保证RKNN的归一化参数与YOLO26一致,零代码修复;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1719

【以太网硬件九】1000base-X是什么?

简要描述1000base-X物理层规范

highman110的博客 1万+
上一篇: 电流检测电路-Max471
下一篇: STM8L151 使用硬件SPI驱动W25Q16 Flash
jnu_fangzebin
博客等级 码龄12年 55粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值