STM32 DMA使用

一、串口接收 DMA

        串口接收使用DMA,如果设置的是单次模式,接收缓冲器的大小至少和接收个数一样大,如果缓冲器小于接收个数,缓冲器的内容有可能被覆盖,如果一次接收到的数据大于设置的接收个数,超过接收个数的数据将会被清零。

二、串口发送DMA

今天发送串口数据的时候想使用双缓冲区交替使用然后尽量避免数据还没发出去又被新到的数据冲掉,调试的时候发现一个问题,第一个字节会被发送两遍。程序是这样的:

	  DMA_Cmd(DMA1_Channel7,DISABLE);
	  DMA_DeInit(DMA1_Channel7);
	  Init_UART2DMA(DMA1_Channel7,(u32)(&(USART2->DR)),(u32)(uart2var.ShootSig),Shootedlength);	
	  UART2DMA_Once(DMA1_Channel7,Shootedlength);
	  USART_DMACmd(USART2,USART_DMAReq_Tx,ENABLE);	
关闭DMA,重新初始化切换发送缓冲区地址设置缓冲区大小,设置发送个数,打开DMA。这样设置会出现第一个字节发送两遍的情况。后来修改了下程序,因为在初始中打开了DMA,设置发送次数的时候关闭DMA、设置次数、打开DMA,我想是不是返回打开关闭造成的,最后修改成直接在初始化中设置要发送的个数,不再后边在用函数修改,切换缓冲区的过程只关闭一次打开一次,这样就好了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值