硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2860|回复: 7
收起左侧

[有问必答] 求助can1和can2中断收发

[复制链接]

32

主题

103

回帖

199

积分

高级会员

积分
199
发表于 2018-6-21 13:32:37 | 显示全部楼层 |阅读模式
请问:这是一个can1和can2互相收发的程序,在主函数中发送,在中断里接收,然后通过串口2发送出来。之前调试没问题的,但是现在调试不出来了,调试发现不进接收中断,但是查看配置,感觉中断的配置没有问题,所以现在卡死了,不知道为什么了。希望能获得你的帮助
can1和can2中断收发

STM32F107_2can_rx_tx_uart2.rar (1.21 MB, 下载次数: 58)
回复

使用道具 举报

32

主题

103

回帖

199

积分

高级会员

积分
199
 楼主| 发表于 2018-6-21 14:37:21 | 显示全部楼层
CAN_Transmit()调试发现这个函数的返回值是4,也就是没有空闲邮箱,怎么设置出来空闲邮箱呢?
有4个数  0 1 2 4
其中4代表
CAN cell did not provide an empty mailbox ,我是正常配置的,为啥没有邮箱呢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
发表于 2018-6-21 15:41:54 | 显示全部楼层
下载看了下,没发现什么问题,下面的是F4的,跟F107应该是一样的:

  1. /*
  2. *********************************************************************************************************
  3.                                             CAN1引脚配置
  4. 由于跳线帽的设置:
  5.         CAN1的TX可以选择引脚PB9或者PA12。
  6.         CAN1的RX可以选择引脚PB8或者PA11。
  7.         从而有下面四种组合:
  8.         PB9_TX      PB8_RX
  9.         PA12_TX     PB8_RX
  10.         PA12_TX     PA11_RX
  11.         PB9_TX      PA11_RX

  12. 本例子是用的PB9_TX   PB8_RX,也就是:
  13.         1. J12跳线帽短路1-2: CAN收发器的RX连接到CPU的PB8引脚。
  14.         2. J13跳线帽短路1-2: CAN收发器的TX连接到CPU的PB9引脚。
  15. ********************************************************************************************************
  16. */
  17. #define CAN1_CLK                    RCC_APB1Periph_CAN1
  18. #define CAN1_RX_PIN                 GPIO_Pin_8
  19. #define CAN1_TX_PIN                 GPIO_Pin_9
  20. #define CAN1_GPIO_TX_PORT           GPIOB
  21. #define CAN1_GPIO_TX_CLK            RCC_AHB1Periph_GPIOB
  22. #define CAN1_GPIO_RX_PORT           GPIOB
  23. #define CAN1_GPIO_RX_CLK            RCC_AHB1Periph_GPIOB
  24. #define CAN1_AF_PORT                GPIO_AF_CAN1
  25. #define CAN1_RX_SOURCE              GPIO_PinSource8
  26. #define CAN1_TX_SOURCE              GPIO_PinSource9

  27. /*
  28. *********************************************************************************************************
  29.                                             CAN2引脚配置
  30. ********************************************************************************************************
  31. */
  32. #define CAN2_CLK                 RCC_APB1Periph_CAN2
  33. #define CAN2_RX_PIN              GPIO_Pin_12
  34. #define CAN2_TX_PIN              GPIO_Pin_13
  35. #define CAN2_GPIO_PORT           GPIOB
  36. #define CAN2_GPIO_CLK            RCC_AHB1Periph_GPIOB
  37. #define CAN2_AF_PORT             GPIO_AF_CAN2
  38. #define CAN2_RX_SOURCE           GPIO_PinSource12
  39. #define CAN2_TX_SOURCE           GPIO_PinSource13


  40. /* 定义全局变量 */
  41. CanTxMsg g_tCanTxMsg;        /* 用于发送 */
  42. CanRxMsg g_tCanRxMsg;        /* 用于接收 */
  43. uint8_t g_ucLedNo = 0;        /* 点亮的LED灯序号,0-3 */

  44. /* 仅允许本文件内调用的函数声明 */
  45. static void can1_Init(void);
  46. static void can1_NVIC_Config(void);
  47. static void can2_Init(void);
  48. static void can2_NVIC_Config(void);

  49. void can_LedCtrl(void);
  50. void can_BeepCtrl(void);

  51. extern TimerHandle_t xTimers;
  52. extern QueueHandle_t xQueue1;
  53. extern QueueHandle_t xQueue2;

  54. /*
  55. *********************************************************************************************************
  56. *        函 数 名: can_demo
  57. *        功能说明: CAN网络例程
  58. *        形    参: 无
  59. *        返 回 值: 无
  60. *********************************************************************************************************
  61. */
  62. void can_demo(void)
  63. {       
  64.         uint8_t ucKeyCode;                   /* 按键代码 */
  65.        
  66.         can1_Init();                        /* 初始化STM32 CAN1硬件 */
  67.         can1_NVIC_Config();                /* 配置CAN1中断 */
  68.        
  69.         can2_Init();                        /* 初始化STM32 CAN2硬件 */
  70.         can2_NVIC_Config();                /* 配置CAN2中断 */
  71.        
  72.         g_ucLedNo = 0;
  73.         /* 先关闭所有的LED,再点亮其中一个LED */
  74.         bsp_LedOff(1);
  75.         bsp_LedOff(2);
  76.         bsp_LedOff(3);
  77.         bsp_LedOff(4);
  78.         bsp_LedOn(g_ucLedNo + 1);

  79.         while(1)
  80.         {
  81.                 /* 处理按键事件 */
  82.                 ucKeyCode = bsp_GetKey();
  83.                 if (ucKeyCode > 0)
  84.                 {
  85.                         /* 有键按下 */
  86.                         switch (ucKeyCode)
  87.                         {
  88.                                 case KEY_DOWN_K1:                        /* K1键按下 */
  89.                                         can_LedCtrl();               
  90.                                         break;

  91.                                 case KEY_DOWN_K2:                        /* K2键按下 */
  92.                                         xTimerStart(xTimers, 50);
  93.                                         break;

  94.                                 case KEY_DOWN_K3:                        /* K3键按下 */
  95.                                         xTimerStop( xTimers, portMAX_DELAY);
  96.                                         break;
  97.                                
  98.                                 case JOY_DOWN_OK:                        /* K3键按下 */
  99.                                         can_BeepCtrl();
  100.                                         break;

  101.                                 default:
  102.                                         /* 其它的键值不处理 */
  103.                                         break;
  104.                         }
  105.                 }
  106.                
  107.                 vTaskDelay(5);
  108.         }
  109. }

  110. /*
  111. *********************************************************************************************************
  112. *        函 数 名: can_LedCtrl
  113. *        功能说明: 发送一包数据,控制LED
  114. *        形    参: 无
  115. *        返 回 值: 无
  116. *********************************************************************************************************
  117. */
  118. void can_LedCtrl(void)
  119. {
  120.         /* 每按1次按键,点亮下一个LED,并向CAN网络发送一包数据 */
  121.         if (++g_ucLedNo > 3)
  122.         {
  123.                 g_ucLedNo = 0;
  124.         }

  125.        
  126.         /* 填充发送参数 */
  127.         g_tCanTxMsg.StdId = 0x321;
  128.         g_tCanTxMsg.ExtId = 0x01;
  129.         g_tCanTxMsg.RTR = CAN_RTR_DATA;
  130.         g_tCanTxMsg.IDE = CAN_ID_STD;
  131.        
  132.         /* 向CAN网络发送1个字节数据, 指LED灯序号 */
  133.         g_tCanTxMsg.DLC = 1;          /* 每包数据支持0-8个字节,这里设置为发送1个字节 */
  134.     g_tCanTxMsg.Data[0] = g_ucLedNo;
  135.        
  136.     CAN_Transmit(CAN1, &g_tCanTxMsg);       
  137. }

  138. /*
  139. *********************************************************************************************************
  140. *        函 数 名: can_BeepCtrl
  141. *        功能说明: 发送一包数据,控制蜂鸣器
  142. *        形    参: 无
  143. *        返 回 值: 无
  144. *********************************************************************************************************
  145. */
  146. void can_BeepCtrl(void)
  147. {               
  148.         /* 填充发送参数, 也可以再每次发送的时候填 */
  149.         g_tCanTxMsg.StdId = 0x321;
  150.         g_tCanTxMsg.ExtId = 0x01;
  151.         g_tCanTxMsg.RTR = CAN_RTR_DATA;
  152.         g_tCanTxMsg.IDE = CAN_ID_STD;
  153.        
  154.         g_tCanTxMsg.DLC = 1;
  155.                                                
  156.         g_tCanTxMsg.Data[1] = 0x01;                /* 01表示鸣叫1次 */
  157.     CAN_Transmit(CAN2, &g_tCanTxMsg);       
  158. }

  159. /*
  160. *********************************************************************************************************
  161. *        函 数 名: can1_Init
  162. *        功能说明: 配置CAN硬件,设置波特率为1Mbps
  163. *        形    参: 无
  164. *        返 回 值: 无
  165. *********************************************************************************************************
  166. */
  167. static void can1_Init(void)
  168. {
  169.         uint8_t res;
  170.         GPIO_InitTypeDef  GPIO_InitStructure;
  171.         CAN_InitTypeDef        CAN_InitStructure;
  172.         CAN_FilterInitTypeDef  CAN_FilterInitStructure;

  173.         /* CAN GPIOs 配置*/
  174.         /* 使能GPIO时钟 */
  175.         RCC_AHB1PeriphClockCmd(CAN1_GPIO_TX_CLK|CAN1_GPIO_RX_CLK, ENABLE);

  176.         /* 引脚映射为CAN功能  */
  177.         GPIO_PinAFConfig(CAN1_GPIO_RX_PORT, CAN1_RX_SOURCE, CAN1_AF_PORT);
  178.         GPIO_PinAFConfig(CAN1_GPIO_TX_PORT, CAN1_TX_SOURCE, CAN1_AF_PORT);

  179.         /* 配置 CAN RX 和 TX 引脚 */
  180.         GPIO_InitStructure.GPIO_Pin = CAN1_RX_PIN;
  181.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  182.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  183.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  184.         GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
  185.         GPIO_Init(CAN1_GPIO_RX_PORT, &GPIO_InitStructure);

  186.         GPIO_InitStructure.GPIO_Pin = CAN1_TX_PIN;
  187.         GPIO_Init(CAN1_GPIO_TX_PORT, &GPIO_InitStructure);

  188.         /* CAN配置*/  
  189.         /* 使能CAN时钟 */
  190.         RCC_APB1PeriphClockCmd(CAN1_CLK, ENABLE);
  191.         /* 复位CAN寄存器 */
  192.         CAN_DeInit(CAN1);
  193.        
  194.         /*
  195.                 TTCM = time triggered communication mode
  196.                 ABOM = automatic bus-off management
  197.                 AWUM = automatic wake-up mode
  198.                 NART = no automatic retransmission
  199.                 RFLM = receive FIFO locked mode
  200.                 TXFP = transmit FIFO priority               
  201.         */
  202.         CAN_InitStructure.CAN_TTCM = DISABLE;                        /* 禁止时间触发模式(不生成时间戳), T  */
  203.         CAN_InitStructure.CAN_ABOM = DISABLE;                        /* 禁止自动总线关闭管理 */
  204.         CAN_InitStructure.CAN_AWUM = DISABLE;                        /* 禁止自动唤醒模式 */
  205.         CAN_InitStructure.CAN_NART = DISABLE;                        /* 禁止仲裁丢失或出错后的自动重传功能 */
  206.         CAN_InitStructure.CAN_RFLM = DISABLE;                        /* 禁止接收FIFO加锁模式 */
  207.         CAN_InitStructure.CAN_TXFP = DISABLE;                        /* 禁止传输FIFO优先级 */
  208.         CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;        /* 设置CAN为正常工作模式 */
  209.        
  210.         /*
  211.                 CAN 波特率 = RCC_APB1Periph_CAN1 / Prescaler / (SJW + BS1 + BS2);
  212.                
  213.                 SJW = synchronisation_jump_width
  214.                 BS = bit_segment
  215.                
  216.                 本例中,设置CAN波特率为1 Mbps               
  217.                 CAN 波特率 = 420000000 / 2 / (1 + 12 + 8) / = 1 Mbps               
  218.         */
  219.         CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
  220.         CAN_InitStructure.CAN_BS1 = CAN_BS1_12tq;
  221.         CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq;
  222.         CAN_InitStructure.CAN_Prescaler = 2;
  223.         res = CAN_Init(CAN1, &CAN_InitStructure);
  224.        
  225.         printf("CAN1 res =%d ----------------------\r\n", res);
  226.        
  227.         /* 设置CAN 筛选器0 */
  228.         CAN_FilterInitStructure.CAN_FilterNumber = 0;                /*  筛选器序号,0-13,共14个滤波器 */
  229.         CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;                /* 筛选器模式,设置ID掩码模式 */
  230.         CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;        /* 32位筛选器 */
  231.         CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;                                        /* 掩码后ID的高16bit */
  232.         CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;                                        /* 掩码后ID的低16bit */
  233.         CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;                                /* ID掩码值高16bit */
  234.         CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;                                /* ID掩码值低16bit */
  235.         CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO0;                /* 筛选器绑定FIFO 0 */
  236.         CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;                                /* 使能筛选器 */
  237.         CAN_FilterInit(&CAN_FilterInitStructure);

  238.         /* 填充发送参数, 也可以再每次发送的时候填 */
  239.         g_tCanTxMsg.StdId = 0x321;
  240.         g_tCanTxMsg.ExtId = 0x01;
  241.         g_tCanTxMsg.RTR = CAN_RTR_DATA;
  242.         g_tCanTxMsg.IDE = CAN_ID_STD;
  243.         g_tCanTxMsg.DLC = 1;
  244. }   

  245. /*
  246. *********************************************************************************************************
  247. *        函 数 名: can2_Init
  248. *        功能说明: 配置CAN硬件
  249. *        形    参: 无
  250. *        返 回 值: 无
  251. *********************************************************************************************************
  252. */
  253. static void can2_Init(void)
  254. {
  255.         uint8_t res;
  256.         GPIO_InitTypeDef  GPIO_InitStructure;
  257.         CAN_InitTypeDef        CAN_InitStructure;
  258.         CAN_FilterInitTypeDef  CAN_FilterInitStructure;

  259.         /* CAN GPIOs 配置*/
  260.         /* 使能GPIO时钟 */
  261.         RCC_AHB1PeriphClockCmd(CAN2_GPIO_CLK, ENABLE);

  262.         /* 引脚映射为CAN功能  */
  263.         GPIO_PinAFConfig(CAN2_GPIO_PORT, CAN2_RX_SOURCE, CAN2_AF_PORT);
  264.         GPIO_PinAFConfig(CAN2_GPIO_PORT, CAN2_TX_SOURCE, CAN2_AF_PORT);

  265.         /* 配置 CAN RX 和 TX 引脚 */
  266.         GPIO_InitStructure.GPIO_Pin = CAN2_RX_PIN|CAN2_TX_PIN;
  267.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  268.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  269.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  270.         GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
  271.         GPIO_Init(CAN2_GPIO_PORT, &GPIO_InitStructure);

  272.         /* CAN配置*/  
  273.         /* 使能CAN时钟, 使用CAN2必须打开CAN1的时钟 */
  274.         RCC_APB1PeriphClockCmd(CAN2_CLK, ENABLE);

  275.         /* 复位CAN寄存器 */
  276.         CAN_DeInit(CAN2);
  277.        
  278.         /*
  279.                 TTCM = time triggered communication mode
  280.                 ABOM = automatic bus-off management
  281.                 AWUM = automatic wake-up mode
  282.                 NART = no automatic retransmission
  283.                 RFLM = receive FIFO locked mode
  284.                 TXFP = transmit FIFO priority               
  285.         */
  286.         CAN_InitStructure.CAN_TTCM = DISABLE;                        /* 禁止时间触发模式(不生成时间戳), T  */
  287.         CAN_InitStructure.CAN_ABOM = DISABLE;                        /* 禁止自动总线关闭管理 */
  288.         CAN_InitStructure.CAN_AWUM = DISABLE;                        /* 禁止自动唤醒模式 */
  289.         CAN_InitStructure.CAN_NART = DISABLE;                        /* 禁止仲裁丢失或出错后的自动重传功能 */
  290.         CAN_InitStructure.CAN_RFLM = DISABLE;                        /* 禁止接收FIFO加锁模式 */
  291.         CAN_InitStructure.CAN_TXFP = DISABLE;                        /* 禁止传输FIFO优先级 */
  292.         CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;        /* 设置CAN为正常工作模式 */
  293.        
  294.         /*
  295.                 CAN 波特率 = RCC_APB1Periph_CAN1 / Prescaler / (SJW + BS1 + BS2);
  296.                
  297.                 SJW = synchronisation_jump_width
  298.                 BS = bit_segment
  299.                
  300.                 本例中,设置CAN波特率为1 Mbps               
  301.                 CAN 波特率 = 420000000 / 2 / (1 + 12 + 8) / = 1 Mbps               
  302.         */
  303.         CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
  304.         CAN_InitStructure.CAN_BS1 = CAN_BS1_12tq;
  305.         CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq;
  306.         CAN_InitStructure.CAN_Prescaler = 2;
  307.         res = CAN_Init(CAN2, &CAN_InitStructure);
  308.        
  309.         printf("CAN2 res =%d ----------------------\r\n", res);
  310.        
  311.         /* 设置CAN筛选器序号14 ,CAN2筛选器序号 14--27,而CAN1的是0--13*/
  312.         CAN_FilterInitStructure.CAN_FilterNumber = 14;                                                /* 筛选器序号,14-27,共14个滤波器 */
  313.         CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;                /* 筛选器模式,设置ID掩码模式 */
  314.         CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;        /* 32位筛选器 */
  315.         CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;                                        /* 掩码后ID的高16bit */
  316.         CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;                                        /* 掩码后ID的低16bit */
  317.         CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;                                /* ID掩码值高16bit */
  318.         CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;                                /* ID掩码值低16bit */
  319.         CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO1;                /*  筛选器绑定FIFO 1 */
  320.         CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;                                /* 使能筛选器 */
  321.         CAN_FilterInit(&CAN_FilterInitStructure);
  322. }

  323. /*
  324. *********************************************************************************************************
  325. *        函 数 名: can1_NVIC_Config
  326. *        功能说明: 配置CAN中断
  327. *        形    参:无
  328. *        返 回 值: 无
  329. *********************************************************************************************************
  330. */  
  331. static void can1_NVIC_Config(void)
  332. {
  333.         NVIC_InitTypeDef  NVIC_InitStructure;
  334.        
  335.         NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;;
  336.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;
  337.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
  338.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  339.         NVIC_Init(&NVIC_InitStructure);
  340.        
  341.         /* CAN FIFO0 消息接收中断使能 */
  342.         CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);       
  343. }

  344. /*
  345. *********************************************************************************************************
  346. *        函 数 名: can2_NVIC_Config
  347. *        功能说明: 配置CAN中断
  348. *        形    参:无
  349. *        返 回 值: 无
  350. *********************************************************************************************************
  351. */  
  352. static void can2_NVIC_Config(void)
  353. {
  354.         NVIC_InitTypeDef  NVIC_InitStructure;
  355.        
  356.         NVIC_InitStructure.NVIC_IRQChannel = CAN2_RX1_IRQn;
  357.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;
  358.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
  359.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  360.         NVIC_Init(&NVIC_InitStructure);
  361.        
  362.         /* CAN FIFO1 消息接收中断使能 */
  363.         CAN_ITConfig(CAN2, CAN_IT_FMP1, ENABLE);       
  364. }

  365. /*
  366. *********************************************************************************************************
  367. *        函 数 名: CAN1_RX0_IRQHandler
  368. *        功能说明: CAN中断服务程序.
  369. *        形    参:无
  370. *        返 回 值: 无
  371. *********************************************************************************************************
  372. */
  373. void CAN1_RX0_IRQHandler(void)
  374. {
  375.         BaseType_t xHigherPriorityTaskWoken = pdFALSE;
  376.        
  377.         CAN_Receive(CAN1, CAN_FIFO0, &g_tCanRxMsg);
  378.         if ((g_tCanRxMsg.StdId == 0x321) && (g_tCanRxMsg.IDE == CAN_ID_STD) && (g_tCanRxMsg.DLC == 1))
  379.         {
  380.                 xQueueSendFromISR(xQueue2,
  381.                                                   (void *)&(g_tCanRxMsg.Data[0]),
  382.                                                    &xHigherPriorityTaskWoken);
  383.                                           
  384.                 /* 如果xHigherPriorityTaskWoken = pdTRUE,那么退出中断后切到当前最高优先级任务执行 */
  385.                 portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
  386.         }
  387. }

  388. /*
  389. *********************************************************************************************************
  390. *        函 数 名: CAN2_RX1_IRQHandler
  391. *        功能说明: CAN中断服务程序.
  392. *        形    参:无
  393. *        返 回 值: 无
  394. *********************************************************************************************************
  395. */
  396. void CAN2_RX1_IRQHandler(void)
  397. {
  398.         BaseType_t xHigherPriorityTaskWoken = pdFALSE;
  399.        
  400.         CAN_Receive(CAN2, CAN_FIFO1, &g_tCanRxMsg);
  401.         if ((g_tCanRxMsg.StdId == 0x321) && (g_tCanRxMsg.IDE == CAN_ID_STD) && (g_tCanRxMsg.DLC == 1))
  402.         {
  403.                 /* 向消息队列xQueue1发数据, 控制LED */
  404.                 xQueueSendFromISR(xQueue1,
  405.                                                   (void *)&(g_tCanRxMsg.Data[0]),
  406.                                                    &xHigherPriorityTaskWoken);
  407.                                   
  408.                 /* 如果xHigherPriorityTaskWoken = pdTRUE,那么退出中断后切到当前最高优先级任务执行 */
  409.                 portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
  410.         }
  411. }

  412. /***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/
复制代码


回复

使用道具 举报

32

主题

103

回帖

199

积分

高级会员

积分
199
 楼主| 发表于 2018-6-24 09:51:25 | 显示全部楼层
eric2013 发表于 2018-6-21 15:41
下载看了下,没发现什么问题,下面的是F4的,跟F107应该是一样的:

假如两块电路板通信,程序不用改,直接把线接上就行吗?
回复

使用道具 举报

28

主题

178

回帖

262

积分

高级会员

积分
262
发表于 2018-6-24 17:37:49 | 显示全部楼层
eric2013 发表于 2018-6-21 15:41
下载看了下,没发现什么问题,下面的是F4的,跟F107应该是一样的:

哈哈  我之前调试也遇见过。。。问题原因应该是从设备没有响应。没有ack帧,导致主控端一直以为数据没有发送。一直占用发送fifo,几次以后,fifo满了 就提示错误4~

解决方案是把从设备连接上就好了。
回复

使用道具 举报

28

主题

178

回帖

262

积分

高级会员

积分
262
发表于 2018-6-24 17:37:56 | 显示全部楼层
伊森亨特 发表于 2018-6-24 09:51
假如两块电路板通信,程序不用改,直接把线接上就行吗?

哈哈  我之前调试也遇见过。。。问题原因应该是从设备没有响应。没有ack帧,导致主控端一直以为数据没有发送。一直占用发送fifo,几次以后,fifo满了 就提示错误4~

解决方案是把从设备连接上就好了。
回复

使用道具 举报

18

主题

321

回帖

375

积分

高级会员

积分
375
发表于 2018-7-3 22:56:43 | 显示全部楼层
楼主问题解决了吗
回复

使用道具 举报

32

主题

103

回帖

199

积分

高级会员

积分
199
 楼主| 发表于 2018-7-4 08:12:29 | 显示全部楼层
王海靖 发表于 2018-7-3 22:56
楼主问题解决了吗

跳线帽差错了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-12 05:35 , Processed in 0.324733 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表