OpenEdv-开源电子网

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

关于dma库函数DMA_GetFlagStatus()的参数问题

[复制链接]

5

主题

8

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2018-8-20
在线时间
3 小时
发表于 2018-9-8 17:47:00 | 显示全部楼层 |阅读模式
1金钱
关于函数DMA_GetFlagStatus(),的第二个参数是根据什么来确定的啊?


这是函数的原型
[mw_shl_code=c,true]FlagStatus DMA_GetFlagStatus(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FLAG)
{
  FlagStatus bitstatus = RESET;
  DMA_TypeDef* DMAy;
  uint32_t tmpreg = 0;

  /* Check the parameters */
  assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx));
  assert_param(IS_DMA_GET_FLAG(DMA_FLAG));

  /* Determine the DMA to which belongs the stream */
  if (DMAy_Streamx < DMA2_Stream0)
  {
    /* DMAy_Streamx belongs to DMA1 */
    DMAy = DMA1;
  }
  else
  {
    /* DMAy_Streamx belongs to DMA2 */
    DMAy = DMA2;
  }

  /* Check if the flag is in HISR or LISR */
  if ((DMA_FLAG & HIGH_ISR_MASK) != (uint32_t)RESET)
  {
    /* Get DMAy HISR register value */
    tmpreg = DMAy->HISR;
  }
  else
  {
    /* Get DMAy LISR register value */
    tmpreg = DMAy->LISR;
  }   

  /* Mask the reserved bits */
  tmpreg &= (uint32_t)RESERVED_MASK;

  /* Check the status of the specified DMA flag */
  if ((tmpreg & DMA_FLAG) != (uint32_t)RESET)
  {
    /* DMA_FLAG is set */
    bitstatus = SET;
  }
  else
  {
    /* DMA_FLAG is reset */
    bitstatus = RESET;
  }

  /* Return the DMA_FLAG status */
  return  bitstatus;
}[/mw_shl_code]

这是第二个参数的有效性判断
[mw_shl_code=c,true]#define IS_DMA_GET_FLAG(FLAG) (((FLAG) == DMA_FLAG_TCIF0)  || ((FLAG) == DMA_FLAG_HTIF0)  || \
                               ((FLAG) == DMA_FLAG_TEIF0)  || ((FLAG) == DMA_FLAG_DMEIF0) || \
                               ((FLAG) == DMA_FLAG_FEIF0)  || ((FLAG) == DMA_FLAG_TCIF1)  || \
                               ((FLAG) == DMA_FLAG_HTIF1)  || ((FLAG) == DMA_FLAG_TEIF1)  || \
                               ((FLAG) == DMA_FLAG_DMEIF1) || ((FLAG) == DMA_FLAG_FEIF1)  || \
                               ((FLAG) == DMA_FLAG_TCIF2)  || ((FLAG) == DMA_FLAG_HTIF2)  || \
                               ((FLAG) == DMA_FLAG_TEIF2)  || ((FLAG) == DMA_FLAG_DMEIF2) || \
                               ((FLAG) == DMA_FLAG_FEIF2)  || ((FLAG) == DMA_FLAG_TCIF3)  || \
                               ((FLAG) == DMA_FLAG_HTIF3)  || ((FLAG) == DMA_FLAG_TEIF3)  || \
                               ((FLAG) == DMA_FLAG_DMEIF3) || ((FLAG) == DMA_FLAG_FEIF3)  || \
                               ((FLAG) == DMA_FLAG_TCIF4)  || ((FLAG) == DMA_FLAG_HTIF4)  || \
                               ((FLAG) == DMA_FLAG_TEIF4)  || ((FLAG) == DMA_FLAG_DMEIF4) || \
                               ((FLAG) == DMA_FLAG_FEIF4)  || ((FLAG) == DMA_FLAG_TCIF5)  || \
                               ((FLAG) == DMA_FLAG_HTIF5)  || ((FLAG) == DMA_FLAG_TEIF5)  || \
                               ((FLAG) == DMA_FLAG_DMEIF5) || ((FLAG) == DMA_FLAG_FEIF5)  || \
                               ((FLAG) == DMA_FLAG_TCIF6)  || ((FLAG) == DMA_FLAG_HTIF6)  || \
                               ((FLAG) == DMA_FLAG_TEIF6)  || ((FLAG) == DMA_FLAG_DMEIF6) || \
                               ((FLAG) == DMA_FLAG_FEIF6)  || ((FLAG) == DMA_FLAG_TCIF7)  || \
                               ((FLAG) == DMA_FLAG_HTIF7)  || ((FLAG) == DMA_FLAG_TEIF7)  || \
                               ((FLAG) == DMA_FLAG_DMEIF7) || ((FLAG) == DMA_FLAG_FEIF7))
/**[/mw_shl_code]

请问第二个参数是根据什么来确定的啊?

最佳答案

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

五个标志位各自有自己的定义, 你要我详细的你打出来就百多字, 明明ST有文件给你详细的说明, 你非不要看, 要看经过有失真的个人理解的详细讲讲。 要是你看完, 有明白的再问, 这是可以的, 但看也不看, 直接的要给你详细的讲讲, 恕不提供快餐式的答案。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-9-8 17:47:01 | 显示全部楼层
easyeasier 发表于 2018-9-8 19:40
大佬,能详细给讲讲吗,还是不晓得怎么确定

五个标志位各自有自己的定义, 你要我详细的你打出来就百多字, 明明ST有文件给你详细的说明, 你非不要看, 要看经过有失真的个人理解的详细讲讲。
要是你看完, 有明白的再问, 这是可以的, 但看也不看, 直接的要给你详细的讲讲, 恕不提供快餐式的答案。
回复

使用道具 举报

5

主题

8

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2018-8-20
在线时间
3 小时
 楼主| 发表于 2018-9-8 17:54:42 | 显示全部楼层
@正点原子,大佬 I need you
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-9-8 19:31:02 | 显示全部楼层
首先要确定用的Channel,然后每个Channel有5个标志位, 每个标志位的意思在,ST相关糸列的reference manual有啊
回复

使用道具 举报

5

主题

8

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2018-8-20
在线时间
3 小时
 楼主| 发表于 2018-9-8 19:40:52 | 显示全部楼层
edmund1234 发表于 2018-9-8 19:31
首先要确定用的Channel,然后每个Channel有5个标志位, 每个标志位的意思在,ST相关糸列的reference manual ...

大佬,能详细给讲讲吗,还是不晓得怎么确定
回复

使用道具 举报

11

主题

35

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-7-23
在线时间
11 小时
发表于 2019-8-2 16:04:22 | 显示全部楼层
说了半天也没说出函数怎么用,还来帖子下面谴责一通,你真是无聊
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-15 16:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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