专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
stm32的时钟和can波特率的奇怪现象
2019-03-23 19:23
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
9258
3
1006
我用103开发一个can程序,板子上的晶振为16M,时钟配置用的是官方程序SystemInit(),也宏定义了SYSCLK_FREQ_72MHz,理论上系统时钟应该是72M,但实际上我查看SYSCLK寄存器,时钟为36M,此为怪事一;然后如果系统时钟是36M,那么我配置的波特率计算出来应该为125k,运行时在keil里查看can的控制面板,波特率也的确为125k,但实际上出来的波特率却为250k,与can分析仪用250k的速率可以正常通信。大家可以帮我想想问题所在么? 此帖出自
小平头技术问答
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
字字宫商
1楼-- · 2019-03-24 01:53
/ 后来我自己写了个时钟配置程序,结果查看SYSCLK为72M,can波特率的配置按理论是125k,但实际上与分析仪要用250k才能通信,而且通信过程会出现丢失帧id的现象。代码如下:
============================
HSEStartUpStatus = RCC_WaitForHSEStartUp();
//如果外部晶振启动成功,则进行下一步操作
if (HSEStartUpStatus==SUCCESS)
{
//设置HCLK(AHB时钟)
RCC_HCLKConfig(RCC_SYSCLK_Div2);
//PCLK1(APB1) = HCLK/2
RCC_PCLK1Config(RCC_HCLK_Div2);
//PCLK2(APB2) = HCLK
RCC_PCLK2Config(RCC_HCLK_Div2); // RCC_HCLK_Div1
//FLASH时序控制
//推荐值:SYSCLK = 0~24MHz Latency=0
// SYSCLK = 24~48MHz Latency=1
// SYSCLK = 48~72MHz Latency=2
FLASH_SetLatency(FLASH_Latency_2);
//开启FLASH预取指功能
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
//PLL设置 (最大72MHz?)
RCC_PLLConfig(0x00010000, RCC_PLLMul_9);
// RCC_PLLConfig(0x00000000, RCC_PLLMul_9);
//启动PLL
RCC_PLLCmd(ENABLE);
//等待PLL稳定
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
//系统时钟SYSCLK来自PLL输出
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
//切换时钟后等待系统时钟稳定
while (RCC_GetSYSCLKSource()!=0x08);
加载中...
damiaa
2楼-- · 2019-03-24 05:29
精彩回答 2 元偷偷看……
加载中...
wanghlady
3楼-- · 2019-03-24 05:36
这个问题解决了么
加载中...
一周热门
更多
>
相关问题
相关文章
嵌入式编译生成的HEX文件和BIN文件内容详解
0个评论
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
单片机中把部分Flash虚拟成Eeprom使用时,如何延长使用寿命
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
敢问路在何方,STM32迈出的第一步,却注定了它非凡的一生
0个评论
年工作时间真的就等于3年工作经验?也许你就不配
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
============================
HSEStartUpStatus = RCC_WaitForHSEStartUp();
//如果外部晶振启动成功,则进行下一步操作
if (HSEStartUpStatus==SUCCESS)
{
//设置HCLK(AHB时钟)
RCC_HCLKConfig(RCC_SYSCLK_Div2);
//PCLK1(APB1) = HCLK/2
RCC_PCLK1Config(RCC_HCLK_Div2);
//PCLK2(APB2) = HCLK
RCC_PCLK2Config(RCC_HCLK_Div2); // RCC_HCLK_Div1
//FLASH时序控制
//推荐值:SYSCLK = 0~24MHz Latency=0
// SYSCLK = 24~48MHz Latency=1
// SYSCLK = 48~72MHz Latency=2
FLASH_SetLatency(FLASH_Latency_2);
//开启FLASH预取指功能
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
//PLL设置 (最大72MHz?)
RCC_PLLConfig(0x00010000, RCC_PLLMul_9);
// RCC_PLLConfig(0x00000000, RCC_PLLMul_9);
//启动PLL
RCC_PLLCmd(ENABLE);
//等待PLL稳定
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
//系统时钟SYSCLK来自PLL输出
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
//切换时钟后等待系统时钟稳定
while (RCC_GetSYSCLKSource()!=0x08);
一周热门 更多>