STM32标准库使用串口2-匿名上位机V7的两种方式(不用DMA和使用DMA)

文章讲述了在项目中如何使用定时器与DMA进行串口数据发送,强调了DMA发送方式避免了程序卡死的问题。作者还提供了DMA初始化和配置的详细步骤。

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

前言

最近做一个小项目,用到了串口2-匿名上位机V7调参,大概情况就是使用定时器、串口(DMA)实现,串口(DMA)发送放在了定时器里面(需要着重注意下,这里说使用了定时器发送,一会会提到)

一、不使用DMA发送

	for (i=0;i<cnt;i++)
	{
		USART_SendData(USART2,data[i]);
		//for(int j=0;j<1000;j++);
		while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
	}

以上就是相关代码,但注意一个问题!前面说了是在定时器中发送,如果使用while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);  的话,程序会跑死!而如果把这段代码换成注释掉的延时的话,就没有问题咧!

如果想使用 while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);  的话,可以放在主函数的while(1) 循环中。

二、使用DMA发送

if( DMA_GetFlagStatus( DMA1_FLAG_TC7) == SET)//准备完成
	{  
        //注意:DMA初始化中,方向为DMA_DIR_PeripheralDST,存储器和外设的datasize都是字节!DMA模式设置为normal
		DMA_Cmd(DMA1_Channel7, DISABLE);			//关闭DMA
		DMA_ClearFlag(DMA1_FLAG_TC7);				//轻触标志位
		DMA1_Channel7->CNDTR=data_long;				//DMA_SetCurrDataCounter(); 设置发送的buffer_size
		DMA1_Channel7->CMAR=(u32)(data);			//存储器地址
		DMA1_Channel7->CPAR=(u32)(&USART2->DR);		//外设地址
		DMA_Cmd(DMA1_Channel7, ENABLE);				//开启DMA
	}

以上就是使用DMA发送过程
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值