ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
打印

[STM32F0] STM32F0X CAN波特率问题

[复制链接]
271|8
跳转到指定楼层
楼主
采用内部晶振8M,6倍PLL主频48M,配置250K波特率,实际示波器抓的怎么和预期不符?估算少了6倍?
这是配置代码:
        //CAN speed = (48M) / CAN_Prescaler / (1+BS1+BS2) = 48000000/32/6 = 250K
        CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;        // 1tq、BS1、BS2的值跟波特率有关
        CAN_InitStructure.CAN_BS1=CAN_BS1_3tq;
        CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;                               
        CAN_InitStructure.CAN_Prescaler=32;                                          // 分频系数为32
        CAN_Init(CAN, &CAN_InitStructure);                                                // 初始化CAN1

使用特权

评论回复
沙发
| 2019-11-29 11:38 | 只看该作者
如果系统时钟48MHz的话,根据你的配置应该是250K.



整整差6倍,会不会你PLL根本没起作用? 还是说测错了?

使用特权

评论回复
板凳
 楼主 | 2019-11-29 11:54 | 只看该作者
香水城 发表于 2019-11-29 11:38
如果系统时钟48MHz的话,根据你的配置应该是250K.

谢谢版主,示波器找一个最窄方波测量宽度,这应该就是一个bit啊,PLL不会错啊。
这是PLL设定代码:
  if (HSEStatus == (uint32_t)0x01)
  {
    /* Enable Prefetch Buffer and set Flash Latency */
    FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY;

    /* HCLK = SYSCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
      
    /* PCLK = HCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE_DIV1;

    /* PLL configuration = HSE * 6 = 48 MHz */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLMULL6);
            
    /* Enable PLL */
    RCC->CR |= RCC_CR_PLLON;

    /* Wait till PLL is ready */
    while((RCC->CR & RCC_CR_PLLRDY) == 0)
    {
    }

    /* Select PLL as system clock source */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
    RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;   

    /* Wait till PLL is used as system clock source */
    while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)RCC_CFGR_SWS_PLL)
    {
    }
  }

使用特权

评论回复
地板
 楼主 | 2019-11-29 12:09 | 只看该作者
香水城 发表于 2019-11-29 11:38
如果系统时钟48MHz的话,根据你的配置应该是250K.

找到原因了,感谢版主提醒,竟然是外部晶振没焊跑到默认内部8M了,难怪差了6倍,多谢

使用特权

评论回复
5
| 2019-11-29 12:11 | 只看该作者
大多数是晶振问题,可以用CAN波特率计算器啊

使用特权

评论回复
6
| 2019-11-29 13:18 | 只看该作者
本帖最后由 香水城 于 2019-11-30 10:21 编辑
ipman 发表于 2019-11-29 12:09
找到原因了,感谢版主提醒,竟然是外部晶振没焊跑到默认内部8M了,难怪差了6倍,多谢 ...

我也觉得奇怪,刚好差6倍,即没有倍频。
一个关于STM32 CAN波特率异常的话题

使用特权

评论回复
7
| 2019-12-11 14:02 | 只看该作者
这个  错误真的让人无话可说

使用特权

评论回复
8
| 2019-12-11 14:04 | 只看该作者
虽然错误低级  但是过程还是有收获的

使用特权

评论回复
9
| 2019-12-11 14:05 | 只看该作者
这次知道怎么计算了

使用特权

评论回复
扫描二维码,随时随地手机跟帖
*滑动验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表
快3注册邀请码tt 固始县| 辉县市| 岑溪市| 汉中市| 阳江市| 景洪市| 叶城县| 襄樊市| 贵溪市| 饶平县| 文登市| 柘荣县| 内丘县| 荣昌县| 寿宁县| 屏边| 宁国市| 屏东县| 自治县| 洪湖市| 本溪市| 红原县| 河津市| 荆州市| 江安县| 兴仁县| 拜城县| 灵寿县| 社旗县| 安丘市| 开封县| 乳山市| 怀安县| 梁河县| 随州市| 庄河市| 乌兰县| 金堂县| 左贡县| 扎鲁特旗| 遂宁市|