发一个stm32f4xx dma接收未知数据长度调试通过

2019-12-24 18:35发布

本帖最后由 hpdell 于 2012-12-14 10:13 编辑

参考stm32f1xx的帖子修改而来,望多多指教

在此感谢感谢!!!11
http://www.amobbs.com/forum.php? ... C%E5%8F%91%E9%80%81


顺便请教下,我想用DMA发送一个字符或者多个字符时,调试没有成功,请大仙们指点指点一下!


此工程文件不含固件库,使用者需要自己增加固件库,固件库与本工程文件放同一目录就可以了,路径请自行修改!!


//USART1使用DMA接收数据中断服务程序, DMA接收完成中断
void DMA2_Stream5_IRQHandler(void)
{
   /* Test on DMA Stream Transfer Complete interrupt */
   if(DMA_GetITStatus(DMA2_Stream5, DMA_IT_TCIF5))       //此处是我增加,不然单片机会不停的发送数据给pc机
   {     
      DMA_ClearITPendingBit(DMA2_Stream5,DMA_IT_TCIF5);
      DMA_ClearITPendingBit(DMA2_Stream5,DMA_IT_TEIF5);
      DMA_Cmd(DMA2_Stream5, DISABLE);                                //关闭DMA,防止处理其间有数据
      DMA2_Stream5->NDTR = RECAVEMAXCOUNT;                //重装填
      DMA_Cmd(DMA2_Stream5, ENABLE);                                //处理完,重开DMA
   }
}



//USART1使用DMA发数据中断服务程序
void DMA2_Stream7_IRQHandler(void)
{
   if(DMA_GetITStatus(DMA2_Stream7, DMA_IT_TCIF7) != RESET)
   {
      DMA_ClearITPendingBit(DMA2_Stream7,DMA_IT_TCIF7);
      DMA_ClearITPendingBit(DMA2_Stream7,DMA_IT_TEIF7);
      USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);
      DMA_Cmd(DMA2_Stream7, DISABLE);                        //关闭DMA
      USART1_TxFinish = 1;                                                        //置DMA传输完成
   }
}

工程文件:
V26-DMA2_Stream5.zip (76.78 KB, 下载次数: 151) 2012-12-14 10:04 上传 点击文件名下载附件
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
31条回答
logosz
1楼-- · 2019-12-27 20:08
楼主你的程序有没有在F0上面测试过。我发现F1可以通过,F0就不行。
logosz
2楼-- · 2019-12-27 21:09
20061002838 发表于 2012-12-15 23:32
你都不知道你接收的数据长度是多少,怎么用DMA完成中断?DMA是完成你设定数量的传输之后触发传输完成中断 ...

F0测试了下发现通不过,F1测试通过,你有没有测试过F0的。可以进空闲中断,但是读取的DMA传送数量每次都是不一样的。随机的。但是我测试的数据是固定的。很奇怪
hpdell
3楼-- · 2019-12-27 23:39
logosz 发表于 2015-4-16 22:45
F0测试了下发现通不过,F1测试通过,你有没有测试过F0的。可以进空闲中断,但是读取的DMA传送数量每次都 ...

你好,f0的我没有那个板子,反正每次你发送多少,他能够收到与你发送同样的数据就可以了啊,不过应该是你发送多少,他会自动接收多少的

这个我在f4上面使用是完全没有任何问题的哦,f0的你再研究研究啊,有什么结果也请发上来分享一下哦,你再看看f0的支不支持空闲模式或者是设置

有什么不一样的地方 。
logosz
4楼-- · 2019-12-28 03:48
hpdell 发表于 2015-4-17 09:00
你好,f0的我没有那个板子,反正每次你发送多少,他能够收到与你发送同样的数据就可以了啊,不过应该是你 ...

F0有多个串口的,但是不是所有串口都支持timeout功能。我现在用的这个串口号没有timeout功能,所以用的是串口空闲中断+DMA,在串口空闲中断中把DMA传输到内存中的数据复制到变量中。


但是F1可以通过,F0测试不过。
weidadejang
5楼-- · 2019-12-28 07:40
 精彩回答 2  元偷偷看……
hpdell
6楼-- · 2019-12-28 10:53
weidadejang 发表于 2015-12-19 07:02
请教一下,DMA 用总线空闲中断的时候,有时候正常 有时候不正常 不知道你碰到过没有! ...

木有遇到过哟

一周热门 更多>