硬汉嵌入式论坛

 找回密码
 立即注册
查看: 6212|回复: 1
收起左侧

[有问必答] STM32F4库函数RCC_GetFlagStatus源码问题

[复制链接]

3

主题

5

回帖

14

积分

新手上路

积分
14
发表于 2016-5-2 12:26:52 | 显示全部楼层 |阅读模式
stm32库函数中,有一个函数是这样的
FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG)
{
  uint32_t tmp = 0;
  uint32_t statusreg = 0;
  FlagStatus bitstatus = RESET;

  /* Check the parameters */
  assert_param(IS_RCC_FLAG(RCC_FLAG));

  /* Get the RCC register index */
  tmp = RCC_FLAG >> 5;
if (tmp == 1)               /* The flag to check is in CR register */  //为什么?
  {
    statusreg = RCC->CR;
  }

  else if (tmp == 2)          /* The flag to check is in BDCR register */ // 为什么?
  {
    statusreg = RCC->BDCR;
  }

  else                       /* The flag to check is in CSR register */   //为什么?
  {
    statusreg = RCC->CSR;
  }


  /* Get the flag position */
  tmp = RCC_FLAG & FLAG_MASK;
  if ((statusreg & ((uint32_t)1 << tmp)) != (uint32_t)RESET)   
  {
    bitstatus = SET;
  }
  else
  {
    bitstatus = RESET;
  }

  /* Return the flag status */
  return bitstatus;
}

为什么(tmp == 1)就可以判断/* The flag to check is in CR register */    ??
为什么(tmp == 2)就可以判断 /* The flag to check is in BDCR register */  ??
为什么其它的就可以判断 /* The flag to check is in CSR register */   ??
另外  if ((statusreg & ((uint32_t)1 << tmp)) != (uint32_t)RESET)   
  {
    bitstatus = SET;
  }
  else
  {
    bitstatus = RESET;
  }
这是为什么?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2016-5-2 14:27:09 | 显示全部楼层
1.  首先全工程检索下这个函数的使用RCC_GetFlagStatus。
2. 然后看下这个函数的上面的参数说明。
3. 针对这些参数找到参数的原始定义:
#define RCC_FLAG_HSIRDY                  ((uint8_t)0x21)
#define RCC_FLAG_HSERDY                  ((uint8_t)0x31)
#define RCC_FLAG_PLLRDY                  ((uint8_t)0x39)
#define RCC_FLAG_PLLI2SRDY               ((uint8_t)0x3B)
#define RCC_FLAG_PLLSAIRDY               ((uint8_t)0x3D)
#define RCC_FLAG_LSERDY                  ((uint8_t)0x41)
#define RCC_FLAG_LSIRDY                  ((uint8_t)0x61)
#define RCC_FLAG_BORRST                  ((uint8_t)0x79)
#define RCC_FLAG_PINRST                  ((uint8_t)0x7A)
#define RCC_FLAG_PORRST                  ((uint8_t)0x7B)
#define RCC_FLAG_SFTRST                  ((uint8_t)0x7C)
#define RCC_FLAG_IWDGRST                 ((uint8_t)0x7D)
#define RCC_FLAG_WWDGRST                 ((uint8_t)0x7E)
#define RCC_FLAG_LPWRRST                 ((uint8_t)0x7F)
=================================================
你再根据这些数值分析源码,是不是好分析了,这些数值就是库自己定义的一些数值。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 01:10 , Processed in 0.036453 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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