




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、STM32勺can总线实验心得 (一)工业现场总线 CAN 的基本介绍以及 STM32 的 CAN 模块简介 首先通读手册中关于CAN的文档,必须精读。 STM32F10 xxx参考手册 Rev7V3.pdf http:/ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, /* Configure CAN pin: TX */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO
2、_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, 重定义地址 1 模式 /* Configure CAN pin: RX */ /GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; /GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; /GPIO_Ini
3、t(GPIOB, /* Configure CAN pin: TX */ /GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; /GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /GPIO_Init(GPIOB, /* Configure CAN Remap 重影射 */ /GPIO_PinRemapConfig(GPIO_Remap1_CAN, ENABLE); 重定义地址 2 模式 /* Configure C
4、AN pin: RX */ /GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; /GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; /GPIO_Init(GPIOD, /* Configure CAN pin: TX */ /GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; /GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /GPIO
5、_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /GPIO_Init(GPIOD, /* Configure CAN Remap 重影射 */ /GPIO_PinRemapConfig(GPIO_Remap2_CAN, ENABLE); 设置完 CAN 的引脚之后还需要打开 CAN 的时钟: /* CAN Periph clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN, ENABLE); (四) CAN 波特率设置 4、我们需要搞明白CAN波特率的设置,这个章节也是使用 CAN勺最重要的部
6、分 之一,因为这实际应用中我们需要根据我们实际的场合来选择 CAN 的波特率。 一般情况下面 1M bps 的速率下可以最高可靠传输 40 米以内的距离。 在 50K 以下的波特率中一般可以可靠传输数公里远。 对于波特率的设置需要详细学习参考手册对应部分的解释。 我们在调试软件的时 候可以使用示波器来测试 CANTX引脚上的波形的波特率,这样可以得到事半功 倍的效果,大大的缩短调试学习的时间。 / * / BaudRate = 1 / NominalBitTime / NominalBitTime = 1tq + tBS1 + tBS2 / tq = (BRP9:0 + 1) x tPCLK
7、/ tPCLK = CANs clock = APB1s clock / * 也就是 BaudRate = APB1 / (BS1 + BS2 + 1) * Prescaler) 这里注意的是采用点的位置,也就时BS1,BS2的设置问题,这里我也找了一些资 料,抄录下来给大家 , 是 CANopen 协议中推荐的设置。 1Mbps 速率下,采用点的位置在 6tq 位置处, BS1=5, BS2=2 500kbps 速率下,采用点的位置在 8tq 位置处, BS1=7, BS2=3 250kbps 速率下,采用点的位置在 14tq 位置处, BS1=13, BS2=2 125k, 100k, 5
8、0k, 20k, 10k 的采用点位置与 250K 相同。 因此我们需要重视的有软件中的这么几个部分: / 设置 AHB 时钟( HCLK) / RCC_SYSCLK_Div1 AHB 时钟=系统时钟 RCC_HCLKConfig(RCC_SYSCLK_Div8); / 设置低速 AHB 时钟( PCLK1) / RCC_HCLK_Div2 APB1 时钟 = HCLK / 2 RCC_PCLK1Config(RCC_HCLK_Div2); / PLLCLK = 8MHz * 8 = 64 MHz / 设置 PLL 时钟源及倍频系数 RCC_PLLConfig(RCC_PLLSource_HS
9、E_Div1, RCC_PLLMul_8); CAN波特率设置中需要的就是 PCLK1的时钟。 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=5; 通过上面部分的时钟设置我们已经可以算出我们的波特率了 CAN_bps = PCLK1 / (1 + 7 +
10、8) * 5) = 25K bps 大家也可以实际测试中修改时钟值来通过示波器测试我们需要的波特率是否正 确例如将PLLCLK设置降低一半: / PLLCLK = 8MHz * 4 = 32 MHz / 设置 PLL 时钟源及倍频系数 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_4); 那么我们得到的CAN_bps也会降低一半。 接下来还可以修改 HCLK 和 PCLK1 ,其实最终这几个分频和倍频值最终影响的 都是 PCLK1。 通过几次试验,相信大家应该很容易掌握波特率的设置了 设置完波特率我们直接测试函数: /* CAN transm
11、it at 100Kb/s and receive by polling in loopback mode*/ TestRx = CAN_Polling(); if (TestRx = FAILED) /* Turn on led connected to PA.00 pin (LD1) */ GPIO_SetBits(GPIOA, GPIO_Pin_0); else /* Turn off led connected to PA.00 pin (LD1) */ GPIO_ResetBits(GPIOA, GPIO_Pin_0); /* CAN transmit at 500Kb/s and
12、receive by interrupt in loopback mode*/ TestRx = CAN_Interrupt(); if (TestRx = FAILED) /* Turn on led connected to PA.01 pin (LD2) */ GPIO_SetBits(GPIOA, GPIO_Pin_1); else /* Turn off led connected to PA.01 pin (LD2) */ GPIO_ResetBits(GPIOA, GPIO_Pin_1); 将 CAN软件仿真模拟器 调用出来 塩h Peripherals I Tools SVCS
13、 Window Help* 站Reset CPUI隅鲁亦力闪 1 O5S L : 064 065 : 06 盼 06? OS9: Core Peripherals EotTEFj Russet and Clccli CDHttol AP CAN_InitStructure.CAN_Mode=CAN_Mode_Normal; 接下来我们就可以做实验了 . 但是由于 RealView MDK 的 CAN 模块没有办法接 收 , 所以我们只做发送的例子 . 我们的例子中分别发送两帧数据 : (1) TestStatus CAN_Polling(void) 查询发送 第一帧数据为 : ID 为 0 x
14、11, 数据为 8 个字节的一个数据包 . TxMessage.StdId=0 x11; TxMessage.RTR=CAN_RTR_DATA; TxMessage.IDE=CAN_ID_STD; TxMessage.DLC=8; TxMessage.Data0=0 x01; TxMessage.Data1=0 x02; TxMessage.Data2=0 x03; TxMessage.Data3=0 x04; TxMessage.Data4=0 x05; TxMessage.Data5=0 x06; TxMessage.Data6=0 x07; TxMessage.Data7=0 x08;
15、(2) TestStatus CAN_Interrupt(void) 中断发送 第二帧数据为 :ID 为 0 x1234, 数据为 8 个字节的一个数据包 TxMessage.StdId=0 x12; TxMessage.ExtId=0 x34; TxMessage.IDE=CAN_ID_EXT; TxMessage.RTR=CAN_RTR_DATA; TxMessage.DLC=8; TxMessage.Data0=0 x11; TxMessage.Data1=0 x22; TxMessage.Data2=0 x33; TxMessage.Data3=0 x44; TxMessage.Dat
16、a4=0 x55; TxMessage.Data5=0 x66; TxMessage.Data6=0 x77; TxMessage.Data7=0 x88; CAN_Transmit( 在主函数中初始化之后加上这两句发送函数 : /* CAN transmit at 100Kb/s and receive by polling in Normal mode*/ CAN_Polling(); while(i+ 1000); /* CAN transmit at 500Kb/s and receive by interrupt in Normal mode*/ CAN_Interrupt(); 程
17、序改完了 , 我们需要编译通过后 , 点软件仿真 . 将 CAN软件仿真模拟器 调用出来 . 接下来我们全速运行到while(1) 就可以看到结果了 O |唱冋” 9 ft Ef B 偽%, /址产 CAIJ: 0ommunication 3 056 057 05S 061 (1S6 CAN_Pclli while(i+ /* CAN tr CAN_Inter while (1) ) Ntinber | 一-怖喩j ILUHoM - Ud Xmit Xmit CAN: Transmit Mailbox: A- 0 01 02 0304 050607 08 11 22 33 44 55 6S 7
18、7 88 Nun | ID (Hex) RTR TXRQ DLC Data(HeJ 附-l/ 扯大沃妇大托吠沃 DS8 069 070 (J71 072 im 074 * void Function Descripti Input. Output Return RCC Coi M5Eh 076 077 RCC sys RCC Delnii 下载(87.37 KB) 2009-8-16 00:24 C 00000034D 曲 0 S 11 223344 55 66 77 S8 1 000Data 0 0 moorn oom on oo oo 2 000Data D 0 oo oom oooooo oo oo -Identifier Length control H timf stam
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025内蒙古呼伦贝尔农垦集团有限公司社会招聘备考及1套完整答案详解
- 鼠防知识培训课件
- 机柜租用合同(二)
- 沥青购销合同范本
- 劳务施工合同范本
- 韩国跆拳心课件培训
- 煤矿安全培训计划通知课件
- 海湾消防系统培训课件
- 急诊科护理查房课件
- 急诊科护士课程
- 北师大版七年级数学上册《生活中的立体图形》第2课时示范公开课教学课件
- 耳尖放血课件完整版
- 手术病人病情观察能力培养业务学习专家讲座
- GB/T 14715-2017信息技术设备用不间断电源通用规范
- 起重设备安装安全事故应急预案
- 教研组、备课组新学期教研组长会议课件讲义
- 物流网络规划与设计课件
- JB∕T 5245.4-2017 台式钻床 第4部分:技术条件
- 鞘膜积液的护理查房
- 《水工监测工》习题集最新测试题含答案
- 部编版三年级上册道德与法治第一单元第1课《学习伴我成长》课件
评论
0/150
提交评论