【蓝桥杯嵌入式】串口DMA模式及不定长数据收发

前言:重定向printf进行串口数据发送,DMA模式进行数据接收。

一、CubeMX配置:

配置串口波特率

打开串口中断和DMA

注意:在蓝桥杯测评版上USART1是PA9、PA10,而如果未在CubeMX中配置PC4和PC5时,USART1默认为PC4和PC5。

二、代码部分

printf重定向、勾选MicroLAB:

在main中重定义fput():

#include "stdio.h"

/* USER CODE BEGIN 4 */
int fputc(int ch,FILE *f){
	HAL_UART_Transmit(&huart1 ,(uint8_t *)&ch,1,HAL_MAX_DELAY);
	return ch;
}
/* USER CODE END 4 */

解释:此代码重定向printf到uart1,使用printf即可向串口1发送数据。

不定长数据接收:

在interrupt.c中或main.c中重定义数据接收事件中断:

extern DMA_HandleTypeDef hdma_usart1_rx;

void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size){
	if(huart == &huart1){
		//user code
		HAL_UARTEx_ReceiveToIdle_DMA(&huart1,Receive,10);    //DMA不定长数据接收
		__HAL_DMA_DISABLE_IT(&hdma_usart1_rx,DMA_IT_HT);     //关闭接受数据长度过半中断
	}
}

解释:HAL_UARTEx_ReceiveToIdle_DMA(&huart1,Receive,10);第二个参数为接收数组,第三个参数为最大接收字符数,一般可直接写为该数组长度。

__HAL_DMA_DISABLE_IT(&hdma_usart1_rx,DMA_IT_HT);为关闭DMA_IT_HT中断,该中断回调函数会同时被接收过半和接收空闲同时出发。

在main函数中初次接收数据及定义Receive[]数组:

extern DMA_HandleTypeDef hdma_usart1_rx;
uint8_t Receive[10];	

HAL_UARTEx_ReceiveToIdle_DMA(&huart1,Receive,10);
__HAL_DMA_DISABLE_IT(&hdma_usart1_rx,DMA_IT_HT);

### 回答1: stm32f407芯片可以使用hal库中的DMA功能进行不定数据传输。DMA是直接内存访问(Direct Memory Access)的缩写,它是一种通过硬件控制的方式,将存储器与外设之间进行数据传输的技术。使用DMA可以有效地减轻CPU的负担,提高系统的效率。 在使用DMA进行数据传输时,需要对DMA进行初始化配置。具体步骤如下: 1. 根据需要设置DMA数据传输方向和传输模式。 2. 配置DMA传输的源地址和目的地址。 3. 设置数据传输的度,并开启DMA传输。 在程序运行过程中,DMA的传输是通过中断来完成的。中断服务程序会在数据传输完成后自动调用。 使用DMA进行数据传输,可以提高系统的效率,减少CPU的负担,实现更加高效和稳定的数据传输。在stm32f407的hal库中,DMA功能已经被完善地实现,并提供了使用手册和范例代码,方便开发者进行开发和调试。 ### 回答2: stm32f407 hal库的dma模块可以实现不定数据传输。通过设置DMA的通道、传输方向、传输数据的起始地址和传输的数据度等参数,可以实现DMA不定数据传输功能。 在使用DMA进行不定数据传输时,需要注意以下几点: 1.传输方向:DMA可以实现单向传输和双向传输。在进行不定数据传输时,需要根据实际情况选择传输方向。 2.传输数据的起始地址:应根据具体的传输数据类型和存储方式设置传输数据的起始地址。例如,对于存储在内存中的数据,可以设置传输数据的起始地址为该数据在内存中的地址;对于存储在外设中的数据,可以设置传输数据的起始地址为外设对应的寄存器或存储空间地址。 3.传输数据度:可以根据实际需求设置传输数据度。在进行不定数据传输时,可以通过软件控制传输数据度,也可以通过硬件自动控制传输数据度。在进行动态数据传输时,需要在达到一定条件时及时停止或重新启动传输。 总的来说,利用stm32f407 hal库的dma模块进行不定数据传输,需要合理设置参数并且充分考虑传输数据的类型和存储方式,以实现更加高效和可靠的数据传输。 ### 回答3: STM32F407 HAL库DMA不定数据传输需要使用DMA的循环模式。在循环模式下,DMA会自动根据数据度进行数据传输,不需要预先设置数据度。 具体操作步骤如下: 1. 在DMA配置文件中,设置DMA的循环模式为循环模式。 2. 开启DMA传输中断,用于判断DMA传输是否完成。 3. 在程序中,设置DMA传输的缓存地址和数据度,并启动DMA传输。 4. 等待DMA传输完成中断触发,即可完成数据传输。 需要注意的是,在不定数据传输过程中,需要保证DMA传输的缓存区足够大,以确保数据不会溢出。同时,由于数据不定,需要在程序中进行数据度的动态分配和释放。 总之,使用STM32F407 HAL库DMA不定数据传输需要掌握DMA循环模式的配置方法,以及合理的数据缓存管理策略。这将有助于减少程序出错的可能性,提高数据传输的效率和稳定性。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值