OpenEdv-开源电子网

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

使用5个串口,现在串口3与串口5收不到东西,1.2.4都正常

[复制链接]

4

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2017-9-4
在线时间
5 小时
发表于 2017-9-5 08:16:59 | 显示全部楼层 |阅读模式
1金钱
#if EN_USART3_RX   //èç1ûê1Äüá˽óêÕ
//′®¿ú1ÖD¶Ï·tÎñ3ìDò
//×¢òa,¶áè¡USARTx->SRÄü±üÃaÄaÃûÆäÃîμÄ′íÎó          
u8 USART_RX_BUF3[USART_REC_LEN];     //½óêÕ»o3å,×î′óUSART_REC_LEN¸ö×Ö½ú.

//½óêÕ×′ì¬
//bit15£¬        ½óêÕíê3é±êÖ¾
//bit14£¬        ½óêÕμ½0x0d
//bit13~0£¬        ½óêÕμ½μÄóDD§×Ö½úêyÄ¿
u16 USART_RX_STA3=0;       //½óêÕ×′쬱ê¼Ç          

void uart3_init(u32 bound){
  //GPIO¶Ë¿úéèÖÃ
  GPIO_InitTypeDef GPIO_InitStructure3;
        USART_InitTypeDef USART_InitStructure3;
        NVIC_InitTypeDef NVIC_InitStructure3;
         
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);        //ê1ÄüUSART3

        //////////////////////////////////////////////////////////////////////////////////////
        //USART3_TX   GPIOB.10
  GPIO_InitStructure3.GPIO_Pin = GPIO_Pin_10; //PB.10
  GPIO_InitStructure3.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure3.GPIO_Mode = GPIO_Mode_AF_PP;        //¸′óÃíÆíìêä3ö
  GPIO_Init(GPIOB, &GPIO_InitStructure3);//3õê¼»ˉGPIOB.10

  //USART3_RX          GPIOB.11 3õê¼»ˉ
  GPIO_InitStructure3.GPIO_Pin = GPIO_Pin_11;//PB.11
  GPIO_InitStructure3.GPIO_Mode = GPIO_Mode_IN_FLOATING;//¸¡¿Õêäèë
  GPIO_Init(GPIOB, &GPIO_InitStructure3);//3õê¼»ˉGPIOB.11  

  //Usart2 NVIC ÅäÖÃ
  NVIC_InitStructure3.NVIC_IRQChannel = USART3_IRQn;
        NVIC_InitStructure3.NVIC_IRQChannelPreemptionPriority=0 ;//ÇàÕ¼óÅÏè¼¶0
        NVIC_InitStructure3.NVIC_IRQChannelSubPriority = 3;                //×óóÅÏè¼¶3
        NVIC_InitStructure3.NVIC_IRQChannelCmd = ENABLE;                        //IRQí¨μàê1Äü
        NVIC_Init(&NVIC_InitStructure3);        //¸ù¾YÖ¸¶¨μÄ2Îêy3õê¼»ˉVIC¼Ä′æÆ÷
       
           //USART 3õê¼»ˉéèÖÃ
        USART_InitStructure3.USART_BaudRate = bound;//′®¿ú2¨ìØÂê
        USART_InitStructure3.USART_WordLength = USART_WordLength_8b;//×Ö3¤Îa8λêy¾Y¸ñê½
        USART_InitStructure3.USART_StopBits = USART_StopBits_1;//ò»¸öí£Ö1λ
        USART_InitStructure3.USART_Parity = USART_Parity_No;//ÎTÆæÅ¼D£Ñéλ
        USART_InitStructure3.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎTó2¼têy¾Yá÷¿ØÖÆ
        USART_InitStructure3.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //êÕ·¢Ä£ê½

  USART_Init(USART3, &USART_InitStructure3); //3õê¼»ˉ′®¿ú3
  USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//¿aÆô′®¿ú½óêüÖD¶Ï
  USART_Cmd(USART3, ENABLE);                    //ê1Äü′®¿ú3

}

void USART3_IRQHandler(void)                        //′®¿ú3ÖD¶Ï·tÎñ3ìDò
        {
        u8 Res3;
#if SYSTEM_SUPPORT_OS                 //èç1ûSYSTEM_SUPPORT_OSÎaÕæ£¬ÔòDèòaÖ§3ÖOS.
        OSIntEnter();   
#endif
        if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)  //½óêÕÖD¶Ï(½óêÕμ½μÄêy¾Y±ØDëêÇ0x0d 0x0a½áÎ2)
                {
                Res3 =USART_ReceiveData(USART3);        //¶á衽óêÕμ½μÄêy¾Y
               
                if((USART_RX_STA3&0x8000)==0)//½óêÕÎ′íê3é
                        {
                        if(USART_RX_STA3&0x4000)//½óêÕμ½áË0x0d
                                {
                                if(Res3!=0x0a)USART_RX_STA3=0;//½óêÕ′íÎó,ÖØD¿aê¼
                                else USART_RX_STA3|=0x8000;        //½óêÕíê3éáË
                                }
                        else //»1ûêÕμ½0X0D
                                {       
                                if(Res3==0x0d)USART_RX_STA3|=0x4000;
                                else
                                        {
                                        USART_RX_BUF3[USART_RX_STA3&0X3FFF]=Res3 ;
                                        USART_RX_STA3++;
                                        if(USART_RX_STA3>(USART_REC_LEN-1))USART_RX_STA3=0;//½óêÕêy¾Y′íÎó,ÖØD¿aê¼½óêÕ          
                                        }                 
                                }
                        }                    
     }

#if SYSTEM_SUPPORT_OS         //èç1ûSYSTEM_SUPPORT_OSÎaÕæ£¬ÔòDèòaÖ§3ÖOS.
        OSIntExit();                                                                                           
#endif
}
#endif       


#if EN_USART5_RX   
u8 USART_RX_BUF5[USART_REC_LEN];   
u16 USART_RX_STA5=0;     

void uart5_init(u32 bound){
  GPIO_InitTypeDef GPIO_InitStructure5;
        USART_InitTypeDef USART_InitStructure5;
        NVIC_InitTypeDef NVIC_InitStructure5;       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5,ENABLE);
        //////////////////////////////////////////////////////////////////////////////////////
        //USART5_TX   GPIOC.12
  GPIO_InitStructure5.GPIO_Pin = GPIO_Pin_12; //PC.12
  GPIO_InitStructure5.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure5.GPIO_Mode = GPIO_Mode_AF_PP;        //¸′óÃíÆíìêä3ö
  GPIO_Init(GPIOC, &GPIO_InitStructure5);//3õê¼»ˉGPIOC.12

  //USART5_RX          GPIOD.2 3õê¼»ˉ
  GPIO_InitStructure5.GPIO_Pin = GPIO_Pin_2;//PC.11
  GPIO_InitStructure5.GPIO_Mode = GPIO_Mode_IN_FLOATING;//¸¡¿Õêäèë
  GPIO_Init(GPIOD, &GPIO_InitStructure5);//3õê¼»ˉGPIOB.11  

  //Usart5 NVIC ÅäÖÃ
  NVIC_InitStructure5.NVIC_IRQChannel = UART5_IRQn;
        NVIC_InitStructure5.NVIC_IRQChannelPreemptionPriority=0 ;//ÇàÕ¼óÅÏè¼¶3
        NVIC_InitStructure5.NVIC_IRQChannelSubPriority = 5;                //×óóÅÏè¼¶3
        NVIC_InitStructure5.NVIC_IRQChannelCmd = ENABLE;                        //IRQí¨μàê1Äü
        NVIC_Init(&NVIC_InitStructure5);        //¸ù¾YÖ¸¶¨μÄ2Îêy3õê¼»ˉVIC¼Ä′æÆ÷
       
           //USART 3õê¼»ˉéèÖÃ
        USART_InitStructure5.USART_BaudRate = bound;//′®¿ú2¨ìØÂê
        USART_InitStructure5.USART_WordLength = USART_WordLength_8b;//×Ö3¤Îa8λêy¾Y¸ñê½
        USART_InitStructure5.USART_StopBits = USART_StopBits_1;//ò»¸öí£Ö1λ
        USART_InitStructure5.USART_Parity = USART_Parity_No;//ÎTÆæÅ¼D£Ñéλ
        USART_InitStructure5.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎTó2¼têy¾Yá÷¿ØÖÆ
        USART_InitStructure5.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //êÕ·¢Ä£ê½

  USART_Init(UART5, &USART_InitStructure5); //3õê¼»ˉ′®¿ú5
  USART_ITConfig(UART5, USART_IT_RXNE, ENABLE);//¿aÆô′®¿ú½óêüÖD¶Ï
  USART_Cmd(UART5, ENABLE);                    //ê1Äü′®¿ú5

}

void UART5_IRQHandler(void)                        //′®¿ú5ÖD¶Ï·tÎñ3ìDò
        {
        u8 Res5;
#if SYSTEM_SUPPORT_OS                 //èç1ûSYSTEM_SUPPORT_OSÎaÕæ£¬ÔòDèòaÖ§3ÖOS.
        OSIntEnter();   
#endif
        if(USART_GetITStatus(UART5, USART_IT_RXNE) != RESET)  //½óêÕÖD¶Ï(½óêÕμ½μÄêy¾Y±ØDëêÇ0x0d 0x0a½áÎ2)
                {
                Res5 =USART_ReceiveData(UART5);        //¶á衽óêÕμ½μÄêy¾Y
               
                if((USART_RX_STA5&0x8000)==0)//½óêÕÎ′íê3é
                        {
                        if(USART_RX_STA5&0x4000)//½óêÕμ½áË0x0d
                                {
                                if(Res5!=0x0a)USART_RX_STA5=0;//½óêÕ′íÎó,ÖØD¿aê¼
                                else USART_RX_STA5|=0x8000;        //½óêÕíê3éáË
                                }
                        else
                                {       
                                if(Res5==0x0d)USART_RX_STA5|=0x4000;
                                else
                                        {
                                        USART_RX_BUF5[USART_RX_STA5&0X3FFF]=Res5 ;
                                        USART_RX_STA5++;
                                        if(USART_RX_STA5>(USART_REC_LEN-1))USART_RX_STA5=0;//½óêÕêy¾Y′íÎó,ÖØD¿aê¼½óêÕ          
                                        }                 
                                }
                        }                    
     }

#if SYSTEM_SUPPORT_OS         //èç1ûSYSTEM_SUPPORT_OSÎaÕæ£¬ÔòDèòaÖ§3ÖOS.
        OSIntExit();                                                                                           
#endif
}
#endif       

最佳答案

查看完整内容[请看2#楼]

这里配置没看出问题,你看看IO时钟开没,这里只看到开串口的时钟
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

266

帖子

0

精华

高级会员

Rank: 4

积分
693
金钱
693
注册时间
2017-7-27
在线时间
98 小时
发表于 2017-9-5 08:17:00 | 显示全部楼层
这里配置没看出问题,你看看IO时钟开没,这里只看到开串口的时钟
回复

使用道具 举报

4

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2017-9-4
在线时间
5 小时
 楼主| 发表于 2017-9-5 10:22:28 | 显示全部楼层
没有开设IO时钟
回复

使用道具 举报

5

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
307
金钱
307
注册时间
2016-10-20
在线时间
64 小时
发表于 2017-9-5 14:11:51 | 显示全部楼层
确实是没开时钟把时钟打开
回复

使用道具 举报

4

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2017-9-4
在线时间
5 小时
 楼主| 发表于 2017-9-8 18:08:54 | 显示全部楼层
谢谢各位,我的问题解决了,一是打开IO时钟,二是把LCD显示屏去掉,因为LCD显示屏与串口的脚位有冲突
回复

使用道具 举报

6

主题

34

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2017-9-28
在线时间
73 小时
发表于 2017-9-30 15:36:52 | 显示全部楼层
大兄弟,可不可以把这个程序发出来分享一下,最近也在弄多串口的问题
回复

使用道具 举报

4

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2017-9-4
在线时间
5 小时
 楼主| 发表于 2017-9-30 16:51:47 | 显示全部楼层
我上面的配置很全了,4个串口都有
回复

使用道具 举报

6

主题

34

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2017-9-28
在线时间
73 小时
发表于 2017-10-12 18:43:20 | 显示全部楼层
山雀 发表于 2017-9-30 16:51
我上面的配置很全了,4个串口都有

if(USART2_RX_BUF[0] == 0XFF && USART2_RX_BUF[1]==0X81 && i == USART2_RX_BUF[4])这段代码什么意思
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 17:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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