OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1964|回复: 8

有一个DMA问题,我百思不解?

[复制链接]

35

主题

70

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2021-11-11
在线时间
41 小时
发表于 2023-7-24 13:01:15 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 18703609461 于 2023-7-24 13:27 编辑

串口通信接收 DMA,
是在串口的空闲中断中完成,
空闲中断时,数据不已经接收完毕了么?
传输已经完毕了,再DMA  , 数据都没有啦,咋转移数据啊?

void USART1_IRQHandler(void)               
{
        extern short Angle;
        int temp;
        extern u8 USART_Cache[][30];
        if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)  //????(?????????0x0d 0x0a??)
        {
                DMA_Cmd(DMA2_Stream5, DISABLE);
                data = USART1->SR;
                data = USART1->DR;  // 此处必须读取标志位!!!
                ////  自己的处理代码在这里
                DMA_ClearFlag(DMA2_Stream5,DMA_FLAG_TCIF5 | DMA_FLAG_FEIF5 | DMA_FLAG_DMEIF5 | DMA_FLAG_TEIF5 | DMA_FLAG_HTIF5);
                DMA_SetCurrDataCounter(DMA2_Stream5, RECEIVE_BUF_SIZE);  
                DMA_Cmd(DMA2_Stream5, ENABLE);
  }
        USART_ClearITPendingBit(USART1,USART_IT_IDLE);
}



最佳答案

查看完整内容[请看2#楼]

DMA初始化的时候会配置外设到内存,内存到外设还是内存到内存,设定好后,硬件会自动把数据按照你设置的方向处理,达到某个条件时触发中断,这个时候再做相应处理,就是这样,网上讲解很多啊。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

800

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3775
金钱
3775
注册时间
2017-3-7
在线时间
1645 小时
发表于 2023-7-24 13:01:16 | 显示全部楼层
18703609461 发表于 2023-7-28 15:48
你们都没理解DMA,我理解了,但是我就是不说

DMA初始化的时候会配置外设到内存,内存到外设还是内存到内存,设定好后,硬件会自动把数据按照你设置的方向处理,达到某个条件时触发中断,这个时候再做相应处理,就是这样,网上讲解很多啊。
回复

使用道具 举报

3

主题

800

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3775
金钱
3775
注册时间
2017-3-7
在线时间
1645 小时
发表于 2023-7-24 13:02:50 | 显示全部楼层
是的,空闲中断发生时已经传输完成
回复

使用道具 举报

35

主题

70

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2021-11-11
在线时间
41 小时
 楼主| 发表于 2023-7-24 13:28:36 | 显示全部楼层
a5820736 发表于 2023-7-24 13:02
是的,空闲中断发生时已经传输完成

传输已经完毕了,再DMA  , 数据都没有啦,咋转移数据啊?
回复

使用道具 举报

70

主题

6698

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12692
金钱
12692
注册时间
2012-11-26
在线时间
3711 小时
发表于 2023-7-24 13:30:59 | 显示全部楼层
18703609461 发表于 2023-7-24 13:28
传输已经完毕了,再DMA  , 数据都没有啦,咋转移数据啊?

////  自己的处理代码在这里

抄代码都不知道怎么抄
学无止境
回复

使用道具 举报

35

主题

70

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2021-11-11
在线时间
41 小时
 楼主| 发表于 2023-7-24 14:26:10 | 显示全部楼层
jermy_z 发表于 2023-7-24 13:30
////  自己的处理代码在这里

抄代码都不知道怎么抄
空闲中断,
荒唐,数据发送完啦,我咋处理?
回复

使用道具 举报

70

主题

6698

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12692
金钱
12692
注册时间
2012-11-26
在线时间
3711 小时
发表于 2023-7-24 14:59:29 | 显示全部楼层
18703609461 发表于 2023-7-24 14:26
空闲中断,
荒唐,数据发送完啦,我咋处理?

是的   你荒唐至极  

学无止境
回复

使用道具 举报

35

主题

70

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2021-11-11
在线时间
41 小时
 楼主| 发表于 2023-7-28 15:48:58 | 显示全部楼层
你们都没理解DMA,我理解了,但是我就是不说
回复

使用道具 举报

35

主题

70

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2021-11-11
在线时间
41 小时
 楼主| 发表于 2023-7-28 20:37:37 来自手机 | 显示全部楼层
对,当初我就没明白,但是后来我才想明白,我比较笨
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 04:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表