stm32 can波特率计算

    xiaoxiao2021-03-25  54

    1.首先要确定can时钟,即

    /* CAN1 Periph clock enable */   RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);

    该时钟为pclk1 ,我们去system_stm32f10x.c或system_stm32f4xx.c文件里确认pclk1是主时钟的多少分频

     /* PCLK1 = HCLK */     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;//主时钟2分频,若主时钟为72M则pclk1=36M,

    或者

      /* PCLK1 = HCLK / 4*/     RCC->CFGR |= RCC_CFGR_PPRE1_DIV4;//主时钟4分频,若主时钟为180M则pclk1=45M,

    2.由can的配置计算当前的波特率:

    如: ca时钟为36M,

      CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;

      CAN_InitStructure.CAN_BS1 = CAN_BS1_12tq;   CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq;

      CAN_InitStructure.CAN_Prescaler = 2;

    则can的波特率为:36M/((1+12+5)*2)=1M

    3.采样点问题(该问题有人设计了专门的软件计算,以下内容取自其他博客,暂未验证)

    另外尽可能的把采样点设置为 CiA 推荐的值: 75%     when 波特率 > 800K 80%     when 波特率 > 500K 87.5%   when 波特率 <= 500K 所以对于 100K 的波特率(假定使用 8MHz 时钟)  可以修改该BS1 BS2 为: CAN_InitStructure.CAN_Prescaler=5; CAN_InitStructure.CAN_BS1=CAN_BS1_13tq; CAN_InitStructure.CAN_BS2=CAN_BS2_2tq; (1+13) / (1+13+2) = 87.5%

    转载请注明原文地址: https://ju.6miu.com/read-289583.html

    最新回复(0)