历史上的今天
返回首页

历史上的今天

今天是:2025年06月17日(星期二)

正在发生

2019年06月17日 | STM32F042 基于CubeMX HAL库CAN的配置

2019-06-17 来源:eefocus

首先说说使用时候的两个坑。


(1)要使能Swap PA9/10 –>PA11/12,这个时候PA11和PA12引脚才能出现。



(2)我第一步用的是回环模式。


大致是这样的。


 


While


{


SendCanMessage();


}


 


Can_interrupt


{


HAL_CAN_Receive_IT(hcan,CAN_FIFO0);


}


 


却发现只能中断一次不能返回了。


原因,配置好CAN后状态为HAL_CAN_STATE_READY。


 


设置为接收,状态为HAL_CAN_STATE_BUSY_RX0。


接收到数据一般会在继续设置为接收。这样一直可以接收。


 


发送时状态为:HAL_CAN_STATE_BUSY_TX。发送结束变为HAL_CAN_STATE_READY。


 


那么我们想想,回环模式下的状态。


HAL_CAN_STATE_READY。à设置为接收状态为HAL_CAN_STATE_BUSY_RX0


发送数据 此次被中断,那么完成接收操作时候状态变成了(HAL_CAN_STATE_BUSY_TX)


中断跳回来,发送完成状态变为HAL_CAN_STATE_READY。


 


再次发数据的时候问题来了,这个时候已经不是接收状态了!




也就是说中断里面收到数据再重新设置为接受状态这个操作被忽略了




配置图:


(1)配置IO



(2)配置时钟



(3)配置CAN 500K



程序:


#include "main.h"

#include "stm32f0xx_hal.h"

 

CAN_HandleTypeDef hcan;

 

 

CAN_FilterConfTypeDef  sFilterConfig;

static CanTxMsgTypeDef        TxMessage;

static CanRxMsgTypeDef        RxMessage;

 

void SystemClock_Config(void);

static void MX_GPIO_Init(void);

static void MX_CAN_Init(void);

 

void Configure_Filter(void)

{

sFilterConfig.FilterNumber = 0;                   //过滤器组0

  sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; //工作在标识符屏蔽位模式

  sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;//滤波器位宽为单个32位

  sFilterConfig.FilterIdHigh =(((unsigned int)0x1314<<3)&0xFFFF0000)>>16; //要过滤的ID高位

  sFilterConfig.FilterIdLow = (((unsigned int)0x1314<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF;//要过滤的ID低位

  sFilterConfig.FilterMaskIdHigh = 0xffff;

  sFilterConfig.FilterMaskIdLow = 0xffff;

  sFilterConfig.FilterFIFOAssignment =CAN_FILTER_FIFO0;//过滤器被关联到FIFO0;

  sFilterConfig.FilterActivation = ENABLE;//使能过滤器

  //sFilterConfig.BankNumber = 14;

  HAL_CAN_ConfigFilter(&hcan, &sFilterConfig);

}

 

 

void SendData(void)

{

/* USER CODE BEGIN 2 */

  hcan.pTxMsg = &TxMessage;

  hcan.pRxMsg = &RxMessage;

 

 

  hcan.pTxMsg->StdId = 0;//0x1314;

hcan.pTxMsg->ExtId=  0x1314;

  hcan.pTxMsg->RTR = CAN_RTR_DATA;

  hcan.pTxMsg->IDE = CAN_ID_EXT;

  hcan.pTxMsg->DLC = 8;

  hcan.pTxMsg->Data[0] = 'C';

  hcan.pTxMsg->Data[1] = 'A';

  hcan.pTxMsg->Data[2] = 'N';

  hcan.pTxMsg->Data[3] = ' ';

  hcan.pTxMsg->Data[4] = 'T';

  hcan.pTxMsg->Data[5] = 'e';

  hcan.pTxMsg->Data[6] = 's';

  hcan.pTxMsg->Data[7] = 't';

 

if(HAL_CAN_Transmit(&hcan, 100) != HAL_OK)

{

}

}

 

void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan)

{

 

HAL_CAN_Receive_IT(hcan,CAN_FIFO0);//开启中断接收

}

 

 

int main(void)

{

 

 

  HAL_Init();

  SystemClock_Config();

 

 

  MX_GPIO_Init();

  MX_CAN_Init();

  Configure_Filter();

HAL_CAN_Receive_IT(&hcan,CAN_FIFO0);

SendData();

  while (1)

  {

 

  HAL_Delay(1000);

HAL_CAN_Receive_IT(&hcan,CAN_FIFO0);//这个重新设置为接收,算是仅仅供测试使用,为bug;

    SendData();

 

 

  }

 

}



其中滤波器需要配置,不然无法中断。


推荐阅读

史海拾趣

协顺电子(Finecables)公司的发展小趣事

协顺电子(Finecables)成立于2003年,当时的中国电子行业正处于快速发展期。公司创始人凭借对市场敏锐的洞察力和对技术的执着追求,决定进入连接器制造领域。在创业初期,公司面临着资金短缺、技术积累不足等挑战。然而,通过不懈的努力和团队的合作,协顺电子成功研发出首批产品,并获得了市场的认可。这一阶段的经历为公司的后续发展奠定了坚实的基础。

Azoteq公司的发展小趣事

Azoteq公司成立于1998年,由Frederick Bruwer博士创立。作为一家无晶圆厂半导体公司,Azoteq从一开始就致力于开发创新的传感解决方案。其首个产品系列——LightSense™,是针对LED手电筒和穿戴头灯的智能控制而设计的。这一产品系列的推出,为Azoteq在半导体设计制造领域奠定了坚实的基础。

Exar [Exar Corporation]公司的发展小趣事

Exar公司一直注重全球布局和客户支持。公司在全球设立了多个研发基地和客户服务中心,以确保能够为客户提供及时、高效的技术支持和服务。此外,Exar还积极与全球各地的合作伙伴建立合作关系,共同推动电子行业的发展和进步。这种全球化的战略布局不仅为Exar赢得了更多的市场份额和客户信任,也为其未来的发展奠定了坚实的基础。

以上五个故事简要概述了Exar在电子行业中的重要发展历程。通过这些故事,我们可以看到Exar如何通过不断的技术创新、市场拓展和全球化战略来保持其在行业中的领先地位。

Hayashi Denko Co Ltd公司的发展小趣事

2017年,Exar被MaxLinear公司收购,这是Exar发展历程中的一个重要里程碑。通过合并,Exar和MaxLinear的产品和技术得到了有效整合,两家公司在模拟和混合信号领域的优势得到了进一步加强。合并后的公司继续在通信、视频处理、存储、电源管理和时钟管理等多个领域发挥重要作用。

Hifn Inc公司的发展小趣事

2017年,Exar被MaxLinear公司收购,这是Exar发展历程中的一个重要里程碑。通过合并,Exar和MaxLinear的产品和技术得到了有效整合,两家公司在模拟和混合信号领域的优势得到了进一步加强。合并后的公司继续在通信、视频处理、存储、电源管理和时钟管理等多个领域发挥重要作用。

安碁科技(AKER)公司的发展小趣事

在电子行业快速发展的背景下,安碁科技始终坚持持续创新和客户导向的经营理念。公司不断投入研发资源,推出具有竞争力的新产品和解决方案,以满足客户不断变化的需求。同时,安碁科技也注重与客户的沟通和合作,深入了解客户的需求和反馈,不断优化产品和服务。这种以客户为中心的经营模式,使得安碁科技在市场上赢得了良好的声誉和口碑。

这五个故事只是安碁科技发展历程中的一部分,但它们充分展示了公司在电子行业中的崛起和发展。安碁科技凭借其卓越的技术实力、品质管理和创新能力,在激烈的市场竞争中脱颖而出,成为行业的佼佼者。未来,随着电子行业的不断发展和变化,安碁科技将继续保持创新和进取的精神,为客户和市场带来更多优质的产品和服务。

问答坊 | AI 解惑

工欲善其事必先利其器—测试测量工具大搜索

测试测量的第一个主题活动,入门篇,测试测试工具大搜索。也欢迎大家说说自己的使用心得。 测试测量必备工具一:万用表 测试测量必备工具二:示波器 测试测量必备工具三:信号发生器 测试测量必备工具四:频谱仪…

查看全部问答>

无线通讯技术在工业自动化领域中的应用及发展

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 一、引言 无线网络,顾名思义是利用无线电波而非线缆来实现与计算机设备位置无关的网络数据传输系统,是现代数据通信系统发展的一个重要方向。随着计算机网络技术、无线技术以及智能传感器技 ...…

查看全部问答>

大家听说过震动产生能量么?

据说如果安装在桥梁上的传感器,就是车子开过,桥梁震动,自己供电。 不知道大家有没有做过相关的项目? 对着项技术前景怎么看?…

查看全部问答>

LED封装工作流程

固晶→原材料准备→检查支架→检查芯片→扩晶→固晶→固晶烤检→烘烤 ↓ 焊线→焊线→焊线全检→点荧光粉→烘烤 ↓ 封胶→清理模条→模条预热→发放支架→胶水、模条准备→灌胶→支架沾胶→插支架→短烤→离模→长烤 ↓ 后测→一切→测试→外 ...…

查看全部问答>

c语言中能重复定义吗?

在mcu中,我想在一个c文件中用同样的宏,却在每个函数中实现不同的功能。。   各位高手,,有没有什么办法实现呀。。 例:#define setSDA  P1|=(1…

查看全部问答>

知名外资通讯企业招聘软件开发工程师,协议工程师,算法分析和实现工程师及算法分析系统仿真工程师!!!

无线产品软件开发工程师 职责描述: 负责无线产品软件模块的设计、编码、调试、单元测试等工作,参与相关质量活动,确保设计及实现工作按时保质完成。 职位要求: 1. 本科以上学历,计算机软件、通信、电子、数学、物理及相关专业,有扎实的 ...…

查看全部问答>

用什么代码能开启pda的无线功能?

用什么代码能开启pda的无线功能? wince高手们,小弟现在用的是华硕的626的一款pda,操作系统是windows   mobile6.0,支持无线Wi-Fi; 小弟现有一个问题,我在程序中用什么函数能够自动启用无线功能?…

查看全部问答>

郭天祥单片机教程

本帖最后由 paulhyde 于 2014-9-15 09:11 编辑 在学校论坛找的一本郭天祥单片机教程的PDF,看着还不错,讲的东西都跟竞赛相关,很实用。不敢独享,发来论坛与大家分享。内容太大,135网盘下载:…

查看全部问答>

急招兼职: 诚找人编写DSP、FPGA开发类图书

榕盛文化公司(rssdbook.)致力于图书的选题策划、编辑加工和出版,由具有大型出版社工作背景、从事图书出版10余年的资深编辑组建。公司以“弘扬优秀文化、传播卓越品质”为出版理念,成立以来已有数十本图书在全国出版,其中畅销书多达30本,有10 ...…

查看全部问答>

无法仿真的程序

我刚写了个从P2口的高3位和P3口的低三位输出高片平的程序,想在调试环境下看看寄存器的变化,但无法进入调试环境,错误提示如下: C-SPY FATAL ERROR: Fatal error[1]: Input file error:"Unknow file format".Failed tag is 2. 是不是我得程 ...…

查看全部问答>