DAM的使用结合串口和中断以及GPIO。

本文档总结了STM32开发中GPIO的应用,包括LED流水灯控制、按键操作及位带操作等内容,并介绍了如何配置中断,涉及NVIC配置、中断服务函数编写等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DAM的使用结合串口和中断以及GPIO。

 

当我学到DMA这章的时候就意味着我已经学完了,GPIO里的LED,按键,还有就是串口发送数据。

那么下面就来总结下前段时间所学的知识(因为接下来有断时间我是没有时间去学习STM32)

首先来看下我最先接触的LED流水灯

对于流水灯。首先我我们知道。点亮流水灯就是有电流通过LED灯。而每个流水灯 就是接在GPIO口上的,

然后我们就会有个关于GPIO的结构体打开结构体

然后我们就来配置GPIO口,因为我的板子上对应的LED灯的GPIO端口是PA0,PF7,PF8。

所以我们对三个口进行配置。

由上可以看到GPIO口的配置有

1.首先开启两个端口的外设时钟。

2.然后设置输出模式。

3.然后就是设置输出输出速率。

4.接着就是选择输出端口,

5.最后是开始使用库函数GPIO_Init()来初始化端口,就是把刚才配置的信息配置给每个端口。

 

因为按键也是通过GPIO口来控制的。所以就会有

然后就是有个LED灯翻转用到了位带操作,这样就可以直接用到定义端口。网上

有关于位带操作的说明。

下个就是中断里面,这里就记下我自己容易犯下的错误,

1.配置好中断配置。下面以DMA发送完成中断进行演示。

void NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* Configure the NVIC Preemption Priority Bits */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

/* Enable the USARTy Interrupt */
NVIC_InitStructure.NVIC_IRQChannel =DMA1_Channel4_IRQn ;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}

2.这里注意的就是要在所在的.c的.h 文件里去定义void NVIC_Config(void)。

这样才能使用 void NVIC_Config(void)函数,记住两个void都不能省。

3.再u就是怎样产生中断的。这里我们用到的是DMA发送完成使用中断。所以用到的就是

这里可以记住一个函数XXX _ITConfig()

这是设置外设中断的函数,如接收中断和发送完成中断,这就可以产生中断,然后就是进入到中断服务函数,

4.就是配置中断服务函数,对于中断函数名的取法在上篇随笔中已经介绍的有,

这里就是说下在本程序中断函数中需要做的就是判断中断标志,然后执行想要的函数,

最重要的就是使用清除中断标志位。这里就用到了一个固件库函数XXX_ClearFlag()和,XXX_ClearITPendingBit().

为了谨慎使用,建议就是中断时使用XXX_ClearITPendingBit(),在非中断的时候使用XXX_ClearFlag()。

至此,看完了。中断,和GPIO。对于串口,DMA。我现在很困,等到有时间在进行记录。不会拖 的太长,我怕自己记不住一些东西、

加油!

 

转载于:https://www.cnblogs.com/qq877262836/p/6617210.html

### 使用STM32 HAL库通过串口DMA方式进行数据发送 #### 配置环境 为了实现基于DMA的UART通信,需准备如下开发工具硬件设备: - 芯片型号:STM32F103C8T6[^1] - 开发配置工具:STM32CubeMX软件用于初始化项目设置并生成初始代码框架。 - 编程调试平台:MDK-Keil作为集成开发环境。 #### DMA简介及其应用到USART接口上 直接存储器访问(DMA)允许在外设之间快速传输大量数据而无需CPU干预。对于STM32系列微控制器而言,DMA支持多个外设的数据交换;具体来说,DMA1具备7个独立的工作通道,而高端版本中的DMA2则提供额外5个通道[^2]。 当利用DMA配合串口(UART/USART)执行异步读写任务时,可以显著减轻处理器负担,并提高效率。下面将详细介绍如何借助HAL库来构建这样的功能模块。 #### 实现过程 ##### 初始化设置 在STM32CubeMX中开启相应的DMA流以及USART资源分配之后,会自动生成部分必要的初始化语句。确保已勾选`Use DMA during UART transmission`选项以便启用该特性。 ##### 发送函数定义 要启动一次完整的DMA驱动下的UART发送流程,通常调用以下API之一: ```c // 同步模式下阻塞直到全部字节被成功发出 HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); ``` 此命令负责装载待传数组至指定缓冲区,并触发实际传送动作。一旦所有预期数量(Size参数所指明的数量)的数据包都已经被放置到了物理链路上,则自动停止当前事务处理周期。 ##### 处理完成事件 每当DMA引擎完成了预定的任务后——无论是因为达到了预设长度还是遇到了错误条件——都会激活对应的中断服务程序(ISR),进而通知应用程序层采取进一步措施。针对上述场景,在接收到DMA Transfer Complete (TC)标志位更新信号时,应该重置状态机等待下一个指令到来之前恢复默认行为。 特别注意的是,在某些应用场景里可能还需要手动控制RS485收发电路的状态切换。这可以通过监听特定类型的回调机制(`HAL_UART_TxCpltCallback`)并在其中加入适当的GPIO操作达成目的[^3]: ```c void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart){ /* 如果是对应于我们关心的那个实例 */ if(huart->Instance== USARTx){ // 将RE引脚拉低以进入接收模式 GPIO_WritePin(GPIOA, GPIO_PIN_9, Bit_RESET); } } ``` 以上就是使用STM32 HAL库结合DMA技术实施高效能串行通讯方案的关键要素概述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值