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

查看: 5403|回复: 7

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

[复制链接]

4

主题

9

回帖

0

蝴蝶豆

新手上路

最后登录
2019-12-17
发表于 2012-3-31 00:18:24 | 显示全部楼层 |阅读模式
#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
回复

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2012-3-31 09:22:04 | 显示全部楼层

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

define RCC_FLAG_WWDGRST  是根据这个标志位在寄存器中的位置计算的。这个标志位为0,其他标志位为1而得出的结果。
回复 支持 反对

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2012-3-31 09:26:09 | 显示全部楼层

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

tmp = RCC_FLAG >> 5;是右移
回复 支持 反对

使用道具 举报

42

主题

101

回帖

0

蝴蝶豆

高级会员

最后登录
1970-1-1
发表于 2012-3-31 14:46:51 | 显示全部楼层

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

以上那些都是 FLAG寄存器的 某一位,就是该位使能 或者 失能。
通过宏定义 来 表示的,后面的是 十六进制的数。
回复 支持 反对

使用道具 举报

4

主题

9

回帖

0

蝴蝶豆

新手上路

最后登录
2019-12-17
 楼主| 发表于 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;
  }
回复 支持 反对

使用道具 举报

4

主题

9

回帖

0

蝴蝶豆

新手上路

最后登录
2019-12-17
 楼主| 发表于 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;
  }
回复 支持 反对

使用道具 举报

4

主题

9

回帖

0

蝴蝶豆

新手上路

最后登录
2019-12-17
 楼主| 发表于 2012-4-1 15:26:34 | 显示全部楼层

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

怎样没人指点啊,痛哉
回复 支持 反对

使用道具 举报

27

主题

1709

回帖

42

蝴蝶豆

论坛元老

最后登录
2020-12-8
发表于 2016-12-24 08:30:50 | 显示全部楼层
这帖子时间可真久。。。
回复 支持 反对

使用道具 举报

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版