1、基于艾克姆科技的STC32G12K128开发板+CAN转TTL模块,提供CAN通信的测试程序,程序是库函数版本。
2、实验连接图如下:(本实验用到的是单片机的CAN2)
3、CAN总线通信肯定不能只有一个节点,所以用户还需电脑端连接个USB转CAN的转换器方便测试。USB转CAN转换器的CANH连接上图CANH端子,USB转CAN转换器的CANL连接上图CANL端子。
4、硬件连接好后,电脑打开USB转CAN测试用软件,设置波特率500K,通信界面如下:
5、程序源码基于Keil C251编写。详见附件
单片机源程序如下:- #include "can.h"
- /**************************************************************************
- 功能描述:CAN口初始化
- 入口参数:无
- 返回值:无
- *************************************************************************/
- void CAN_Init(void)
- {
- CAN_InitTypeDef CAN_InitStructure; //结构定义
-
- P0_MODE_IO_PU(GPIO_Pin_2|GPIO_Pin_3); //P0.2~P0.3 设置为准双向口
- CAN2_SW(CAN2_P02_P03); //CAN2_P02_P03,CAN2_P52_P53,CAN2_P46_P47,CAN2_P72_P73
- EAXSFR(); //将EAXFR位置1,以访问在XDATA区域的扩展SFR
- CAN_InitStructure.CAN_Enable = ENABLE; //CAN功能使能 ENABLE或DISABLE
- CAN_InitStructure.CAN_IMR = CAN_ALLIM; //CAN中断寄存器 CAN_DOIM,CAN_BEIM,CAN_TIM,CAN_RIM,CAN_EPIM,CAN_EWIM,CAN_ALIM,CAN_ALLIM,DISABLE
- CAN_InitStructure.CAN_SJW = 0; //重新同步跳跃宽度 0~3
- CAN_InitStructure.CAN_SAM = 0; //总线电平采样次数 0:采样1次; 1:采样3次
- //CAN总线波特率=Fclk/((1+(TSG1+1)+(TSG2+1))*(BRP+1)*2)
- CAN_InitStructure.CAN_TSG1 = 2; //同步采样段1 0~15
- CAN_InitStructure.CAN_TSG2 = 1; //同步采样段2 1~7 (TSG2 不能设置为0)
- CAN_InitStructure.CAN_BRP = 3; //波特率分频系数 0~63
- //24000000/((1+3+2)*4*2)=500KHz
- CAN_InitStructure.CAN_ACR0 = 0x00; //总线验收代码寄存器 0~0xFF
- CAN_InitStructure.CAN_ACR1 = 0x00;
- CAN_InitStructure.CAN_ACR2 = 0x00;
- CAN_InitStructure.CAN_ACR3 = 0x00;
- CAN_InitStructure.CAN_AMR0 = 0xff; //总线验收屏蔽寄存器 0~0xFF
- CAN_InitStructure.CAN_AMR1 = 0xff;
- CAN_InitStructure.CAN_AMR2 = 0xff;
- CAN_InitStructure.CAN_AMR3 = 0xff;
- CAN_Inilize(CAN2,&CAN_InitStructure); //CAN2 初始化
-
- NVIC_CAN_Init(CAN2,ENABLE,Priority_1); //中断使能, CAN1/CAN2; ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
- }
- /*********************************END FILE********************************************/
复制代码
Keil代码下载:
程序.7z
(45.67 KB, 下载次数: 46)
|