stm32_can波特率设置指南培训资料

上传人:go****e 文档编号:137416183 上传时间:2020-07-08 格式:DOC 页数:6 大小:24.50KB
返回 下载 相关 举报
stm32_can波特率设置指南培训资料_第1页
第1页 / 共6页
stm32_can波特率设置指南培训资料_第2页
第2页 / 共6页
stm32_can波特率设置指南培训资料_第3页
第3页 / 共6页
stm32_can波特率设置指南培训资料_第4页
第4页 / 共6页
stm32_can波特率设置指南培训资料_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《stm32_can波特率设置指南培训资料》由会员分享,可在线阅读,更多相关《stm32_can波特率设置指南培训资料(6页珍藏版)》请在金锄头文库上搜索。

1、stm32_can波特率设置指南精品文档STM32的CAN波特率计算STM32里的CAN 支持2.0A,2.0B, 带有FIFO,中断等, 这里主要提一下内部的时钟应用.bxCAN挂接在APB1总线上,采用总线时钟,所以我们需要知道APB1的总线时钟是多少. 我们先看看下图,看看APB1总线时钟:APB1时钟取自AHB的分频, 而AHB又取自系统时钟的分频, 系统时钟可选HSI,HSE, PLLCLK, 这个在例程的RC设置里都有的,然后再看看有了APB1的时钟后,如何算CAN的总线速率, 先看下图:有了上边的这个图,基本就清楚了. 总线时钟MHz (3+TS1+TS2)*(BRP+1)=下面

2、是我的计算:CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;CAN_InitStructure.CAN_BS1 = CAN_BS1_3tq; 注意/#define CAN_BS1_3tq (uint8_t)0x02) /*! 3 time quantum */CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq;CAN_InitStructure.CAN_Prescaler = 4;/2nominal bit time(3+5+1)tq=9tq关于分频系数查看 system_stm32f10x.c下面的static void SetSy

3、sClockTo72(void) 函数/* HCLK = SYSCLK */* PCLK2 = HCLK */* PCLK1 = HCLK/2 */所以can时钟 72MHZ/2/4=9 Mhztq=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_St

4、ructInit(&CAN_InitStructure); /* CAN cell init */ CAN_InitStructure.CAN_TTCM=DISABLE; CAN_InitStructure.CAN_ABOM=DISABLE; CAN_InitStructure.CAN_AWUM=DISABLE; CAN_InitStructure.CAN_NART=DISABLE; CAN_InitStructure.CAN_RFLM=DISABLE; CAN_InitStructure.CAN_TXFP=DISABLE; CAN_InitStructure.CAN_Mode=CAN_Mod

5、e_Normal; CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; CAN_InitStructure.CAN_BS1=CAN_BS1_9tq; CAN_InitStructure.CAN_BS2=CAN_BS2_8tq; CAN_InitStructure.CAN_Prescaler=200; CAN_Init(&CAN_InitStructure); /* CAN filter init */ CAN_FilterInitStructure.CAN_FilterNumber=0; CAN_FilterInitStructure.CAN_FilterMode=C

6、AN_FilterMode_IdMask; CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_16bit; CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000; CAN_FilterInitStructure.CAN_FilterIdLow=0x0000; CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000; CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000; CAN_FilterIni

7、tStructure.CAN_FilterFIFOAssignment=0; CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; CAN_FilterInit(&CAN_FilterInitStructure); 注意/#define CAN_BS1_3tq (uint8_t)0x02) /*!BTR = (u32)(u32)CAN_InitStruct-CAN_ModeCAN_SJW CAN_BS1 CAN_BS2 CAN_Prescaler - 1); 总结一下 Fpclk=36M 时 can波特率为250k 的配置为 /* CAN c

8、ell init */ CAN_InitStructure.CAN_TTCM=DISABLE; CAN_InitStructure.CAN_ABOM=DISABLE; CAN_InitStructure.CAN_AWUM=DISABLE; CAN_InitStructure.CAN_NART=DISABLE; CAN_InitStructure.CAN_RFLM=DISABLE; CAN_InitStructure.CAN_TXFP=DISABLE; CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack; CAN_InitStructure.CAN_SJW=

9、CAN_SJW_1tq; CAN_InitStructure.CAN_BS1=CAN_BS1_8tq; CAN_InitStructure.CAN_BS2=CAN_BS2_7tq; CAN_InitStructure.CAN_Prescaler=9; CAN_Init(&CAN_InitStructure); 250k =的:将can总线波特率设置为250k 在官方的can例程上给出了100k 查询和500k 中断方式的例子分别设置如下: CAN_Polling: /* CAN cell init */ CAN_InitStructure.CAN_TTCM=DISABLE; CAN_InitS

10、tructure.CAN_ABOM=DISABLE; CAN_InitStructure.CAN_AWUM=DISABLE; CAN_InitStructure.CAN_NART=DISABLE; CAN_InitStructure.CAN_RFLM=DISABLE; CAN_InitStructure.CAN_TXFP=DISABLE; CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack; CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; CAN_InitStructure.CAN_BS1=CAN_BS1_8tq; CAN_I

11、nitStructure.CAN_BS2=CAN_BS2_7tq; CAN_InitStructure.CAN_Prescaler=5; CAN_Init(&CAN_InitStructure); 100k /* CAN cell init */ CAN_Interrupt CAN_InitStructure.CAN_TTCM=DISABLE; CAN_InitStructure.CAN_ABOM=DISABLE; CAN_InitStructure.CAN_AWUM=DISABLE; CAN_InitStructure.CAN_NART=DISABLE; CAN_InitStructure.

12、CAN_RFLM=DISABLE; CAN_InitStructure.CAN_TXFP=DISABLE; CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack; CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; CAN_InitStructure.CAN_BS1=CAN_BS1_8tq; CAN_InitStructure.CAN_BS2=CAN_BS2_7tq; CAN_InitStructure.CAN_Prescaler=1; CAN_Init(&CAN_InitStructure); /500k can时钟是RCC_AP

13、B1PeriphClock,你要注意CAN时钟频率CAN波特率 = RCC_APB1PeriphClock/CAN_SJW+CAN_BS1+CAN_BS2/CAN_Prescaler; 如果CAN时钟为8M, CAN_SJW = 1,CAN_BS1 = 8,CAN_BS2 = 7,CAN_Prescaler = 2 那么波特率就是=8M/(1+8+7)/2=250K =得到500Kb/s的波特率CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;CAN_InitStructure.CAN_Prescaler=1;每一位的Tq数目 = 1 (固定SYNC_SEG) + 8 (BS1) + 7 (BS2) = 16如果CAN时钟是 8 MHz : (8M / 1

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 幼儿/小学教育 > 其它小学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号