当前位置: 首页 > news >正文

STM32 CAN通信-CubeMX环境下CAN通信程序的编程与调试经验

文章目录

    • STM32 CAN通信-CubeMX环境下CAN通信程序的编程

STM32 CAN通信-CubeMX环境下CAN通信程序的编程

STM32F103ZE芯片 CAN通信测试代码:


#include "main.h"
#include "can.h"CAN_HandleTypeDef hcan1;void SystemClock_Config(void);int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_CAN1_Init();while (1) {// 初始化CAN消息结构体和数据缓冲区CAN_TxHeaderTypeDef txHeader;uint8_t txData[8];CAN_RxHeaderTypeDef rxHeader;uint8_t rxData[8];// 填充CAN消息结构体和数据txHeader.StdId = 0x123;txHeader.RTR = CAN_RTR_DATA;txHeader.IDE = CAN_ID_STD;txHeader.DLC = 2;txData[0] = 0xAA;txData[1] = 0xBB;// 发送CAN消息HAL_CAN_AddTxMessage(&hcan1, &txHeader, txData, NULL);// 等待CAN消息接收HAL_CAN_GetRxMessage(&hcan1, CAN_RX_FIFO0, &rxHeader, rxData);// 处理接收到的CAN消息if (rxHeader.StdId == 0x123 && rxHeader.RTR == CAN_RTR_DATA && rxHeader.IDE == CAN_ID_STD && rxHeader.DLC == 2 && rxData[0] == 0xCC && rxData[1] == 0xDD) {// 接收到的CAN消息符合预期,进行处理// do something ...}// 延时一段时间后重复执行以上代码,进行CAN通信测试HAL_Delay(1000);}
}void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){Error_Handler();}
}

这个例子中,将所有CAN通信相关的代码放在while循环中,并在每次循环结束后延时一段时间,以实现循环执行的效果。需要根据具体的应用需求,修改循环间隔时间和循环内容。
请注意,为确保CAN通信成功,需要在代码中增加一些异常处理的代码,例如在HAL_CAN_AddTxMessage和HAL_CAN_GetRxMessage函数返回值不为HAL_OK时进行重试等。

http://www.lryc.cn/news/105678.html

相关文章:

  • windows创建不同大小的文件命令
  • Attention Is All You Need
  • 手写线程池 - C++版 - 笔记总结
  • PHP 容器化引发线上 502 错误状态码的修复
  • QT中UDP之UDPsocket通讯
  • 【C语言】10-三大结构之循环结构-1
  • Windows下RocketMQ的启动
  • linux内核升级 docker+k8s更新显卡驱动
  • express学习笔记2 - 三大件概念
  • Steam搬砖蓝海项目
  • 就业并想要长期发展选数字后端还是ic验证?
  • 当服务器域名出现解析错误的问题该怎么办?
  • 面试必考精华版Leetcode2095. 删除链表的中间节点
  • 对 Redis 实现分布式事务的探索与实现
  • Matlab实现Spectral Clustering算法
  • Android 测试
  • 全面解析大语言模型的工作原理
  • cmake+pybind11打包c++库成python wheel安装包
  • 史上最细,接口自动化测试框架-Pytest+Allure+Excel整理(代码)
  • 【计算机视觉中的 GAN 】 - 条件图像合成和 3D 对象生成(2)
  • 智安网络|常见的网络安全陷阱:你是否掉入了其中?
  • 亚马逊云科技HPC解决方案,帮助浙江大学实现成本和科研任务的双丰收
  • 【Docker】Docker中安装MySQL数据库
  • Unity的IPostBuildPlayerScriptDLLs:深入解析与实用案例
  • MySQL数据库服务器安装与配置(步骤简单详细,看完可学会下载MySQL所有版本)
  • PowerDesigner16.5安装教程
  • Java反射全面详解
  • 助力工业物联网,工业大数据之费用事实指标分析及实现【二十四】
  • Istio 安全 mTLS认证 PeerAuthentication
  • 【MySQL】数据库基本使用