DBMY 2021-07-20 15:13 采纳率: 0%
浏览 63

STM32F103将USART2功能改为USART1,USART1不能进入中断,请问怎么解决。

在修改一个STM32IAP的程序,参考代码是用的是USART2,我工程用的是USART1,现在把USART2功能转到USART1来使用。在线调试,收发数据都无法进入USART1_IRQHandler。USART1串口配置如下:

void uart1_init(u32 bound)
{
    //GPIO¶Ë¿ÚÉèÖÃ
    GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        
        USART_DeInit(USART1);  //¸´Î»´®¿Ú1
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE);  //ʹÄÜUSART1£¬GPIOAʱÖÓ
        
//    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);    //ʹÄÜUSART1£¬GPIOAʱÖÓ
//    USART_DeInit(USART1);  //¸´Î»´®¿Ú1
    //USART1_TX   PA.9
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;    //¸´ÓÃÍÆÍìÊä³ö
    GPIO_Init(GPIOA, &GPIO_InitStructure); //³õʼ»¯PA9

    //USART1_RX      PA.10
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//¸¡¿ÕÊäÈë
    GPIO_Init(GPIOA, &GPIO_InitStructure);  //³õʼ»¯PA10
   

    //USART ³õʼ»¯ÉèÖÃ
    USART_InitStructure.USART_BaudRate = bound;//Ò»°ãÉèÖÃΪ9600;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö³¤Îª8λÊý¾Ý¸ñʽ
    USART_InitStructure.USART_StopBits = USART_StopBits_1;//Ò»¸öֹͣλ
    USART_InitStructure.USART_Parity = USART_Parity_No;//ÎÞÆæżУÑéλ
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎÞÓ²¼þÊý¾ÝÁ÷¿ØÖÆ
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;    //ÊÕ·¢Ä£Ê½

    USART_Init(USART1, &USART_InitStructure); //³õʼ»¯´®¿Ú
    
    
    
        USART_ITConfig(USART1,USART_IT_TC,DISABLE); 
//        USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); 
        USART_ITConfig(USART1,USART_IT_RXNE,DISABLE); 
        USART_ITConfig(USART1,USART_IT_IDLE,ENABLE);//¿ªÆô´®¿Ú¿ÕÏÐÖжÏ
        
        USART_DMACmd(USART1,USART_DMAReq_Rx,ENABLE);//²ÉÓÃDMA·½Ê½½ÓÊÕ
        USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE);//²ÉÓÃDMA·½Ê½·¢ËÍ
        USART_Cmd(USART1, ENABLE); 
    //Usart1 NVIC ÅäÖÃ

    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//ÇÀÕ¼ÓÅÏȼ¶3
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;        //×ÓÓÅÏȼ¶3
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;            //IRQͨµÀʹÄÜ
    NVIC_Init(&NVIC_InitStructure);    //¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯VIC¼Ä´æÆ÷
    
}

void DMA_USART1_Configuration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;
        DMA_InitTypeDef DMA_InitStructure;
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
        //USART1_DMA½ÓÊÕÅäÖÃ
        DMA_DeInit(DMA1_Channel6); 
        DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)(&USART1->DR); 
        DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)Uart1_Rx; 
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; 
        DMA_InitStructure.DMA_BufferSize = UART1_RX_LEN; 
        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; 
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; 
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; 
        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; 
        DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; 
        DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; 
        DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;     
        DMA_Init(DMA1_Channel6,&DMA_InitStructure); 
        DMA_Cmd(DMA1_Channel6,ENABLE);
        //USART1_DMA ·¢ËÍ ÅäÖÃ
        DMA_DeInit(DMA1_Channel7);
        DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)(&USART1->DR);
        DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)Uart1_Tx;
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
        DMA_InitStructure.DMA_BufferSize = UART1_TX_LEN;
        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
        DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_Byte;
        DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
        DMA_InitStructure.DMA_Priority = DMA_Priority_High;
        DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
        DMA_Init(DMA1_Channel7,&DMA_InitStructure);
        DMA_ITConfig(DMA1_Channel7,DMA_IT_TC,ENABLE);
        DMA_Cmd(DMA1_Channel7, DISABLE);

        NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel7_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}


  • 写回答

2条回答 默认 最新

  • dceacho 2021-07-20 16:24
    关注

    查找
    USART2
    USART
    这两关键词,看看哪里有漏掉没改过来的

    评论

报告相同问题?

问题事件

  • 创建了问题 7月20日

悬赏问题

  • ¥15 软件供应链安全是跟可靠性有关还是跟安全性有关?
  • ¥15 电脑蓝屏logfilessrtsrttrail问题
  • ¥20 关于wordpress建站遇到的问题!(语言-php)(相关搜索:云服务器)
  • ¥15 【求职】怎么找到一个周围人素质都很高不会欺负他人,并且未来月薪能够达到一万以上(技术岗)的工作?希望可以收到写有具体,可靠,已经实践过了的路径的回答?
  • ¥15 Java+vue部署版本反编译
  • ¥100 对反编译和ai熟悉的开发者。
  • ¥15 带序列特征的多输出预测模型
  • ¥15 Python 如何安装 distutils模块
  • ¥15 关于#网络#的问题:网络是从楼上引一根网线下来,接了2台傻瓜交换机,也更换了ip还是不行
  • ¥15 资源泄露软件闪退怎么解决?