野火STM32电机系列(三)Cubemx配置CAN通信

这篇具有很好参考价值的文章主要介绍了野火STM32电机系列(三)Cubemx配置CAN通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

CAN接口:

PI9

PB9

1.配置CAN 通信参数

由于F4的 CAN外设挂载在APB1上,时钟配置后APB1的时钟速率为42MHz,目标通信速率为1000KHz,由公式:

BaudRate = 1/NominalBitTime

NominalBitTime = 1tq + tBS1 +tBS2

设置参数如下:

CAN时钟分频参数为7,BS1为4,BS2为1,CAN模式为Nomal模式。

野火STM32电机系列(三)Cubemx配置CAN通信,stm32,单片机,嵌入式硬件

生成工程

在can.c中添加如下函数

 野火STM32电机系列(三)Cubemx配置CAN通信,stm32,单片机,嵌入式硬件

 野火STM32电机系列(三)Cubemx配置CAN通信,stm32,单片机,嵌入式硬件

 野火STM32电机系列(三)Cubemx配置CAN通信,stm32,单片机,嵌入式硬件

 

CAN_TxHeaderTypeDef TXHeader;
CAN_RxHeaderTypeDef RXHeader;


uint8_t TXmessage[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
uint8_t RXmessage[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

uint32_t pTxMailbox = 0;
uint32_t CAN_ID = 0x01;
int counT_A = 0;
int counT_B = 0;

void CAN_Config(void)
{
CAN_FilterTypeDef  sFilterConfig;
 
  /*配置CAN过滤器*/
  sFilterConfig.FilterBank = 0;                     //过滤器0
  sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
  sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
  sFilterConfig.FilterIdHigh = 0x0000;              //32位ID
  sFilterConfig.FilterIdLow = 0x0000;
  sFilterConfig.FilterMaskIdHigh = 0x0000;          //32位MASK
  sFilterConfig.FilterMaskIdLow = 0x0000;
  sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;//过滤器0关联到FIFO0
  sFilterConfig.FilterActivation = ENABLE;          //激活滤波器0
  sFilterConfig.SlaveStartFilterBank = 14;
	
	
 if(HAL_CAN_ConfigFilter(&hcan1,&sFilterConfig) != HAL_OK)//初始化过滤器
 {
  Error_Handler();
 }
 if(HAL_CAN_Start(&hcan1) != HAL_OK)//打开can
 {
  Error_Handler();
 }
 if(HAL_CAN_ActivateNotification(&hcan1,CAN_IT_RX_FIFO0_MSG_PENDING) != HAL_OK)//开启接受邮邮箱0挂起中断
 {
  Error_Handler();
 }
 
   /*配置传输过程*/
  TXHeader.StdId = 0x321;
  TXHeader.ExtId = 0x01;
  TXHeader.RTR = CAN_RTR_DATA;
  TXHeader.IDE = CAN_ID_STD;
  TXHeader.DLC = 2;
  TXHeader.TransmitGlobalTime = DISABLE;

}

//发送函数
void CAN_senddata(CAN_HandleTypeDef *hcan,uint32_t can_id)
{
   TXHeader.StdId=can_id ;
	 TXHeader.ExtId=0x12345000;//0x12345000
	 TXHeader.DLC=8;
	 TXHeader.IDE=CAN_ID_EXT;
	 TXHeader.RTR=CAN_RTR_DATA;
	 TXHeader.TransmitGlobalTime = DISABLE;

    	HAL_CAN_AddTxMessage(hcan,&TXHeader,TXmessage,&pTxMailbox);

}
//接受函数
uint32_t CAN1_Receive_Msg(uint8_t *buf)
{
 	uint32_t i;
	uint8_t	RxData[8];
 
	if(HAL_CAN_GetRxFifoFillLevel(&hcan1, CAN_RX_FIFO0) != 1)//没有接收到数据,直接退出 
	{
		return 0xF1;
	}
 
	if(HAL_CAN_GetRxMessage(&hcan1, CAN_RX_FIFO0, &RXHeader, RxData) != HAL_OK)
	{
		return 0xF2;
	}
	
    for(i=0;i<RXHeader.DLC;i++)
    buf[i]=RxData[i];
	  return RXHeader.DLC;
}

头文件声明

野火STM32电机系列(三)Cubemx配置CAN通信,stm32,单片机,嵌入式硬件

void CAN_Config(void);

extern uint8_t TXmessage[8];

extern uint8_t RXmessage[8];

extern uint32_t CAN_ID;

extern int counT_A;

extern int counT_B;

void CAN_senddata(CAN_HandleTypeDef *hcan,uint32_t can_id);

uint32_t CAN1_Receive_Msg(uint8_t *buf);

主函数添加

野火STM32电机系列(三)Cubemx配置CAN通信,stm32,单片机,嵌入式硬件

 

 循环中设置1ms的发送周期

野火STM32电机系列(三)Cubemx配置CAN通信,stm32,单片机,嵌入式硬件

 用CAN分析仪接受

野火STM32电机系列(三)Cubemx配置CAN通信,stm32,单片机,嵌入式硬件

 完美文章来源地址https://www.toymoban.com/news/detail-680018.html

到了这里,关于野火STM32电机系列(三)Cubemx配置CAN通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 搭建stm32电机控制代码框架(二)——Stm32CubeMx配置定时器

    搭建了基础的环境,配置了一个简单的工程后,CubeMx的基本操作就会了。然后基于这个操作往下推进,开始对关键模块定时器的攻略,这个部分需要先熟悉一下Stm32的定时器基本原理。 《STM32参考手册》中仅对定时器的介绍就已经占了100多页,这里就不一一展开,挑一些关键

    2024年02月06日
    浏览(49)
  • 搭建stm32电机控制代码框架(三)——Stm32CubeMx配置ADC采样

    电机控制另一个关键的模块就是ADC采样,这个模块配置的好坏决定了采样电流和电压的精准度,因此有必要对其进行深入学习。 简介: STM32 在片上集成的ADC 外设非常强大。STM32F103xC、STM32F103xD 和STM32F103xE增强型产品内嵌3个12位的ADC,每个ADC 共用多达 21 个外部通道,可以实现

    2024年02月13日
    浏览(20)
  • 【STM32+CUBEMX】TMC5160电机驱动简要配置

    TMC5160简介                 1.1、引脚图          1.2、关键引脚                1.2.1 模式选择引脚                  1.2.2 时钟和SPI引脚                   1.2.3 驱动使能引脚  2.SPI发送数据结构         发送到 TMC5160 的每个数据报由一个地

    2024年02月06日
    浏览(25)
  • 电机FOC控制(三)STM32 CUBEMX 配置ADC采样

    本文在电机FOC控制(二)STM32 CUBEMX 配置三相PWM互补输出基础上,继续讲述如何STM32 CUBEMX 配置ADC寄存器,使TIMER1 PWM互补输出CC4触发ADC注入采样的过程。 打开Clock Configuration界面,将ADC设置为42.5MHz。 设定ADC1通道7和通道8为单端输入: 设定ADC2通道6和通道7为单端输入: ADCs_Comm

    2024年04月23日
    浏览(21)
  • CAN总线学习笔记 | STM32CubeMX配置CAN环回测试

    CAN基础知识介绍文中介绍了CAN协议的基础知识,以及STM32F4芯片的CAN控制器相关知识,下面将通过实例,利用STM32CubeMX图形化配置工具,来实现CAN通讯的环回测试 CAN是挂载在APB1总线上,设置PCLK1时钟频率到最大45MHz 激活CAN1,配置位时序参数,其他基本参数以及工作模式(此处

    2024年02月11日
    浏览(16)
  • MKS SERVO42&57D 闭环步进电机_系列12 STM32_CAN例程

    具备脉冲接口和RS485/CAN串行接口,支持MODBUS-RTU通讯协议,内置高效FOC矢量算法。 硬件开源! 网盘: 08_例程-STM32系列(CAN) 设置波特率: 菜单 → CanRate → 500K 设置从机地址: 菜单 → CanID → 01 需要一个TTL转CAN电平模块。 接线说明 代码说明 代码功能:STM32 主板通过CAN接口读取

    2024年02月10日
    浏览(17)
  • STM32的HAL库开发系列 - CAN通信实例

    CAN通信是一种高效、可靠、灵活的数据传输方式,适用于各种应用场景,在工业自动化、汽车电子、医疗设备等领域有着广泛的应用。 但理解CAN通信的实际应用,也不能全部只看软件方面,还需要对硬件上也有了解。 在硬件上,CAN通信使用两条线路:一条是数据线(CAN_H),

    2024年02月12日
    浏览(22)
  • 【STM32】cubeMX配置HAL库驱动L298N控制直流有刷电机

    目录 1.电机为什么需要驱动板呢?为什么不能用控制器直接控制电机呢? 2.H桥电路介绍 3.L298N原理介绍 4.实物接线图 5.CUBEMX配置 6.代码 7. 演示视频 L298N是常用来驱动小型直流有刷电机(两个)和步进电机(一个)的电机驱动板,其电路原理就是两个H桥电路,控制原理是使用

    2024年02月16日
    浏览(25)
  • STM32 cubemx CAN STM32 CAN初始化详解

    接收用到的结构体如下: CAN概念:         全称Controller Area Network,是一种半双工,异步通讯。 物理层:         闭环:允许总线最长40m,最高速1Mbps,规定总线两端各有一个120Ω电阻,闭环        开环:最大传输距离1Km,最高速125Kbps,规定每根线串联一个2.2kΩ的电阻,

    2024年02月13日
    浏览(20)
  • 搭建stm32电机控制代码框架(一)——Stm32CubeMx入门

    任务是基于stm32f405芯片进行展开,应用的软件是keil5和STM32CubeMx,这两个软件环境目前是已经安装好了,现在就可以开始展开工作了,这系列博客零散的记录任务完成的过程,作为一个笔记方便后续回顾。 任务(一):用CubeMx控制一个引脚的高低电平 第一步: 在CubeMx中导入

    2024年02月06日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包