OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3549|回复: 1

STM32双串口收发

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2016-5-4
在线时间
2 小时
发表于 2016-5-4 14:47:30 | 显示全部楼层 |阅读模式
5金钱
新手求助,我想做串口1,2实时收发,就是串口1发送给串口2接收,同时串口2也能发送给串口1接收。可目前代码只能实现串口2发送给串口1,串口1发送给串口2就卡住了,请问到底是什么错误?谢谢[mw_shl_code=c,true]void Uart1_PutChar(u8 ch)
{
  USART_SendData(USART1, (u8) ch);
  while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}
  void Uart2_PutChar(u8 ch)
{
  USART_SendData(USART2, (u8) ch);
  while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
}
[/mw_shl_code]
[mw_shl_code=applescript,true]
void USART1_IRQHandler(void)            //ÔúÖD¶Ï·tÎñ3ìDòÖD£¬óéóúÖ÷»úÏìó|ÖD¶Ïê±2¢2»ÖaμàêÇÄĸöÖD¶ÏÔ′·¢3öÖD¶ÏÇëÇó£¬òò′˱ØDëÔúÖD¶Ï·tÎñ3ìDòÖD¶ÔÖD¶ÏÔ′½øDDÅD±e£¬è»oó·Ö±e½øDD′|àí¡£μ±è»£¬èç1ûֻ鿼°μ½ò»¸öÖD¶ÏÇëÇó£¬êÇ2»óÃ×öéÏêöÅD±eμÄ¡£μ«êÇÎTÂÛê2Ã′Çé¿ö£¬×öéÏêöÅD±eêǸöoÃϰ1ß
{
  if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)    //èô½óêÕêy¾Y¼Ä′æÆ÷Âú
  {  
               
    comm = USART_ReceiveData(USART1);   //′Ëóï¾ä×÷óão½«USART_DR¼Ä′æÆ÷μÄÄúèY′«μ½commàï¡£áíía,Ôúμ¥»o3åÆ÷Ä£ê½Ï£¬èí¼t¶áUSART_DR¼Ä′æÆ÷Ôòíê3é¶ÔRXNEλÇå3y¡£[×¢òa]Ôú¶à»o3åÆ÷Ä£ê½Ï£¬±ØDëí¨1yèí¼tÇåáã"′«êäíê3é±êÖ¾"DMA1_FLAG_TCx(¼′£oáîDMA_IFCRμÄλCTCIFx=1)£¬·ñÔò½«»áÎT·¨ìø3öÖD¶Ï·tÎñ3ìDò£¬3öÏÖò»′ÎÖD¶ÏÇëÇóÎTêy′ÎÏìó|μÄoó1û
    Uart2_PutChar(comm);

//    if(comm == 0x63)                    //éÏλ»ú×Ô¶ˉ2éÕò2é¼ˉÆ÷êÇ·ñÔúÏß
//        {                         
//          comm = 0;      
//      Uart1_PutChar(0x63);              //·¢ËíCPμÄASCIIÂë
//      Uart1_PutChar(0x70);                                                        
//        }                                            

  }
}
         
void USART2_IRQHandler(void)
{
        RX_status = USART_GetFlagStatus(USART2, USART_FLAG_RXNE);
                if(RX_status == SET)
                {   
                               
                                USART_ITConfig(USART2, USART_IT_RXNE, DISABLE); //1ØÖD¶Ï
//                                if(j==1){GPIO_ResetBits(GPIOD, GPIO_Pin_6); j=0;}
//                                else if(j==0){GPIO_SetBits(GPIOD, GPIO_Pin_6); j=1;}// D3áá
                               
                                temp = USART_ReceiveData(USART2);         //½óêÕêy¾Y»o3å                                       
                                 Uart1_PutChar(temp);
                            USART_ITConfig(USART2,USART_IT_RXNE, ENABLE);
                       
                 }                        
}         
   
int main(void)
{
       
//  SystemInit();        //μ÷óÃsystem_stm32f10x.c¿aoˉêyμÄÏμí3ê±ÖóÅäÖÃ
           Stm32_Clock_Init(9);  //Ïμí3ê±ÖóéèÖÃÎa9±¶Æμ£¬¼′Ïμí3ê±ÖóéèÖÃÎa72MHz
        delay_init(72);        //Ïμí3SysTick3õê¼»ˉ
        ALL_GPIO_Config();     //ÅäÖÃËùóDGPIO
        NVIC_Configuration();//ÖD¶ÏóÅÏè¼¶
        USART1_Config(); //′®¿ú1ÅäÖà 
        USART2_Config();//′®¿ú2ÅäÖÃ

//        USART_ITConfig(USART2, USART_IT_RXNE, DISABLE); //1ØÖD¶Ï
        Uart2_PutChar(comm);
        GPIO_SetBits(GPIOC, GPIO_Pin_6);// D1áá
           while(1)
        {
                            
        }

}[/mw_shl_code]

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2016-5-4
在线时间
2 小时
 楼主| 发表于 2016-5-4 14:47:31 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-9 15:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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