微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > ARM技术讨论 > STM32207串口中断问题 求解释

STM32207串口中断问题 求解释

时间:10-02 整理:3721RD 点击:
    各位大侠,小弟刚接触到一块STM32207的开发板,在UCOS移植过程中,发现USART1 和USART2  USART3 有些许不同   同样配置方法  1  3 都顺利能进入中断  可惜USART2始终不能进入中断。敢请哪位前辈指点一二。贴代码如下:
IO级与外设级的配置代码
void  USART2_Configuration(void)
{
   GPIO_InitTypeDef GPIO_InitStructure;
   USART_InitTypeDef USART_InitStructure;
   RCC_AHB1PeriphClockCmd(Open207Z_USART2_TX_GPIO_CLK,ENABLE);
   RCC_AHB1PeriphClockCmd(Open207Z_USART2_RX_GPIO_CLK,ENABLE);
   RCC_APB1PeriphClockCmd(Open207Z_USART2_CLK,ENABLE);
   
   GPIO_PinAFConfig(Open207Z_USART2_TX_GPIO_PORT, Open207Z_USART2_TX_SOURCE, Open207Z_USART2_TX_AF);
   GPIO_PinAFConfig(Open207Z_USART2_RX_GPIO_PORT, Open207Z_USART2_RX_SOURCE, Open207Z_USART2_RX_AF);
   GPIO_InitStructure.GPIO_Pin = Open207Z_USART2_TX_PIN;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
   GPIO_Init(Open207Z_USART2_TX_GPIO_PORT, &GPIO_InitStructure);
   GPIO_InitStructure.GPIO_Pin = Open207Z_USART2_RX_PIN;
   GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
   GPIO_Init(Open207Z_USART2_RX_GPIO_PORT, &GPIO_InitStructure);
  RCC_AHB1PeriphClockCmd(Open207Z_USART2_RTS_GPIO_CLK,ENABLE);
RCC_AHB1PeriphClockCmd(Open207Z_USART2_CTS_GPIO_CLK,ENABLE);

GPIO_PinAFConfig(Open207Z_USART2_RTS_GPIO_PORT, Open207Z_USART2_RTS_SOURCE, Open207Z_USART2_RTS_AF);
GPIO_PinAFConfig(Open207Z_USART2_CTS_GPIO_PORT, Open207Z_USART2_CTS_SOURCE, Open207Z_USART2_CTS_AF);
GPIO_InitStructure.GPIO_Pin = Open207Z_USART2_RTS_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(Open207Z_USART2_RTS_GPIO_PORT, &GPIO_InitStructure);
  
GPIO_InitStructure.GPIO_Pin = Open207Z_USART2_CTS_PIN;
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(Open207Z_USART2_CTS_GPIO_PORT, &GPIO_InitStructure);
  
  USART_ITConfig(Open207Z_USART2,USART_IT_RXNE,ENABLE);
  USART_ClearITPendingBit(USART2,USART_IT_RXNE);
  USART_Cmd(Open207Z_USART2, ENABLE);
  
}
void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);               
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;   
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);               
  NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;   
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//一共三个中断  选择1组  分别为 00   01  02
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);               
  NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;   
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}
中断服务子程序
void USART2_IRQHandler(void)
{
    CPU_SR          cpu_sr;
    CPU_CRITICAL_ENTER();                                       /* Tell uC/OS-II that we are starting an ISR            */
    OSIntNesting++;
    CPU_CRITICAL_EXIT();
    if (USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) {
                      /* Read one byte from the receive data register         */
        
        USART_ClearITPendingBit(USART2, USART_IT_RXNE);          /* Clear the USART Receive interrupt                   */
  USART_SendData(Open207Z_USART2, (uint8_t)USART_ReceiveData(Open207Z_USART2));
    }
    OSIntExit();
}
其他两个除去标号不同,配置方法都是一样的,目前中断都能顺利产生,而且还有一点就是1  3口都能ISP下载程序,偏偏2不行 请问为什么呢?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top