打印
[STM32F1]

can通讯进不了接收中断,很困惑,已经好几天了

[复制链接]
1133|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1156807738|  楼主 | 2020-4-2 10:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 1156807738 于 2020-4-2 10:32 编辑

各位前辈,请指导下我这个菜**,一直找不到原因。板子是F103ZET6
现象:
USB-CAN连接板子后,通过CANTEXT发送数据给F103,发送成功,但板子一直未进入接收中断。
F103可正常发送数据给上位机软件。

有前辈,有时间可以给看下到底哪的问题吗
int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  CarCanInit();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */
  //unsigned char len;
// unsigned char buf[20] = {1,2,3,4,5,6,7,8,9};

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
         // HAL_UART_Transmit(&huart1,buf,20,1000);
         // HAL_Delay(1000);
    /* USER CODE END WHILE */
#if 1

            CAN_RX_FRAME * pxRecFrame = NULL;
            CAN_TX_FRAME  xTxCarData;
            /*
            xTxCarData.xTxHeader.StdId = 0x123;
                xTxCarData.xTxHeader.IDE = CAN_ID_STD;     //标准帧
            xTxCarData.xTxHeader.RTR = CAN_RTR_DATA;   //数据帧
            xTxCarData.xTxHeader.DLC = 4;
            xTxCarData.ucData[0] = 0;
            xTxCarData.ucData[1] = 1;
            xTxCarData.ucData[2] = 2;
            xTxCarData.ucData[3] = 3;
            PHY_CAN1_TX(&xTxCarData);
            HAL_Delay(500);
            */
            pxRecFrame = PHY_CAN1_READ();

            if(NULL==pxRecFrame)
            {
               continue;
            }
            //HAL_UART_Transmit(&huart1,buf,20,1000);
                HAL_UART_Transmit(&huart1,pxRecFrame->ucData,4,1000);
            PHY_CAN1_FIFO_RELEASE();    //处理结束清空对应的fifo
                HAL_Delay(1000);
#endif
  }
    /* USER CODE BEGIN 3 */


  /* USER CODE END 3 */
}


void CarCanInit(void)
{
        Phy_CanInit(CAN1, CAN_BAUD_50K, &pxCarCan);
    Obj_CarCanFilterSet(&hcan1);
    HAL_CAN_Start(&hcan1);
}



void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan)
{
  if(hcan->Instance==CAN1)
  {
  /* USER CODE BEGIN CAN1_MspInit 0 */
        GPIO_InitTypeDef GPIO_InitStruct = {0};
  /* USER CODE END CAN1_MspInit 0 */
    /* Peripheral clock enable */

    __HAL_RCC_CAN1_CLK_ENABLE();
    __HAL_RCC_GPIOA_CLK_ENABLE();

    GPIO_InitStruct.Pin= GPIO_PIN_12;                           //PA12
    GPIO_InitStruct.Mode=GPIO_MODE_AF_PP;          //推挽复用
    GPIO_InitStruct.Pull=GPIO_PULLUP;              //上拉
    GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_HIGH;    //高速
    HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);         //初始化

    GPIO_InitStruct.Pin=GPIO_PIN_11;                               //PA11
    GPIO_InitStruct.Mode=GPIO_MODE_AF_INPUT;             //推挽复用
    HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);         //初始化
  /* USER CODE BEGIN CAN1_MspInit 1 */
    HAL_NVIC_SetPriority(CAN1_RX0_IRQn, 2, 0);    //仅次于SPI
    HAL_NVIC_EnableIRQ(CAN1_RX0_IRQn);

  /* USER CODE END CAN1_MspInit 1 */
  }


}

//直接再这里写的中断处理函数,上位机发送数据,不进入这里的中断
void CAN1_RX1_IRQHandler(void)
{
  /* USER CODE BEGIN CAN1_RX1_IRQn 0 */

  /* USER CODE END CAN1_RX1_IRQn 0 */
        PHY_CAN1_RX_IRQ_HANDLER();
  /* USER CODE BEGIN CAN1_RX1_IRQn 1 */

  /* USER CODE END CAN1_RX1_IRQn 1 */
}


使用特权

评论回复
沙发
mmuuss586| | 2020-5-17 21:09 | 只看该作者

使用特权

评论回复
板凳
泰山特曲123| | 2020-5-23 14:22 | 只看该作者
波特率对不对?CAN H和CAN L要有个终端电阻。先不要使能软件滤波器

使用特权

评论回复
评论
lihui567 2020-7-31 09:14 回复TA
波特率肯定对,发送都正常了 
地板
_L_D_H_| | 2020-5-25 10:27 | 只看该作者
贴的代码乱七八糟,别看都不不愿意看,怎么帮你分析

使用特权

评论回复
5
1156807738|  楼主 | 2020-7-30 21:27 | 只看该作者
结帖下,因为HAL库不是很熟悉,没进入中断的原因是,未打开中断。把中断打开就行了。
需要先开启CAN通讯,再开启中断,之前的顺序搞反了导致的。
感谢各位前辈的回帖,谢谢!

使用特权

评论回复
6
lihui567| | 2020-7-31 09:05 | 只看该作者
1156807738 发表于 2020-7-30 21:27
结帖下,因为HAL库不是很熟悉,没进入中断的原因是,未打开中断。把中断打开就行了。
需要先开启CAN通讯, ...

LZ能找到问题最好了,如果直接用CUBE MX工具配置的话,应该不会出这个问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

40

帖子

0

粉丝