您的位置:首页 > 其它

STM32 DMA使用

2017-10-27 10:01 190 查看
一、串口接收 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,我想是不是返回打开关闭造成的,最后修改成直接在初始化中设置要发送的个数,不再后边在用函数修改,切换缓冲区的过程只关闭一次打开一次,这样就好了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: