电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
问答
新手疑虑:STM32L151外接3.6864MHz晶振,主频
已解决
73482
个问题
已帮助
5993
位优秀工程师
新手疑虑:STM32L151外接3.6864MHz晶振,主频
FEItwo
2018-11-14
浏览量:1514
有个项目,是用STM32L151,外接3.6864MHz晶振,OSC32IN和OSC32out没接晶振。
按个人理解,时钟应该是3.6864*8/2=14.7456M但是我看代码里还是基于8M来设置的。
Main.c里这么注释的:
RCC_GetClocksFreq(&RCC_Clocks); //获取系统时钟频率外部晶振8.00M倍频后系统时钟8.000*8/2=32.00M
对应的RCC_GetClocksFreq如下:
void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks)
{
uint32_t tmp = 0 pllmul = 0 plldiv = 0 pllsource = 0 presc = 0 msirange = 0;
/* Get SYSCLK source -------------------------------------------------------*/
tmp = RCC->CFGR & RCC_CFGR_SWS;
switch (tmp)
{
case 0x00: /* MSI used as system clock */
msirange = (RCC->ICSCR & RCC_ICSCR_MSIRANGE ) >> 13;
RCC_Clocks->SYSCLK_Frequency = (((1 << msirange) * 64000) - (MSITable[msirange] * 24000));
break;
case 0x04: /* HSI used as system clock */
RCC_Clocks->SYSCLK_Frequency = HSI_VALUE;
break;
case 0x08: /* HSE used as system clock */
RCC_Clocks->SYSCLK_Frequency = HSE_VALUE;
break;
case 0x0C: /* PLL used as system clock */
/* Get PLL clock source and multiplication factor ----------------------*/
pllmul = RCC->CFGR & RCC_CFGR_PLLMUL;
plldiv = RCC->CFGR & RCC_CFGR_PLLDIV;
pllmul = PLLMulTable[(pllmul >> 18)];
plldiv = (plldiv >> 22) + 1;
pllsource = RCC->CFGR & RCC_CFGR_PLLSRC;
if (pllsource == 0x00)
{
/* HSI oscillator clock selected as PLL clock entry */
RCC_Clocks->SYSCLK_Frequency = (((HSI_VALUE) * pllmul) / plldiv);
}
else
{
/* HSE selected as PLL clock entry */
RCC_Clocks->SYSCLK_Frequency = (((HSE_VALUE) * pllmul) / plldiv);
}
break;
default:
RCC_Clocks->SYSCLK_Frequency = HSI_VALUE;
break;
}
在system_stm32lxx.c里,看到倍频分频设置值跟外接8M一样,几乎没改动。
/* PLL configuration: PLLCLK = (HSE * 8) / 2 = 32MHz */
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL |
RCC_CFGR_PLLDIV));
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMUL8 | RCC_CFGR_PLLDIV2);
难道是用了默认的内部8M频率?哪位恳请帮理一下。新手对RCC还是有点糊涂。
显示全部
关注问题
写回答
0
0
收起
我来回答
上传资料:
选择文件
文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
chen0000009
STM32默认的时钟源是内部的8M,如果要用外部时钟源,需要修改HSE_Value
发布于
2018-11-19
举报
评论 0
0
0
其他答案
数量:
4
奇迹12
这要看你rtc的时钟来源了,是不是这里设置的有问题
发布于
2018-11-17
举报
评论 0
0
0
drepa
HSE_VALUE必须是外部晶振的频率才可以正常工作,如8M就是800000000
发布于
2018-11-29
举报
评论 0
0
0
Harriet
一般都是检查你的晶振来源,看你的晶振是否能正常工作
发布于
2018-12-14
举报
评论 0
0
0
菜鸟冷虎
这个数值需要设置的跟你的晶振一样,不然是不能正常的
发布于
2018-12-19
举报
评论 0
0
0
相关问题
问题达人
换一批
文章
知识经验换现金
换一批
新手疑虑:STM32L151外接3.6864MHz晶振,主频
写回答
关注问题
×
我要举报该内容,理由是:
内容质量差:
内容太水、伸手党
垃圾广告信息:
广告、招聘、推广、测试内容等
偏离问答主题:
与技术无关、讨论类
与社区已有内容重复:
违规内容:
色情、暴力、血腥、敏感信息等
不友善内容:
人事攻击、挑衅辱骂、恶意行为
以上选项都不是: