STM32的CAN波特率计算
STM32里的CAN ,, 带有FIFO,中断等, 这里主要提一下内部的时钟应用.
bxCAN挂接在APB1总线上,采用总线时钟,所以我们需要知道APB1的总线时钟是多少. 我们先看看下图,看看APB1总线时钟:
APB1时钟取自AHB的分频, 而AHB又取自系统时钟的分频, 系统时钟可选HSI,HSE, PLLCLK, 这个在例程的RC设置里都有的,
然后再看看有了APB1的时钟后,如何算CAN的总线速率, 先看下图:
有了上边的这个图,基本就清楚了.
总线时钟MHz (3+TS1+TS2)*(BRP+1)
===================================================
下面是我的计算:
= CAN_SJW_1tq;
= CAN_BS1_3tq;
注意//#define CAN_BS1_3tq ((uint8_t)0x02) /*!< 3 time quantum */
= CAN_BS2_5tq;
= 4;//2
nominal bit time(3+5+1)tq=9tq
关于分频系数查看
static void SetSysClockTo72(void) 函数
/* HCLK = SYSCLK */
/* PCLK2 = HCLK */
/* PCLK1 = HCLK/2 */
所以can时钟 72MHZ/2/4=9 Mhz
tq=1/36Mhz
波特率为 1/nominal bit time= 9/9=1MHZ
=========================================
-----------------------------------------------
====================================================
void CAN_Configuration(void)
{
CAN_InitTypeDef CAN_InitStructure;
CAN_FilterInitTypeDef CAN_FilterInitStructure;
/* CAN register init */
CAN_DeInit();
CAN_StructInit(&CAN_InitStructure);
/* CAN cell init */
=DISABLE;
=DISABLE;
=DISABLE;
=DIS
stm32can波特率设置指南 来自淘豆网m.daumloan.com转载请标明出处.