你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 6419|回复: 11

【HAL库每天一例】第057例:CAN-双机通信测试

[复制链接]

122

主题

129

回帖

0

蝴蝶豆

论坛元老

最后登录
2019-5-28
发表于 2016-7-1 09:01:12 | 显示全部楼层 |阅读模式
【HAL库每天一例】系列例程从今天开始持续更新。。。。。
我们将坚持每天至少发布一个基于YS-F1Pro开发板的HAL库例程,
该系列例程将带领大家从零开始使用HAL库,后面会持续添加模块应用例程。
同样的,我们还程序发布基于HAL库的指导文档和视频教程,欢迎持续关注,并提出改进意见。
例程下载:
资料包括程序、相关说明资料以及软件使用截图
链接:https://pan.baidu.com/s/1i574oPv
密码:r3s3

(硬石YS-F1Pro开发板HAL库例程持续更新\1. 软件设计之基本裸机例程(HAL库版本)\YSF1_HAL-057. CAN-双机通信测试

/**
  ******************************************************************************
  *                           硬石YS-F1Pro开发板例程功能说明
  *
  *  例程名称: CAN-主机端
  *   
  ******************************************************************************
  * 说明:
  * 本例程配套硬石stm32开发板YS-F1Pro使用。
  *
  * 淘宝:
  * 版权归硬石嵌入式开发团队所有,请勿商用。
  ******************************************************************************
  */

【1】例程简介
  CAN是控制器局域网络(Controller Area Network, CAN)的简称,是由以研发和生产汽车电子
产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO 11898),是国际上应用最广泛的
现场总线之一。 在北美和西欧,CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域
网的标准总线,并且拥有以CAN为底层协议专为大型货车和重工机械车辆设计的J1939协议。
   
【2】跳线帽情况
******* 为保证例程正常运行,必须插入以下跳线帽 **********
丝印编号     IO端口      目标功能引脚        出厂默认设置
  JP1        PA10        TXD(CH340G)          已接入
  JP2        PA9         RXD(CH340G)          已接入
  
【3】操作及现象
使用两根导线连接两个开发板上的CN9接收端子,对应连接“CANL -- CANL”和“CANH -- CANH”,
使用开发板配套的MINI USB线连接到开发板标示“调试串口”字样的MIMI USB接口(需要安装驱动),
在电脑端打开串口调试助手工具,设置参数为115200 8-N-1。下载完程序之后,在串口调试助手窗
口可接收到信息。

/******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/
CubeMX_1.jpg
CubeMX_2.jpg
CubeMX_3.jpg
CubeMX_4.jpg
CubeMX_5.jpg
CubeMX_6.jpg





bsp_CAN.h文件内容
  1. #ifndef __BSP_CAN_H__
  2. #define __BSP_CAN_H__

  3. /* 包含头文件 ----------------------------------------------------------------*/
  4. #include "stm32f1xx_hal.h"
  5. #include <stdio.h>

  6. /* 类型定义 ------------------------------------------------------------------*/
  7. /* 宏定义 --------------------------------------------------------------------*/
  8. #define CANx                            CAN1
  9. #define CANx_CLK_ENABLE()               __HAL_RCC_CAN1_CLK_ENABLE()
  10. #define CANx_FORCE_RESET()              __HAL_RCC_CAN1_FORCE_RESET()
  11. #define CANx_RELEASE_RESET()            __HAL_RCC_CAN1_RELEASE_RESET()

  12. #define CANx_GPIO_CLK_ENABLE()          __HAL_RCC_GPIOB_CLK_ENABLE()
  13. #define CANx_GPIO_PORT                 GPIOB
  14. #define CANx_TX_PIN                    GPIO_PIN_8
  15. #define CANx_RX_PIN                    GPIO_PIN_9

  16. /* Definition for AFIO Remap */
  17. #define CANx_AFIO_REMAP_CLK_ENABLE()   __HAL_RCC_AFIO_CLK_ENABLE()
  18. #define CANx_AFIO_REMAP_RX_TX_PIN()    __HAL_AFIO_REMAP_CAN1_2()

  19. #define CANx_RX_IRQn                   USB_LP_CAN1_RX0_IRQn

  20. /* 扩展变量 ------------------------------------------------------------------*/
  21. extern CAN_HandleTypeDef hCAN;

  22. /* 函数声明 ------------------------------------------------------------------*/
  23. void MX_CAN_Init(void);

  24. #endif /* __BSP_CAN_H__ */


  25. /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/
复制代码



bsp_CAN.c文件内容
  1. /**
  2.   ******************************************************************************
  3.   * 文件名程: bsp_CAN.c
  4.   * 作    者: 硬石嵌入式开发团队
  5.   * 版    本: V1.0
  6.   * 编写日期: 2015-10-04
  7.   * 功    能: CAN通信底层驱动实现
  8.   ******************************************************************************
  9.   * 说明:
  10.   * 本例程配套硬石stm32开发板YS-F1Pro使用。
  11.   *
  12.   * 淘宝:
  13.   * 论坛:http://www.ing10bbs.com
  14.   * 版权归硬石嵌入式开发团队所有,请勿商用。
  15.   ******************************************************************************
  16.   */

  17. /* 包含头文件 ----------------------------------------------------------------*/
  18. #include "CAN/bsp_CAN.h"

  19. /* 私有类型定义 --------------------------------------------------------------*/
  20. /* 私有宏定义 ----------------------------------------------------------------*/
  21. /* 私有变量 ------------------------------------------------------------------*/
  22. CAN_HandleTypeDef hCAN;
  23. static CanTxMsgTypeDef        TxMessage;
  24. static CanRxMsgTypeDef        RxMessage;

  25. /* 扩展变量 ------------------------------------------------------------------*/
  26. /* 私有函数原形 --------------------------------------------------------------*/
  27. /* 函数体 --------------------------------------------------------------------*/
  28. /**
  29.   * 函数功能: CAN通信初始化
  30.   * 输入参数: 无
  31.   * 返 回 值: 无
  32.   * 说    明:无
  33.   */
  34. void MX_CAN_Init(void)
  35. {
  36.   CAN_FilterConfTypeDef  sFilterConfig;
  37.   
  38.   /*CAN单元初始化*/
  39.   hCAN.Instance = CANx;             // CAN外设
  40.   hCAN.pTxMsg = &TxMessage;
  41.   hCAN.pRxMsg = &RxMessage;
  42.   
  43.   hCAN.Init.Prescaler = 4;          // BTR-BRP 波特率分频器  定义了时间单元的时间长度 36/(1+6+3)/4=0.9Mbps
  44.   hCAN.Init.Mode = CAN_MODE_NORMAL; // 正常工作模式
  45.   hCAN.Init.SJW = CAN_SJW_2TQ;      // BTR-SJW 重新同步跳跃宽度 2个时间单元
  46.   hCAN.Init.BS1 = CAN_BS1_6TQ;      // BTR-TS1 时间段1 占用了6个时间单元
  47.   hCAN.Init.BS2 = CAN_BS2_3TQ;      // BTR-TS1 时间段2 占用了3个时间单元
  48.   hCAN.Init.TTCM = DISABLE;         // MCR-TTCM  关闭时间触发通信模式使能
  49.   hCAN.Init.ABOM = ENABLE;          // MCR-ABOM  自动离线管理
  50.   hCAN.Init.AWUM = ENABLE;          // MCR-AWUM  使用自动唤醒模式
  51.   hCAN.Init.NART = DISABLE;         // MCR-NART  禁止报文自动重传          DISABLE-自动重传
  52.   hCAN.Init.RFLM = DISABLE;         // MCR-RFLM  接收FIFO 锁定模式  DISABLE-溢出时新报文会覆盖原有报文
  53.   hCAN.Init.TXFP = DISABLE;         // MCR-TXFP  发送FIFO优先级 DISABLE-优先级取决于报文标示符
  54.   HAL_CAN_Init(&hCAN);
  55.   
  56.   /*CAN过滤器初始化*/
  57.   sFilterConfig.FilterNumber = 0;                    //过滤器组0
  58.   sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;  //工作在标识符屏蔽位模式
  59.   sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; //过滤器位宽为单个32位。
  60.   /* 使能报文标示符过滤器按照标示符的内容进行比对过滤,扩展ID不是如下的就抛弃掉,是的话,会存入FIFO0。 */
  61.   
  62.   sFilterConfig.FilterIdHigh         = (((uint32_t)0x1314<<3)&0xFFFF0000)>>16;                                //要过滤的ID高位
  63.   sFilterConfig.FilterIdLow          = (((uint32_t)0x1314<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF; //要过滤的ID低位
  64.   sFilterConfig.FilterMaskIdHigh     = 0xFFFF;                        //过滤器高16位每位必须匹配
  65.   sFilterConfig.FilterMaskIdLow      = 0xFFFF;                        //过滤器低16位每位必须匹配
  66.   sFilterConfig.FilterFIFOAssignment = 0;           //过滤器被关联到FIFO 0
  67.   sFilterConfig.FilterActivation = ENABLE;          //使能过滤器
  68.   sFilterConfig.BankNumber = 14;
  69.   HAL_CAN_ConfigFilter(&hCAN, &sFilterConfig);
  70. }

  71. void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan)
  72. {

  73.   GPIO_InitTypeDef GPIO_InitStruct;
  74.   if(hcan->Instance==CANx)
  75.   {
  76.     /* 使能外设时钟 */
  77.     CANx_CLK_ENABLE();
  78.     CANx_GPIO_CLK_ENABLE();
  79.    
  80.     /**CAN GPIO Configuration   
  81.     PB8     ------> CAN_RX
  82.     PB9     ------> CAN_TX
  83.     */
  84.     GPIO_InitStruct.Pin = CANx_TX_PIN;
  85.     GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  86.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  87.     HAL_GPIO_Init(CANx_GPIO_PORT, &GPIO_InitStruct);

  88.     GPIO_InitStruct.Pin = CANx_RX_PIN;
  89.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  90.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  91.     HAL_GPIO_Init(CANx_GPIO_PORT, &GPIO_InitStruct);

  92.     CANx_AFIO_REMAP_CLK_ENABLE();
  93.     CANx_AFIO_REMAP_RX_TX_PIN();

  94.     /* 外设中断优先级及使能 */
  95.     HAL_NVIC_SetPriority(CANx_RX_IRQn, 0, 0);
  96.     HAL_NVIC_EnableIRQ(CANx_RX_IRQn);
  97.   /* USER CODE BEGIN CAN1_MspInit 1 */

  98.   /* USER CODE END CAN1_MspInit 1 */
  99.   }
  100. }

  101. void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan)
  102. {

  103.   if(hcan->Instance==CANx)
  104.   {
  105.     CANx_FORCE_RESET();
  106.     CANx_RELEASE_RESET();
  107.   
  108.     /**CAN GPIO Configuration   
  109.     PB8     ------> CAN_RX
  110.     PB9     ------> CAN_TX
  111.     */
  112.     HAL_GPIO_DeInit(CANx_GPIO_PORT, CANx_TX_PIN|CANx_RX_PIN);

  113.     /* 禁用外设中断 */
  114.     HAL_NVIC_DisableIRQ(CANx_RX_IRQn);
  115.   }
  116. }

  117. /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/
复制代码

串口调试助手截图.jpg

<
回复

使用道具 举报

10

主题

1651

回帖

0

蝴蝶豆

论坛元老

最后登录
2020-2-15
发表于 2016-7-1 10:34:13 | 显示全部楼层
发现硬石嵌入式是第一个用STM32CubeMX来协助生成代码的嵌入式工作室。
回复 支持 反对

使用道具 举报

122

主题

129

回帖

0

蝴蝶豆

论坛元老

最后登录
2019-5-28
 楼主| 发表于 2016-7-1 11:41:27 | 显示全部楼层
谢谢支持
STM32CubeMX优势还是比较明显的,有了例程方便大家使用,提供操作参考
回复 支持 反对

使用道具 举报

100

主题

3617

回帖

1

蝴蝶豆

论坛元老

最后登录
2020-12-8
发表于 2016-7-1 11:43:02 | 显示全部楼层
回复 支持 反对

使用道具 举报

39

主题

934

回帖

45

蝴蝶豆

论坛元老

最后登录
2020-6-18
发表于 2016-7-1 15:47:03 | 显示全部楼层
谢谢分享~
回复 支持 反对

使用道具 举报

0

主题

153

回帖

0

蝴蝶豆

中级会员

最后登录
2020-1-5
发表于 2016-7-1 22:17:04 | 显示全部楼层
楼主很强大!谢谢分享!
回复 支持 反对

使用道具 举报

4

主题

17

回帖

0

蝴蝶豆

中级会员

最后登录
2019-6-7
发表于 2017-1-4 16:09:29 | 显示全部楼层
楼主,遇到一个问题,我的CAN 通讯没有问题,但是用HAL的程序,只要收到消息,进到中断里面,就会死机,这会是什么的问题?
回复 支持 反对

使用道具 举报

2

主题

9

回帖

0

蝴蝶豆

初级会员

最后登录
2017-5-31
发表于 2017-1-11 15:40:31 | 显示全部楼层
大虾,百度网盘的共享怎么没有了?
“啊哦,你来晚了,分享的文件已经被取消了,下次要早点哟。”
回复 支持 反对

使用道具 举报

122

主题

129

回帖

0

蝴蝶豆

论坛元老

最后登录
2019-5-28
 楼主| 发表于 2017-1-11 17:20:58 | 显示全部楼层
硬石YS-F1Pro开发板开发手册(HAL库版本)(2016-12-13又更新了)
http://www.ing10bbs.com/forum.ph ... d=179&fromuid=4
(出处: 硬石社区)
回复 支持 反对

使用道具 举报

2

主题

20

回帖

2

蝴蝶豆

中级会员

最后登录
2019-11-23
发表于 2017-4-15 16:18:03 | 显示全部楼层
DarkG 发表于 2017-1-4 16:09
楼主,遇到一个问题,我的CAN 通讯没有问题,但是用HAL的程序,只要收到消息,进到中断里面,就会死机,这 ...

你好,我遇到跟你一模一样的问题,请问你是怎么解决的?多谢
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版