你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

请高手看下这是怎么来的?stm32f10x_rcc.h

[复制链接]
darennet 提问时间:2012-3-31 00:18 /
#define RCC_FLAG_HSIRDY                  ((uint8_t)0x21)
#define RCC_FLAG_HSERDY                  ((uint8_t)0x31)
#define RCC_FLAG_PLLRDY                  ((uint8_t)0x39)
#define RCC_FLAG_LSERDY                  ((uint8_t)0x41)
#define RCC_FLAG_LSIRDY                  ((uint8_t)0x61)
#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) //以上这些都是根据什么来设置的?
#ifndef STM32F10X_CL
 #define IS_RCC_FLAG(FLAG) (((FLAG) == RCC_FLAG_HSIRDY) || ((FLAG) == RCC_FLAG_HSERDY) || \
                            ((FLAG) == RCC_FLAG_PLLRDY) || ((FLAG) == RCC_FLAG_LSERDY) || \
                            ((FLAG) == RCC_FLAG_LSIRDY) || ((FLAG) == RCC_FLAG_PINRST) || \
                            ((FLAG) == RCC_FLAG_PORRST) || ((FLAG) == RCC_FLAG_SFTRST) || \
                            ((FLAG) == RCC_FLAG_IWDGRST)|| ((FLAG) == RCC_FLAG_WWDGRST)|| \
                            ((FLAG) == RCC_FLAG_LPWRRST))
#else
 #define RCC_FLAG_PLL2RDY                ((uint8_t)0x3B)
 #define RCC_FLAG_PLL3RDY                ((uint8_t)0x3D)
 #define IS_RCC_FLAG(FLAG) (((FLAG) == RCC_FLAG_HSIRDY) || ((FLAG) == RCC_FLAG_HSERDY) || \
                            ((FLAG) == RCC_FLAG_PLLRDY) || ((FLAG) == RCC_FLAG_LSERDY) || \
                            ((FLAG) == RCC_FLAG_PLL2RDY) || ((FLAG) == RCC_FLAG_PLL3RDY) || \
                            ((FLAG) == RCC_FLAG_LSIRDY) || ((FLAG) == RCC_FLAG_PINRST) || \
                            ((FLAG) == RCC_FLAG_PORRST) || ((FLAG) == RCC_FLAG_SFTRST) || \
                            ((FLAG) == RCC_FLAG_IWDGRST)|| ((FLAG) == RCC_FLAG_WWDGRST)|| \
                            ((FLAG) == RCC_FLAG_LPWRRST))
#endif /* STM32F10X_CL */
/*以下是搞用上面设置的库函数,关键来了,看到这里就蒙了*/
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;//上面的解释应该是说通过左移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;
  }

<span style="font-size: medium">  /* Get the flag position */
  tmp = RCC_FLAG & FLAG_Mask;
  if ((statusreg & ((uint32_t)1
1 收藏 评论7 发布时间:2012-3-31 00:18

举报

7个回答
废鱼 回答时间:2012-3-31 09:22:04

RE:请高手看下这是怎么来的?stm32f10x_rcc.h

define RCC_FLAG_WWDGRST  是根据这个标志位在寄存器中的位置计算的。这个标志位为0,其他标志位为1而得出的结果。
废鱼 回答时间:2012-3-31 09:26:09

RE:请高手看下这是怎么来的?stm32f10x_rcc.h

tmp = RCC_FLAG >> 5;是右移
swallow1029 回答时间:2012-3-31 14:46:51

RE:请高手看下这是怎么来的?stm32f10x_rcc.h

以上那些都是 FLAG寄存器的 某一位,就是该位使能 或者 失能。
通过宏定义 来 表示的,后面的是 十六进制的数。
darennet 回答时间:2012-3-31 21:08:45

回复:请高手看下这是怎么来的?stm32f10x_rcc.h

回复第 2 楼 于2012-03-31 01:22:04发表:
define RCC_FLAG_WWDGRST 是根据这个标志位在寄存器中的位置计算的。这个标志位为0,其他标志位为1而得出的结果。 

#define RCC_FLAG_IWDGRST                 ((uint8_t)0x7D)
FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG)
{

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

  
  /* Get the RCC register index */
 
tmp = RCC_FLAG >> 5;// 假如RCC_FLAG是RCC_FLAG_IWDGRST,右移5位RCC_FLAG_IWDGRST后变成了0x3了,而IWDGRST所在的位:RCC_CSR寄存器的位29,算一下感觉不对了,请问上面的楼主能解释一下,这里为什么要右移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;
  }
darennet 回答时间:2012-3-31 21:08:46

回复:请高手看下这是怎么来的?stm32f10x_rcc.h

回复第 2 楼 于2012-03-31 01:22:04发表:
define RCC_FLAG_WWDGRST 是根据这个标志位在寄存器中的位置计算的。这个标志位为0,其他标志位为1而得出的结果。 

#define RCC_FLAG_IWDGRST                 ((uint8_t)0x7D)
FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG)
{

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

  
  /* Get the RCC register index */
 
tmp = RCC_FLAG >> 5;// 假如RCC_FLAG是RCC_FLAG_IWDGRST,右移5位RCC_FLAG_IWDGRST后变成了0x3了,而IWDGRST所在的位:RCC_CSR寄存器的位29,算一下感觉不对了,请问上面的楼主能解释一下,这里为什么要右移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;
  }
darennet 回答时间:2012-4-1 15:26:34

RE:请高手看下这是怎么来的?stm32f10x_rcc.h

怎样没人指点啊,痛哉
小小超 回答时间:2016-12-24 08:30:50
这帖子时间可真久。。。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版