专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
新手,问一个时钟配置的问题
2019-07-14 23:36
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
1389
5
1750
请问 RCC->CR |= 0X00010000; //使能外部高速时钟HSEON while(!(RCC->CR>>17)); //将RCC_CR寄存器的值右移17位,等待HSERDY就绪,即外部时钟就绪
这两句话应该怎么理解?
我的理解是第一句话让外部时钟(HSEON)置1,第二句话使寄存器右移17位,等到寄存器31位为1时跳出while循环
是这样吗,这样可以跳出循环吗?
纠结了
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
wizardli
2019-07-15 15:19
jeansonm 发表于 2014-5-30 12:59
就是判断当第17位为1后跳出循环
您好,我有一个新疑问,请帮我解答一下可以吗
#include "main.h"
#include "rcc.h"
void RCC_init() //我们单独列出来一个RCC_init()来管理时钟初始化工作
{
/***** 以下是关于RCC时钟 详细请见《STM32F10XXX参考手册》6.3节RCC寄存器描述 *******/
unsigned char sws = 0;
RCC->CR |= 0X00010000; //使能外部高速时钟HSEON
while(!(RCC->CR>>17)); //将RCC_CR寄存器的值右移17位,等待HSERDY就绪,即外部时钟就绪
/* 因为手册有要求APB1时钟频率不超过36MHZ,而在STM32中最大为72MHZ */
/* 为了保证最大速度,我们这里设置成2分频 */
/* 设置寄存器CFGR里的8-10位的值为100 */
RCC->CFGR = 0x00000400;
/* 寄存器CFGR的18-21四个bit位配置成以下值,则PLL就会设置成对应的值:
0000:PLL 2倍频输出 1000:PLL 10倍频输出
0001:PLL 3倍频输出 1001:PLL 11倍频输出
0010:PLL 4倍频输出 1010:PLL 12倍频输出
0011:PLL 5倍频输出 1011:PLL 13倍频输出
0100:PLL 6倍频输出 1100:PLL 14倍频输出
0101:PLL 7倍频输出 1101:PLL 15倍频输出
0110:PLL 8倍频输出 1110:PLL 16倍频输出
0111:PLL 9倍频输出 1111:PLL 16倍频输出
我们在这里,因为STM32神舟I号上的晶振是8MHZ的,配置成9倍输出就能达到STM32最大72MHZ工作频率*/
RCC->CFGR |= 7<<18; //本例程希望设置成40MHZ的工作频率,我们在这里尝试一下
//2右移动18位,即0011使得PLL获得5倍频输出,外部晶振是8MHZ
//乘以4就是40MHZ了
RCC->CFGR |= 1<<16; //PLLSRC设置成1,使得HSE时钟作为PLL输入时钟
FLASH->ACR|=0x32; //FLASH 2个延时周期
RCC->CR |= 1<<24; //将PLL使能
while(!(RCC->CR>>25)); //监控寄存器CR的PLLRDY位,等待PLL时钟就绪
RCC->CFGR |= 1<<1; //将时钟切换寄存器配置成用PLL输出作为系统时钟
while(sws != 0x2) //等待CFGR寄存器的2,3位为10,系统正式切换到了PLL输出作为时钟
{
sws = RCC->CFGR>>2; // 将CFGR寄存器右移2位,将2,3位SWS状态移出来,
// 详情请见《STM32F10XXX参考手册》54页
sws &= 0x3; //这里的0x3为二进制的11,这个whlie循环设计的一个算法,为了判断sws是不是为10
}
}
红 {MOD}部分的算法是如何实现的呢?逻辑看不大懂
加载中...
查看其它5个回答
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
您好,我有一个新疑问,请帮我解答一下可以吗
#include "main.h"
#include "rcc.h"
void RCC_init() //我们单独列出来一个RCC_init()来管理时钟初始化工作
{
/***** 以下是关于RCC时钟 详细请见《STM32F10XXX参考手册》6.3节RCC寄存器描述 *******/
unsigned char sws = 0;
RCC->CR |= 0X00010000; //使能外部高速时钟HSEON
while(!(RCC->CR>>17)); //将RCC_CR寄存器的值右移17位,等待HSERDY就绪,即外部时钟就绪
/* 因为手册有要求APB1时钟频率不超过36MHZ,而在STM32中最大为72MHZ */
/* 为了保证最大速度,我们这里设置成2分频 */
/* 设置寄存器CFGR里的8-10位的值为100 */
RCC->CFGR = 0x00000400;
/* 寄存器CFGR的18-21四个bit位配置成以下值,则PLL就会设置成对应的值:
0000:PLL 2倍频输出 1000:PLL 10倍频输出
0001:PLL 3倍频输出 1001:PLL 11倍频输出
0010:PLL 4倍频输出 1010:PLL 12倍频输出
0011:PLL 5倍频输出 1011:PLL 13倍频输出
0100:PLL 6倍频输出 1100:PLL 14倍频输出
0101:PLL 7倍频输出 1101:PLL 15倍频输出
0110:PLL 8倍频输出 1110:PLL 16倍频输出
0111:PLL 9倍频输出 1111:PLL 16倍频输出
我们在这里,因为STM32神舟I号上的晶振是8MHZ的,配置成9倍输出就能达到STM32最大72MHZ工作频率*/
RCC->CFGR |= 7<<18; //本例程希望设置成40MHZ的工作频率,我们在这里尝试一下
//2右移动18位,即0011使得PLL获得5倍频输出,外部晶振是8MHZ
//乘以4就是40MHZ了
RCC->CFGR |= 1<<16; //PLLSRC设置成1,使得HSE时钟作为PLL输入时钟
FLASH->ACR|=0x32; //FLASH 2个延时周期
RCC->CR |= 1<<24; //将PLL使能
while(!(RCC->CR>>25)); //监控寄存器CR的PLLRDY位,等待PLL时钟就绪
RCC->CFGR |= 1<<1; //将时钟切换寄存器配置成用PLL输出作为系统时钟
while(sws != 0x2) //等待CFGR寄存器的2,3位为10,系统正式切换到了PLL输出作为时钟
{
sws = RCC->CFGR>>2; // 将CFGR寄存器右移2位,将2,3位SWS状态移出来,
// 详情请见《STM32F10XXX参考手册》54页
sws &= 0x3; //这里的0x3为二进制的11,这个whlie循环设计的一个算法,为了判断sws是不是为10
}
}
红 {MOD}部分的算法是如何实现的呢?逻辑看不大懂
一周热门 更多>