CAN总线通信程序:UART与CAN协议转换
需积分: 17 76 浏览量
更新于2024-07-21
2
收藏 53KB DOC 举报
"CAN总线通讯程序用于实现CAN与UART之间的协议转换,程序基于P89C61X2BA单片机,采用11.0592MHz晶振,中断0处理CAN总线中断,上拉电阻配置。CAN发送以查询方式,接收用中断方式,看门狗复位时间为1.2秒。SJA1000控制器使用8MHz晶振,工作在Peil模式。串口接收采用中断,发送采用查询,波特率可调。串口数据以8字节为一组通过CAN发送,现在改为每接收到一帧完整数据就启动一次CAN传输,并根据串口接收的数据长度发送相应字节数。CAN接收的数据也会回传到串口,同时程序能识别CAN报文的字节长度。看门狗芯片是MAX1232CPA,硬件溢出时间为1.2秒。"
正文:
这个CAN总线通讯程序是设计用来在微控制器P89C61X2BA的基础上,实现CAN总线与通用异步收发传输器(UART)之间的通信。程序中提到的关键点如下:
1. **硬件配置**:P89C61X2BA单片机以11.0592MHz的晶振运行,CAN总线中断连接到单片机的中断0,中断处理具有上拉电阻,波特率可配置。
2. **CAN总线接口**:使用SJA1000作为CAN控制器,其工作在8MHz的Peil模式,提供了对CAN总线的高速访问。CAN总线的发送操作是通过查询方式执行,而接收则通过中断机制来处理。
3. **看门狗定时器**:看门狗芯片MAX1232CPA负责系统监控,当系统运行出现异常时进行复位,其硬件溢出时间设定为1.2秒。
4. **数据处理**:原始程序中,串口接收到的每8个字节数据会被打包并通过CAN总线发送。但在后来的修改中,程序优化了这一过程,现在每当接收到一帧完整数据,不论数据长度,都会立即启动一次CAN传输,确保数据实时性。
5. **帧间隔判定**:为了区分不同串行帧,程序通过比较连续两个数据之间的时间间隔(大于当前波特率下5个字节的传输时间)来判断是否属于不同帧。
6. **数据回传**:当CAN总线接收到一帧信息后,会通过串口将该信息回传,改进后,程序能够识别接收到的CAN报文的字节长度,并仅发送这些字节到串口,避免冗余传输。
7. **内存缓冲区**:定义了多个缓冲区变量,如`UART_RX_Data`用于存储串口接收的数据,`CAN_TX_Data`用于存放待发送到CAN总线的数据,以及`CAN_RX_ID`和`CAN_TX_ID`用于标识CAN消息的来源和目标。
这个程序的核心在于实现两者的协议转换,确保数据在不同通信协议间的准确无误传输,同时也体现了对实时性和可靠性的考虑。通过这样的设计,可以灵活适应不同的应用需求,比如在汽车电子、工业自动化等领域,CAN总线通常用于实现设备间的高效通信,而UART则常用于设备与主机或调试工具的简单连接。
2011-11-26 上传
2018-10-20 上传
2013-03-17 上传
2023-06-07 上传
203 浏览量
zhouyuniuniu
- 粉丝: 0
- 资源: 1
最新资源
- Android应用源码之写的google map api 应用.zip项目安卓应用源码下载
- AdvExpFig:导出 MATLAB 图-matlab开发
- SuperChangelog:超级变更日志插件的源代码
- death_calc_version2
- hw_python_oop
- LX-PWM,ev3程序怎么看c语言源码,c语言程序
- material-typeahead-sample
- 基于Linux、QT、C++的“别踩白块儿”小游戏
- physx-js:PhysX for JavaScript
- 提取均值信号特征的matlab代码-First_unofficial_entry_2021:First_unofficial_entry_20
- Siege_solution_website
- ecf-2021-jd
- number.github.io:通过Szymon Rutyna
- Kinesys-RenPy-Practice:RenPy制作游戏
- Ad,c语言源码反码补码转换代码,c语言程序
- vgrid:具有魔术媒体查询混合功能的可变SCSS网格系统