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

查看: 5413|回复: 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 &gt;&gt; 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 &gt;&gt; 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-&gt;CR;
  }
  else if (tmp == 2)          /* The flag to check is in BDCR register */
  {
    statusreg = RCC-&gt;BDCR;
  }
  else                       /* The flag to check is in CSR register */
  {
    statusreg = RCC-&gt;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 &gt;&gt; 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-&gt;CR;
  }
  else if (tmp == 2)          /* The flag to check is in BDCR register */
  {
    statusreg = RCC-&gt;BDCR;
  }
  else                       /* The flag to check is in CSR register */
  {
    statusreg = RCC-&gt;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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版