|
【前言】本帖只贴出了函数所需的部分源码,所贴源码并不完整! 固件库提供的 “检查指定RCC标志位设置与否” 的函数在源文件 “stm32f10x_rcc.c” 里的原型如下:
那么,那8位的数据是怎么来的呢? 其实,也并没有太大的区别。 首先,获取RCC寄存器索引这一步容易理解——那11个标志并不在同一个寄存器里,而是在三个不同寄存器里。语句“RCC_FLAG >> 5” 将宏定义给标志变量的数据左移五位(即数据的低五位被移除)后赋值给变量tmp,所以这里暂时不考虑数据的低五位。
标志变量 数据高三位 RCC_FLAG_HSIRDY 001 RCC_FLAG_HSERDY 001 RCC_FLAG_PLLRDY 001 RCC_FLAG_LSERDY 010 RCC_FLAG_LSIRDY 011 RCC_FLAG_PINRST 011 RCC_FLAG_PORRST 011 RCC_FLAG_SFTRST 011 RCC_FLAG_IWDGRST 011 RCC_FLAG_WWDGRST 011 RCC_FLAG_LPWRRST 011 其次,得到指定标志在所在寄存器的具体位置:
RCC_CR寄存器
而第四个变量所对应的标志在RCC_BDCR寄存器的第1位。 后七个变量所对应的标志分别在RCC_CSR寄存器的第1、26~31位。 这样,执行以下语句即可判断指定位的状态。
除了RCC_GetFlagStatus()函数,固件库中还有其它函数也采用了同样的编程思路。 ---------------------------------------------------------------------------------------------------------------------------------------------- 32初学者,在各论坛没搜到过类似帖,不知自己是否眼盲(或者太无知,就这么一个问题还发帖 ),也不知自己所理解的是否正确。若理解有误,还望广大贴友指正,非常感谢! ---------------------------------------------------------------------------------------------------------------------------------------------- |
微信公众号
手机版
谢谢欧巴前辈,学习之路还请多多指教。