stm32 cubemx can通讯(1)回环模式

文章目录


前言

介绍使用stm32cubemx来配置can,本节讲解一个简答,不需要stm32的can和外部连接,直接可以用于验证的回环模式。

所谓回环模式就是自己发给自己。

参考:
参考1


一、cubemx配置

配置到合适的速率

要打开中断

二、代码

1.过滤器的配置(后续会介绍)

在新版的cubemx中可以直接在 MX_CAN_Init();中加入过滤器配置,老版的不行(野火hal库视频里面介绍的不可以)

在这个注释段内加入过滤器配置

c 复制代码
  /* USER CODE BEGIN CAN_Init 2 */
		
	CAN_FilterTypeDef sFilterConfig;
 
	sFilterConfig.FilterActivation = ENABLE;//打开过滤器
	sFilterConfig.FilterBank = 0;//过滤器0 这里可设0-13
	sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;//采用掩码模式
	sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;//采用32位掩码模式
	sFilterConfig.FilterFIFOAssignment = CAN_FILTER_FIFO0;//采用FIFO0

	sFilterConfig.FilterIdHigh = 0x0000; //设置过滤器ID高16位
	sFilterConfig.FilterIdLow = 0x0000;//设置过滤器ID低16位
	sFilterConfig.FilterMaskIdHigh = 0x0000;//设置过滤器掩码高16位
	sFilterConfig.FilterMaskIdLow = 0x0000;//设置过滤器掩码低16位
	if(HAL_CAN_ConfigFilter(&hcan,&sFilterConfig) != HAL_OK)//初始化过滤器
	{
	Error_Handler();
	}
	if(HAL_CAN_Start(&hcan) != HAL_OK)//打开can
	{
	Error_Handler();
	}
	if(HAL_CAN_ActivateNotification(&hcan,CAN_IT_RX_FIFO0_MSG_PENDING) != HAL_OK)//开启接受邮箱0挂起中断
	{
	Error_Handler();
	}

  /* USER CODE END CAN_Init 2 */

2.main.c

在开头的地方创建一些变量已经cna的接受回调函数

c 复制代码
CAN_TxHeaderTypeDef TXHeader;
CAN_RxHeaderTypeDef RXHeader;

uint8_t TXmessage[8] = {0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77};
uint8_t RXmessage[8];
uint32_t pTxMailbox = 0;

void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)//接受邮箱0挂起中断回调函数
{
	if(hcan->Instance==CAN1)
	{
		HAL_CAN_GetRxMessage(hcan,CAN_FILTER_FIFO0,&RXHeader,RXmessage);//获取数据
    }
	
}
void CAN_senddata(CAN_HandleTypeDef *hcan)
{
     TXHeader.StdId=0x00000000;
	 TXHeader.ExtId=0x12345000;
	 TXHeader.DLC=8;
	 TXHeader.IDE=CAN_ID_EXT;
	 TXHeader.RTR=CAN_RTR_DATA;
	 TXHeader.TransmitGlobalTime = DISABLE;
	 HAL_CAN_AddTxMessage(hcan,&TXHeader,TXmessage,&pTxMailbox);
}

3.主循环

只需要在主循环中调用这些就行。进入调试模式在回调函数的地方打断点就能看到了!!!

c 复制代码
	
			CAN_senddata(&hcan);	
			HAL_Delay(500);

总结

over

相关推荐
俊基科技4 小时前
A-59U工业级多模语音处理模块在矿山矿井通信与呼叫报警系统中的应用
嵌入式硬件·嵌入式开发·硬件开发·ai降噪·回音消除·拾音降噪
周周记笔记6 小时前
GD32F450xx MCU Datasheet 解读:硬件测试工程师的测试方法论
单片机·嵌入式硬件
潘潘的嵌入式日记7 小时前
I²C 从机接收总被覆盖?双缓冲要在 STOP 时交接
c语言·开发语言·单片机
AOI小白新手上路9 小时前
江科协51单片机16-1 AD/DA ADC 三通道综合显示(LCD1602 版)改造说明
单片机·嵌入式硬件·51单片机
HUI-47410 小时前
EG1135|SSOP‑16 同步整流降压控制器,大功率外置 MOS 降压优选
单片机·嵌入式硬件·硬件工程
单片机仿真设计10 小时前
【proteus仿真】基于 STM32 单片机恒温箱控制系统设计(仿真图+程序)
stm32·单片机·嵌入式硬件·proteus·毕设
国科安芯11 小时前
星载CAN总线通信网络中抗辐射MCU的通信可靠性设计分析
网络·人工智能·分布式·单片机·嵌入式硬件·架构
新晨单片机设计12 小时前
S003A-基于STM32单片机温度计(数码管显示)【Proteus仿真+Keil程序+原理图】
stm32·单片机·stm32单片机功能定制
一条破秋裤12 小时前
TIM 输入捕获与 PWMI:从边沿到频率、占空比
笔记·stm32·学习
AOI小白新手上路12 小时前
江科协51单片机16-1 DA数模转换实验(PWM 呼吸灯)
单片机·嵌入式硬件·51单片机