
使用STM32F103作为CAN从机发送和接收数据,从机是被动发送,在收到主机特定命令帧后才会发送数据,其余时候只接收:问题1:单个发送没有问题,多个CAN并在一起,其中某个会出现只能接收并未发送的情况(主机下发内容能收到,但主机无法收到该ID上的数据内容),不知道为什么会出现这样的问题?现在就想试一下,在这种情况下重新初始化CAN模块能不能恢复CAN正常通信?我的想法是通过主机告知从机,让从机自己重新初始化CAN。 问题2:如果将主机挂在总线上,存在某些从机在重新上电后无法正常启动的情况,大多数都能正常运行。 请问有遇到类似情况的人能解答下没有?欢迎探讨! 附CAN通信配置: void MX_CAN_Init(void) { CAN_FilterConfTypeDef sFilterConfig; hcan.Instance = CAN1; hcan.Init.Prescaler = 8; hcan.Init.Mode = CAN_MODE_NORMAL; hcan.Init.SJW = CAN_SJW_1TQ; hcan.Init.BS1 = CAN_BS1_15TQ; hcan.Init.BS2 = CAN_BS2_2TQ; hcan.Init.TTCM = DISABLE; // ʱ¼ä´¥·¢Ä£Ê½ hcan.Init.ABOM = DISABLE; // ×Ô¶¯ÀëÏß¹ÜÀí hcan.Init.AWUM = DISABLE; // ×Ô¶¯»½ÐÑģʽ hcan.Init.NART = DISABLE; // ·Ç×Ô¶¯ÖØ´«Ä£Ê½ hcan.Init.RFLM = DISABLE; // ½ÓÊÕFIFOËø¶¨Ä£Ê½ hcan.Init.TXFP = DISABLE; // ·¢ËÍFIFOÓÅÏȼ¶ if (HAL_CAN_Init(&hcan) != HAL_OK) { Error_Handler(); } sFilterConfig.FilterNumber = 0; // sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; sFilterConfig.FilterIdHigh = (((uint32_t)PS << 3) & 0xFFFF0000) >> 16; // ¹ýÂËID¸ßλ sFilterConfig.FilterIdLow = ((uint32_t)PS << 3) | CAN_RTR_DATA | CAN_ID_EXT; // ¹ýÂËIDµÍλ sFilterConfig.FilterMaskIdHigh = 0x0000; sFilterConfig.FilterMaskIdLow = 0x00FF; // ¹ýÂ˱êʶ·ûµÍλ sFilterConfig.FilterFIFOAssignment = 0; sFilterConfig.FilterActivation = ENABLE; sFilterConfig.BankNumber = 14; if (HAL_CAN_ConfigFilter(&hcan, &sFilterConfig) != HAL_OK) { Error_Handler(); } } |
串口DMA + 空闲中断收发 ?
F103RCT6芯片对AFIO->MAPR寄存器写入时出错
使用STM32捕获PWM时同时捕获2个通道时会出现捕获的频率值不准确的问题
WS2812B怎么显示任意字符 / 图案?
STM32F103RCT6 定位孔 镂空,会影响使用吗?
HAL库1.8.4在做破坏性测试的时候出现g_state永远为busy的情况导致串口通信发送卡死
L9663驱动开发
用rt_thread 环境编写,DAP-LINK 下载烧录,每一次空芯片下载之后就无法二次下载。求解
stm32cubemx F103芯片tim3 encoder模式pc6和pc7引脚,自动生成代码缺少gpio映射。
stm32的同一个定时器,不同的通道,可以不同时的输出pwm波形吗
CAN只能手拉手串联,然后在首尾两个端点并联120欧匹配电阻。不能随便并联,如果要星形并联的话,每个都得并电阻,但电阻的值是相等的,并联后在星形结点处,等效电阻为60欧。
我想表达的就是多个串在一起