找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4096|回复: 4
打印 上一主题 下一主题
收起左侧

STM32f429 CAN双机测试源码

[复制链接]
跳转到指定楼层
楼主
ID:295978 发表于 2018-3-23 15:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
高难度实用程序代码
分享给小伙伴
共同进步,不断学习,会继续研究103系列和传感器通信
感谢平台

/*********************************************************************************************/
【*】程序简介
-工程名称:CAN—双机通讯
-MDK版本:5.16
-ST固件库版本:1.5.1

【 !】功能简介:
使用CAN在两个开发板之间通信。
学习目的:学会使用CAN通信。

【 !!】注意事项:
接口:CAN-H  CAN-L
跳线帽:使用跳线帽连接 C/4-5V<--->5V (出厂默认没有连接跳线帽,实验前请先连接!!!)。

连接 C/4-5V<--->5V后,由于CAN芯片供电,它的PB8/PB9引脚与液晶数据引脚共用,
会干扰液晶屏,液晶屏颜色会畸变。

CAN波特率1MHz, 报文使用扩展ID,报文滤波,只接收0x1314 EXID的报文。

【 !】实验操作:
若使用两个秉火开发板进行实验,使用线连接两个板子的CAN-H,CAN-L(H与H相连,L与L相连)。
然后两个开发板都下载本程序。

电脑端使用串口调试助手,选择电脑与STM32相连的COM口,设置为115200-N-8-1,
复位开发板,即可接收STM32串口发送给电脑的调试信息。

准备好后,按下其中一个开发板的KEY1键,会使用CAN向外发送0-255的数字。
若开发板的CAN接收到256个字节数据,会把数据以16进制形式打印出来。

/*********************************************************************************************/
【*】 引脚分配
CAN芯片
CAN芯片的电源引脚与排针相连,通过跳线帽STM32的串口相连。(出厂默认没有连接跳线帽)
    5V        <--->C/4-5V  (可通过跳线帽连接到5v)   
    RXD        <--->PB8     
    TXD        <--->PB9     
   
串口(TTL-USB TO USART):
CH340的收发引脚与STM32的发收引脚相连。
    RX<--->PA9
    TX<--->PA10
   
/*********************************************************************************************/

【*】 时钟

A.晶振:
-外部高速晶振:25MHz
-RTC晶振:32.768KHz

B.各总线运行时钟:
-系统时钟 = SYCCLK = AHB1 = 180MHz
-APB2 = 90MHz
-APB1 = 45MHz

C.浮点运算单元:
  不使用

STM32f429单片机源程序如下:
  1. /**
  2.   ******************************************************************************
  3.   * @file    main.c
  4.   * @author  fire
  5.   * @version V1.0
  6.   * @brief   CAN通讯实验
  7.   ******************************************************************************
  8.   * @attention
  9.   ******************************************************************************
  10.   */
  11.   
  12. #include "stm32f4xx.h"
  13. #include "./led/bsp_led.h"
  14. #include "./usart/bsp_debug_usart.h"
  15. #include "./can/bsp_can.h"
  16. #include "./key/bsp_key.h"

  17. __IO uint32_t flag = 0;                 //用于标志是否接收到数据,在中断函数中赋值
  18. CanTxMsg TxMessage;                             //发送缓冲区
  19. CanRxMsg RxMessage;                                 //接收缓冲区

  20. /// 不精确的延时
  21. static void can_delay(__IO u32 nCount)
  22. {
  23.         for(; nCount != 0; nCount--);
  24. }

  25. /**
  26.   * @brief  主函数
  27.   * @param  无
  28.   * @retval 无
  29.   */
  30. int main(void)
  31. {
  32.        
  33.         LED_GPIO_Config();
  34.        
  35.   /*初始化USART1*/
  36.   Debug_USART_Config();
  37.        
  38.         /*初始化按键*/
  39.         Key_GPIO_Config();

  40.         /*初始化can,在中断接收CAN数据包*/
  41.         CAN_Config();
  42.        
  43.         printf("\r\n 欢迎使用秉火  STM32 F429 开发板。\r\n");
  44.   printf("\r\n 秉火F429 CAN通讯实验例程\r\n");
  45.        
  46.         printf("\r\n 实验步骤:\r\n");

  47.         printf("\r\n 1.使用导线连接好两个CAN讯设备\r\n");
  48.         printf("\r\n 2.使用跳线帽连接好:5v --- C/4-5V \r\n");
  49.         printf("\r\n 3.按下开发板的KEY1键,会使用CAN向外发送0-7的数据包,包的扩展ID为0x1314 \r\n");
  50.         printf("\r\n 4.若开发板的CAN接收到扩展ID为0x1314的数据包,会把数据以打印到串口。 \r\n");
  51.         printf("\r\n 5.本例中的can波特率为1MBps,为stm32的can最高速率。 \r\n");

  52.   while(1)
  53.         {
  54.                 /*按一次按键发送一次数据*/
  55.                 if(        Key_Scan(KEY1_GPIO_PORT,KEY1_PIN) == KEY_ON)
  56.                 {
  57.                         LED_BLUE;
  58.                         CAN_SetMsg(&TxMessage);
  59.                        
  60.                         CAN_Transmit(CANx, &TxMessage);
  61.                        
  62.                         can_delay(10000);//等待发送完毕,可使用CAN_TransmitStatus查看状态
  63.                        
  64.                         LED_GREEN;
  65.                        
  66.                         printf("\r\n已使用CAN发送数据包!\r\n");                        
  67.                         printf("\r\n发送的报文内容为:\r\n");
  68.                         printf("\r\n 扩展ID号ExtId:0x%x \r\n",TxMessage.ExtId);
  69.                         CAN_DEBUG_ARRAY(TxMessage.Data,8);


  70.                 }
  71.                 if(flag==1)
  72.                 {               
  73.                         LED_GREEN;
  74.                         printf("\r\nCAN接收到数据:\r\n");       

  75.                         CAN_DEBUG_ARRAY(RxMessage.Data,8);
  76.                        
  77.                         flag=0;
  78.                 }
  79.        
  80.        
  81.         }

  82. }



  83. /*********************************************END OF FILE**********************/

复制代码

所有资料51hei提供下载:
CAN—双机通讯.zip (559.47 KB, 下载次数: 86)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:429205 发表于 2018-11-21 11:08 | 只看该作者
請問這是適用STM32F429ZI-DISC1的開發板用嗎?
回复

使用道具 举报

板凳
ID:429205 发表于 2018-11-21 11:10 | 只看该作者
請問這程式適用STM32F429ZI-DISC1開發板嗎?
回复

使用道具 举报

地板
ID:438422 发表于 2018-12-3 15:06 | 只看该作者
正需要STM32F429 CAN总线设置例程,文件里不知道有没有包含CAN初始化,先顶个贴
回复

使用道具 举报

5#
ID:438422 发表于 2018-12-3 15:07 | 只看该作者
正需要STM32F429 CAN总线初始化例程,不知道资料里面有没有,先顶个帖
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表