完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
1. 配置参数
使用CubeMax进行参数配置,将端口重映射到PD0和PD1 配置其他参数 2. 添加过滤器、重写接收函数、发送函数 #include "bsp_can.h" #include "can.h" #include "stm32f4xx_hal_can.h" #include /******************************************************************************************* * @Func my_can_filter_init * @Brief CAN1和CAN2滤波器配置 * @Param CAN_HandleTypeDef* hcan * @Retval None * @Date 2015/11/30 *******************************************************************************************/ void CAN1_Filter_Config(void) { //can1 &can2 use same filter config CAN_FilterTypeDef CAN_FilterConfigStructure; CAN_FilterConfigStructure.FilterMode = CAN_FILTERMODE_IDMASK; CAN_FilterConfigStructure.FilterScale = CAN_FILTERSCALE_32BIT; CAN_FilterConfigStructure.FilterIdHigh = 0x0000; CAN_FilterConfigStructure.FilterIdLow = 0x0000; CAN_FilterConfigStructure.FilterMaskIdHigh = 0x0000; CAN_FilterConfigStructure.FilterMaskIdLow = 0x0000; CAN_FilterConfigStructure.FilterFIFOAssignment = CAN_FilterFIFO0; CAN_FilterConfigStructure.FilterBank = 14;//can1(0-13)和can2(14-27)分别得到一半的filter CAN_FilterConfigStructure.FilterActivation = ENABLE; if(HAL_CAN_ConfigFilter(&hcan1, &CAN_FilterConfigStructure) != HAL_OK) { printf("CAN Filter Config Fail!rn"); Error_Handler(); } } static CAN_TxHeaderTypeDef TxMessage; //CAN发送的消息的消息头 static CAN_RxHeaderTypeDef RxMessage; //CAN接收的消息的消息头 void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) { uint8_t data[8]; HAL_StatusTypeDef status; status = HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &RxMessage, data); printf("--->Data Receieve!rn"); if (HAL_OK == status){ printf("--->Data Receieve!rn"); printf("RxMessage.StdId is %#xrn", RxMessage.StdId); printf("data[0] is 0x%02xrn", data[0]); printf("data[1] is 0x%02xrn", data[1]); printf("data[2] is 0x%02xrn", data[2]); printf("data[3] is 0x%02xrn", data[3]); printf("<---rn"); } } uint32_t CAN_TX_BOX; /* CAN 发送数据测试函数 */ void CAN1_Send_Test(void) { printf("----------------Start-------------------rn"); uint8_t data[4] = {0x01, 0x02, 0x03, 0x04}; TxMessage.IDE = CAN_ID_STD; //设置ID类型 TxMessage.StdId = 0x111; //设置ID号 TxMessage.RTR = CAN_RTR_DATA; //设置传送数据帧 TxMessage.DLC = 4; //设置数据长度 TxMessage.TransmitGlobalTime = DISABLE; HAL_Delay(100); if (HAL_CAN_AddTxMessage(&hcan1, &TxMessage, data, &CAN_TX_BOX) != HAL_OK) { printf("Send mail is %drn", CAN_TX_BOX); Error_Handler(); } uint32_t mail = HAL_CAN_GetTxMailboxesFreeLevel(&hcan1); printf("Send mail is %drn", CAN_TX_BOX); printf("Free mail is %drn", mail); printf("CAN send test data success!rn"); } 3. 在Main函数中添加以下内容 配置过滤器 CAN1_Filter_Config(); 开启CAN if (HAL_CAN_Start(&hcan1) != HAL_OK) { printf("CAN Start Failrn"); Error_Handler(); } printf("CAN Start Successrn"); CAN接收中断使能 if (HAL_CAN_Start(&hcan1) != HAL_OK) { printf("CAN Start Failrn"); Error_Handler(); } printf("CAN Start Successrn"); 注 在main函数中必须有内容 如果是正常模式,必须有接收的外设,不然发送邮箱会满,一直处于发送状态 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1792 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1626 浏览 1 评论
1094 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
732 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1682 浏览 2 评论
1943浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
742浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
578浏览 3评论
601浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
563浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 17:17 , Processed in 1.166389 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号