1.1 案例 CAN通信
1.1.1 简介
CAN是控制器局域网络(Controller Area Network)的简称,是由德国BOSCH公司开发的,并最终成为国际标准,是国际上应用最广泛的现场总线之一。CAN具有高性能和高可靠性,已经被广泛应用于工业自动化、船舶、汽车、工业设备等方面。
AT32F437 CAN主要具有以下特性:
― 支持CAN协议2.0A和2.0B.
― 软件触发或者外部触发转换波特率最高可达1M bit/s
― 支持时间触发通信
― 中断使能和屏蔽
― 自动重传功能可配
发送
― 3个发送邮箱
― 发送优先级可配置
― 支持发送时间戳
接收
― 2个深度为3的FIFO
― 28组过滤器组
― 支持标识符列表模式
― 支持标识符掩码模式
― 支持FIFO溢出管理
― 时间触发通信模式
― 16位定时器
― 发送时间戳
AT32 SUFR板载了两颗CAN芯片,型号为SN65HVD230DR,在测试时需要注意正确设置跳线帽,以及将两颗CAN芯片的H和L信号线分别对接在一起。
1.1.2 资源准备
硬件环境:
对应产品型号的AT-SURF-F437 Board
软件环境:
AT32F435_437_Firmware_Library_V2.x.x\project\at_sufr_f437\examples\can
1.1.3 硬件设计
本案例使用的硬件资源有TFTLCD液晶显示屏、两颗SN65HVD230DR CAN芯片,对应的引脚如下:
对应的电路原理如下:
1.1.4 软件设计
1)CAN通讯测试
初始化TFT LCD
初始化CAN1 和 CAN2
CAN1发送数据给CAN2,CAN2发送数据给CAN1
2)代码介绍
main函数代码描述
int main(void)
{
uint32_t cnt = 0;
/* 初始化系统时钟*/
system_clock_config();
/* 初始化中断优先级分组*/
nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
/* 初始化延时函数 */
delay_init();
/* 初始化LCD */
lcd_init(LCD_DISPLAY_VERTICAL);
/* can 1 初始化 */
can_init(CAN1);
/* can 2 初始化 */
can_init(CAN2);
/* 显示信息*/
lcd_string_show(10, 20, 200, 24, 24, (uint8_t*)"CAN Test");
while(1)
{
/* can 1 数据初始化 */
can_data_init(CAN1);
/* 通过 can 1 发送数据 */
can_transmit_data(CAN1,can1_tx_message);
/* can 2 数据初始化 */
can_data_init(CAN2);
/* 通过 can 2 发送数据 */
can_transmit_data(CAN2, can2_tx_message);
/* can 1 接收到数据 */
if(can1_rx_flag != 0)
{
/* 清除can 1接收数据标志 */
can1_rx_flag =