历史上的今天
今天是:2025年06月17日(星期二)
2019年06月17日 | STM32CubeMX生成基于HAL库的Can收发配置
2019-06-17 来源:eefocus
HAL库 的应该用比较新潮,经常找不到资料。今天说说,在CAN开发中的应用。
一,发送。
static HAL_StatusTypeDef Can_MsgSend(uint32_t ID,uint8_t * pData,uint8_t len)
{
HAL_StatusTypeDef retSTD;
canTxMsg.StdId=ID;//0x500|(GetLocalID()&0xFF);
canTxMsg.IDE=CAN_ID_STD;
canTxMsg.RTR=CAN_RTR_DATA;
canTxMsg.DLC=len;
memcpy(canTxMsg.Data,pData,len);
SendErrorCount=0;
retSTD= HAL_CAN_Transmit(&hcan,200);
//retSTD= HAL_CAN_Transmit_IT(&hcan);
return retSTD;
}
二,配置。
//基本配置
hcan.Instance = CAN;
hcan.Init.Prescaler =138;// 100;
hcan.Init.Mode =CAN_MODE_NORMAL;//CAN_MODE_LOOPBACK;//
hcan.Init.SJW = CAN_SJW_1TQ;
hcan.Init.BS1 = CAN_BS1_7TQ;
hcan.Init.BS2 = CAN_BS2_8TQ;
hcan.Init.TTCM = DISABLE;
hcan.Init.ABOM = DISABLE;
hcan.Init.AWUM = DISABLE;
hcan.Init.NART = DISABLE;
hcan.Init.RFLM = DISABLE;
hcan.Init.TXFP = DISABLE;
if (HAL_CAN_Init(&hcan) != HAL_OK)
{
Error_Handler();
}
//过滤器
CAN_FilterConfTypeDefftcan;
ftcan.FilterIdHigh=0x0000;
ftcan.FilterIdLow=0x0000;
ftcan.FilterScale=CAN_FILTERSCALE_16BIT;
ftcan.FilterMaskIdHigh=0xFFFF;
ftcan.FilterMaskIdLow=0x0000;
ftcan.FilterMode=CAN_FILTERMODE_IDMASK;
ftcan.FilterFIFOAssignment=CAN_USEFIFO;
ftcan.FilterNumber=0;
ftcan.FilterActivation=ENABLE;
HAL_CAN_ConfigFilter(&hcan, &ftcan);
//收发 缓冲
hcan.pRxMsg=&canRxMsg;
hcan.pTxMsg=&canTxMsg;
三,回调函数
void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan);
void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan);
void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan);
四,设置中断接收.
HAL_CAN_Receive_IT(&hcan,CAN_USEFIFO); 每次接收中断中,要重新设置。
史海拾趣
|
系统是WINCE5.0+Pxa300,WIFI是用的Marvell的8686 系统是WINCE5.0+Pxa300,WIFI是用的Marvell的8686 这是用于干什么的系统?是类似于xp的系统还是嵌入式开发系统… 查看全部问答> |
|
我的电路板用一个1085-5V芯片转换成5V,用一个1085-3.3V转换成3.3V,5V给AD等外围芯片供电,3.3主要给核心板供电,我的程序运行一会,核心板,电源芯片就会很烫,电源芯片带的底板也很烫。功率也满足要求。请问各位高手该如何解决发热问题?… 查看全部问答> |
|
将内存单元1000-1030H中的内容复制到3000-3030H单元中去,原地址清0 我的代码在下面,下载地址1000H,自修改代码,他说改下载地址,自己内存放点东西,他要看到结果,不放东西全部是0,复制过去也没效果。老师很BT,要求十分严格。EMBESTIDE环境 ...… 查看全部问答> |
|
本人的工作是将ucgui移植到nucleus系统上,nucleus系统时间的获取是通过将时钟节拍转化而来的,但本人对时钟节拍不怎么熟悉,按照自己的思路问题主要是出在到时钟节拍超出时钟节拍临界值时(其实本人也不清楚时钟节拍复位为0是怎么处理的),时 ...… 查看全部问答> |
|
请版主帮指个路。 各位代理有的话,欢迎报价。 我手头的STM8L101都连不上SWIM,用ST-Link也不行,郁闷。 STM8L152可以。 已经有客户求购EP868用于STM8L了。。。。。… 查看全部问答> |




