当我在环回模式下运行 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 TxBroadcastVoltagIden
tifier 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 */