完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
当我在环回模式下运行 CAN 模块时 - 数据包
转移到公共汽车 - 一切都很好 当我以静默模式运行 CAN 模块时,我将收到数据包 - 一切正常 但是当我在正常模式下启动 CAN 模块时——TX 引脚上发出 15 个脉冲,一切都停止了……数据包没有传输…… 我究竟做错了什么??? 我使用以下方法生成了启动配置: STM32CubeMX 5.6.1 固件为STM32Cube FW_F1 V1.8.0 Atollic TrueSTUDIO 版本:9.3.0 构建 ID:20190212-0734 我一直在结合 ISO1050 和 MCP2551 ... 我用中文逻辑分析仪看了总线.... 连接到 RX 和 TX 引脚的并行 代码: /* 私有定义 ------------------------------------------ --------------*/ /* 用户代码开始 PD */ #define TxBroadcastVoltagIdentifier 0x5FF400C #define TxDeviceRegistrationFeedbeckIdentifier 0x5004804 #define TxSetDefaultVoltageIdentifier 0x5FF400C /* 用户代码结束 PD */ /* 私有变量-------------------------------------------- ----------*/ CAN_HandleTypeDef hcan; /* 用户代码开始 PV */ CAN_FilterTypeDef FlatPackRXFilter; CAN_RxHeaderTypeDef RxHeader; uint8_t RxData[16]; uint32_t RxFifo; CAN_TxHeaderTypeDef TxHeader; uint8_t TxData[16]; uint32_t TxFifo; uint8_t 测试; /* 用户代码结束 PV */ int 主要(无效) { /* 用户代码开始 1 */ /* 用户代码结束 1 */ /* 单片机配置-------------------------------------------- ----------*/ /* 重置所有外设,初始化 Flash 接口和 Systick。*/ HAL_Init(); /* 用户代码开始初始化 */ /* 用户代码结束初始化 */ /* 配置系统时钟 */ SystemClock_Config(); /* 用户代码开始 SysInit */ // hcan.Instance->BTR &= ~CAN_MCR_SLEEP; // hcan.Instance->MSR = CAN_MSR_SLAK; /* 用户代码结束 SysInit */ /* 初始化所有配置的外设 */ MX_GPIO_Init(); MX_CAN_Init(); /* 用户代码开始 2 */ FlatPackRXFilter.FilterBank = 0; FlatPackRXFilter.FilterActivation = CAN_FILTER_ENABLE ; FlatPackRXFilter.FilterFIFOAssignment = CAN_FILTER_FIFO0; FlatPackRXFilter.FilterIdHigh = 0; FlatPackRXFilter.FilterIdLow = 0; FlatPackRXFilter.FilterMaskIdHigh = 0; FlatPackRXFilter.FilterMaskIdLow = 0; FlatPackRXFilter.FilterMode = CAN_FILTERMODE_IDMASK; FlatPackRXFilter.FilterScale = CAN_FILTERSCALE_32BIT; 如果 (HAL_CAN_ConfigFilter(&hcan, &FlatPackRXFilter) != HAL_OK) { 错误处理程序(); } 如果 (HAL_CAN_Start(&hcan) != HAL_OK) { 错误处理程序(); } 如果(HAL_CAN_ActivateNotification(&hcan,CAN_IT_RX_FIFO0_MSG_PENDING)!= HAL_OK) { 错误处理程序(); } 如果(HAL_CAN_ActivateNotification(&hcan,CAN_IT_RX_FIFO0_OVERRUN)!= HAL_OK) { 错误处理程序(); } TxHeader.ExtId = TxBroadcastVoltagIdentifier; TxHeader.DLC = 8; TxHeader.IDE = CAN_ID_EXT; TxHeader.RTR = CAN_RTR_DATA; TxHeader.TransmitGlobalTime = 禁用; HAL_延迟(100); TxData[0]=0x32; TxData[0]=0xF0; 如果 (HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData, &TxFifo) != HAL_OK) { 错误处理程序(); } /* 用户代码结束 2 */ /* 无限循环 */ /* 用户代码开始时 */ 而 (1) { /* 用户代码结束 */ /* 用户代码开始 3 */ test = HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData, &TxFifo); 如果(测试!= HAL_OK) { 错误处理程序(); } HAL_延迟(100); } /* 用户代码结束 3 */ } /* 用户代码开始 4 */ void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) { 如果 (HAL_CAN_GetRxMessage(hcan, RxFifo, &RxHeader, RxData) != HAL_OK) { 错误处理程序(); } } /* 用户代码结束 4 */ |
|
相关推荐
1个回答
|
|
发现了问题所在……我的 can 收发器电源错误(MCP2551 需要 5V,ISO1050 需要从两侧供电)
由于 TX CAN tansiver 输入的所有内容立即从 RX CAN 收发器的输出“退出”,因此当微控制器将数据包发送到 TX 通道时,他希望在 RX 输入处看到这个包裹...... .如果它没有看到这个数据包(数据包的第一位),它会立即中断传输并设置“位显性错误”标志,这在 STM32f103 的参考手册中没有以任何方式描述 |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2653 浏览 1 评论
3215 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1789 浏览 1 评论
3618 浏览 6 评论
5997 浏览 21 评论
946浏览 4评论
1319浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
591浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1309浏览 3评论
1369浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-29 03:28 , Processed in 1.120749 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号