你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

共享中断向量串口不能同时工作,如何解决?

[复制链接]
yuanquanjiayuan 提问时间:2018-3-23 14:33 /
stm32f070RBt6的串口3和其它串口冲突不能同时工作,stm32f070RBt6为64脚,TX:24脚PC4;RX :25脚,

void USART3_Configuration(void)//´®¿Ú3³õʼ»¯º¯Êý
{
//NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure3;
/* Enable GPIO TX/RX clock */
__HAL_RCC_GPIOC_CLK_ENABLE();
/* Enable USART3 clock */
__HAL_RCC_USART3_CLK_ENABLE();
/*
* USART3_TX ­> PC4 , USART3_RX ­> PC5
*/
GPIO_InitStructure3.Pin = GPIO_Pin_4|GPIO_Pin_5;
GPIO_InitStructure3.Mode = GPIO_MODE_AF_PP;
GPIO_InitStructure3.Pull = GPIO_NOPULL;
GPIO_InitStructure3.Alternate = GPIO_AF_1;
GPIO_InitStructure3.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOC, &GPIO_InitStructure3);
/**
* @brief UART Initialization
*/
UartHandle3.Instance = USART3;
UartHandle3.Init.BaudRate = 115200;
UartHandle3.Init.WordLength = UART_WORDLENGTH_8B;
UartHandle3.Init.StopBits = UART_STOPBITS_1;
UartHandle3.Init.Parity = UART_PARITY_NONE;
UartHandle3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
UartHandle3.Init.Mode = UART_MODE_TX_RX;
UartHandle3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
if(HAL_UART_DeInit(&UartHandle3) != HAL_OK)
{
Usart1Error_Handler();
}
if(HAL_UART_Init(&UartHandle3) != HAL_OK)
{
Usart1Error_Handler();
}
/*##­3­ Configure the NVIC for UART ########################################*/
/* NVIC for USART1 */
//HAL_NVIC_SetPriority(USART3_4_IRQn, 3, 1);
//HAL_NVIC_EnableIRQ(USART3_4_IRQn);
/* Enable USART1 Receive and Transmit interrupts */
__HAL_UART_ENABLE_IT(&UartHandle3,UART_IT_RXNE);
__HAL_UART_ENABLE_IT(&UartHandle3,UART_IT_IDLE);
/* Enable the USART1 */
__HAL_UART_ENABLE(&UartHandle3);//ʹÄÜ´®¿Ú1
}

要如何设置?

收藏 评论8 发布时间:2018-3-23 14:33

举报

8个回答
maxtch 回答时间:2018-3-23 15:23:51
USART3 和 USART4 共用中断,只要你抓到中断就可以了。除此以外,正常情况不应该出现冲突现象。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

toofree 回答时间:2018-3-23 15:49:50
不至于吧,共享一个中断,进去总能查到是谁中断的吧。
用STM32F103时,IO中断9到15就是共用一个中断向量,从来没冲突过。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

yuanquanjiayuan 回答时间:2018-3-23 15:58:28
加上usart3程序就死掉,屏蔽usart3程序就能正常运行
yuanquanjiayuan 回答时间:2018-3-23 16:23:48
USART3 和 USART4 共用中断,USART3 和 USART4 只要屏蔽一个程序就能正常运行,2个都加上不行,USART3 和 USART4的初始化程序如下;void USART3_Configuration(void)//´®¿Ú3³õʼ»¯º¯Êý
{  
      //NVIC_InitTypeDef NVIC_InitStructure;
      GPIO_InitTypeDef  GPIO_InitStructure3;  
      /* Enable GPIO TX/RX clock */
      __HAL_RCC_GPIOC_CLK_ENABLE();
      /* Enable USART3 clock */
      __HAL_RCC_USART3_CLK_ENABLE();            
      /*
      *  USART3_TX -> PC4 , USART3_RX ->  PC5
      */                                
      GPIO_InitStructure3.Pin = GPIO_Pin_4|GPIO_Pin_5;                 
      GPIO_InitStructure3.Mode = GPIO_MODE_AF_PP;
      GPIO_InitStructure3.Pull = GPIO_NOPULL;
      GPIO_InitStructure3.Alternate = GPIO_AF_1;
      GPIO_InitStructure3.Speed = GPIO_SPEED_FREQ_HIGH;
      HAL_GPIO_Init(GPIOC, &GPIO_InitStructure3);               
            /**
      * @brief UART Initialization   
      */  
      UartHandle3.Instance        = USART3;
      UartHandle3.Init.BaudRate   = 115200;
      UartHandle3.Init.WordLength = UART_WORDLENGTH_8B;
      UartHandle3.Init.StopBits   = UART_STOPBITS_1;
      UartHandle3.Init.Parity     = UART_PARITY_NONE;
      UartHandle3.Init.HwFlowCtl  = UART_HWCONTROL_NONE;
      UartHandle3.Init.Mode       = UART_MODE_TX_RX;
      UartHandle3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
      if(HAL_UART_DeInit(&UartHandle3) != HAL_OK)
      {
            Usart1Error_Handler();
      }  
      if(HAL_UART_Init(&UartHandle3) != HAL_OK)
      {
            Usart1Error_Handler();
      }
            /*##-3- Configure the NVIC for UART ########################################*/  
      /* NVIC for USART1 */  
           // HAL_NVIC_SetPriority(USART3_4_IRQn, 3, 1);
    //  HAL_NVIC_EnableIRQ(USART3_4_IRQn);  
            /* Enable USART1 Receive and Transmit interrupts */
            __HAL_UART_ENABLE_IT(&UartHandle3,UART_IT_RXNE);
      //__HAL_UART_ENABLE_IT(&UartHandle3,UART_IT_IDLE);       
            /* Enable the USART1 */
            __HAL_UART_ENABLE(&UartHandle3);//ʹÄÜ´®¿Ú1
}         
yuanquanjiayuan 回答时间:2018-3-23 16:24:08
void USART4_Configuration(void)//´®¿Ú³õʼ»¯º¯Êý
{  
     //NVIC_InitTypeDef NVIC_InitStructure;
     GPIO_InitTypeDef  GPIO_InitStructure4;
     /* Enable GPIO TX/RX clock */
     __HAL_RCC_GPIOC_CLK_ENABLE();
     /* Enable USART4 clock */
     __HAL_RCC_USART4_CLK_ENABLE();            
     /*
     *  USART4_TX -> PC10 , USART4_RX ->  PC11
     */                                
     GPIO_InitStructure4.Pin = GPIO_Pin_10|GPIO_Pin_11;                 
     GPIO_InitStructure4.Mode = GPIO_MODE_AF_PP;
     GPIO_InitStructure4.Pull = GPIO_NOPULL;
     GPIO_InitStructure4.Alternate = GPIO_AF_1;
     GPIO_InitStructure4.Speed = GPIO_SPEED_FREQ_HIGH;
     HAL_GPIO_Init(GPIOC, &GPIO_InitStructure4);               
           /**
     * @brief UART Initialization   
     */  
     UartHandle4.Instance        = USART4;
     UartHandle4.Init.BaudRate   = 115200;
     UartHandle4.Init.WordLength = UART_WORDLENGTH_8B;
     UartHandle4.Init.StopBits   = UART_STOPBITS_1;
     UartHandle4.Init.Parity     = UART_PARITY_NONE;
     UartHandle4.Init.HwFlowCtl  = UART_HWCONTROL_NONE;
     UartHandle4.Init.Mode       = UART_MODE_TX_RX;
     UartHandle4.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
     if(HAL_UART_DeInit(&UartHandle4) != HAL_OK)
     {
          Usart1Error_Handler();
     }  
     if(HAL_UART_Init(&UartHandle4) != HAL_OK)
     {
          Usart1Error_Handler();
     }
           /*##-3- Configure the NVIC for UART ########################################*/  
     /* NVIC for USART1 */  
           HAL_NVIC_SetPriority(USART3_4_IRQn, 3, 1);
     HAL_NVIC_EnableIRQ(USART3_4_IRQn);  
           /* Enable USART1 Receive and Transmit interrupts */
           __HAL_UART_ENABLE_IT(&UartHandle4,UART_IT_RXNE);
     //__HAL_UART_ENABLE_IT(&UartHandle4,UART_IT_IDLE);       
           /* Enable the USART1 */
           __HAL_UART_ENABLE(&UartHandle4);//ʹÄÜ´®¿Ú1
}               
butterflyspring 回答时间:2018-3-23 16:26:46
不会冲突呀,你在接收完成的回调函数那里判断一下Instance是USART4还是USART3就可以了呀

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

yuanquanjiayuan 回答时间:2018-3-23 20:23:43
#define GPIO_AF1_USART3       ((uint8_t)0x01U)  /*!< AF1: USART4 Alternate Function mapping 是USART3重映射还是USART4重映射
夏雨夜寐 回答时间:2018-5-30 09:54:03
应该不至于会影响到,关键点应该在中断处理部分对两个串口接受或发送标志的检测是否正确

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版