OpenEdv-开源电子网

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

求教,串口1.2通信问题

[复制链接]

13

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2016-10-2
在线时间
29 小时
发表于 2016-10-29 15:21:52 | 显示全部楼层 |阅读模式
15金钱
目标:串口1收到信息后通过串口2发出,[size=15.4545450210571px]串口2收到信息后通过串口1发出   现象:什么也收不到[size=15.4545450210571px]usart.c
#include "sys.h"
#include "usart.h"
#include "stm32f10x.h"
#if SYSTEM_SUPPORT_UCOS
#include "includes.h"                                        //ucos ê1óà         
#endif  
#if 1
#pragma import(__use_no_semihosting)            
//±ê×¼¿aDèòaμÄÖ§3Öoˉêy                 
struct __FILE
{
        int handle;

};

FILE __stdout;      

_sys_exit(int x)
{
        x = x;
}

int fputc(int ch, FILE *f)
{      
        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
    USART_SendData(USART1,(uint8_t)ch);   
        return ch;
}
#endif
#if EN_USART1_RX          
u8 USART_RX_BUF[USART_REC_LEN];   
u8 My1_USART_RX_BUF[USART_REC_LEN];
u16 USART_RX_STA=0;       //       
u16 My1_USART_RX_STA=0;
void uart_init(u32 bound){
    GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
         
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);       
        USART_DeInit(USART1);  
         //USART1_TX   PA.9
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;       
    GPIO_Init(GPIOA, &GPIO_InitStructure); //3õê¼»ˉPA9

    //USART1_RX          PA.10
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructure);  
        USART_InitStructure.USART_BaudRate = bound;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        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_ITConfig(USART1, USART_IT_RXNE, ENABLE);
    USART_Init(USART1, &USART_InitStructure);
  USART_Cmd(USART1, ENABLE);                  
   //Usart1 NVIC ÅäÖÃ
    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;               
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                       
        NVIC_Init(&NVIC_InitStructure);       
   }
u16 num=1;
void USART1_IRQHandler(void)              
        {
        u8 Res;
#ifdef OS_TICKS_PER_SEC                
        OSIntEnter();   
#endif
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  
                {
                Res =USART_ReceiveData(USART1);//(USART1->DR);       
               
                if((USART_RX_STA&0x8000)==0)//½óêÕÎ′íê3é
                        {
                        if(USART_RX_STA&0x4000)//½óêÕμ½áË0x0d
                                {
                                if(Res!=0x0a)USART_RX_STA=0;
                                else
                                {       
                                        USART_RX_STA|=0x8000;
                                        USART_RX_BUF[USART_RX_STA&0X3FFF]=0 ;

                                        for(num=0;num<(USART_RX_STA&0X3FFF);num++)
                                        {
                                                My1_USART_RX_BUF[num]=USART_RX_BUF[num];
                                        }
                                        My1_USART_RX_STA=USART_RX_STA;
                       
                                        USART_RX_STA=0;
                                }
                        }
                        else
                                {       
                                if(Res==0x0d)USART_RX_STA|=0x4000;
                                else
                                        {
                                        USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
                                        USART_RX_STA++;
                                        if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;
                                        }                 
                                }
                        }                    
     }
#ifdef OS_TICKS_PER_SEC         
        OSIntExit();                                                                                           
#endif
                num++;         
}
#endif       
------------------------------------------------------------------------------------------------------------------------------------------------
usart2.c
#include "sys.h"
#include "usart2.h"
#include "stm32f10x.h"

#if EN_USART2_RX   
       
u8 USART2_RX_BUF[USART2_REC_LEN];     
u8 My2_USART_RX_BUF[USART2_REC_LEN];
u16 USART2_RX_STA=0;       //&#189;óê&#213;×′ì&#172;±ê&#188;&#199;
u16 My2_USART_RX_STA=0;

void uart2_init(u32 bound){
  //GPIO&#182;&#203;&#191;úéè&#214;&#195;
  GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
         
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);        // GPIOAê±&#214;ó
          RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
//USART1_TX   GPIOA.9
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.9
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;       
  GPIO_Init(GPIOA, &GPIO_InitStructure);//3&#245;ê&#188;&#187;ˉGPIOA.9

  //USART1_RX          GPIOA.103&#245;ê&#188;&#187;ˉ
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA10
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;/
  GPIO_Init(GPIOA, &GPIO_InitStructure);//3&#245;ê&#188;&#187;ˉGPIOA.10  

  //Usart1 NVIC &#197;&#228;&#214;&#195;
  NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=4 ;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;               
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                       
        NVIC_Init(&NVIC_InitStructure);       

   //USART 3&#245;ê&#188;&#187;ˉéè&#214;&#195;

        USART_InitStructure.USART_BaudRate = bound;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;/
        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(USART2, &USART_InitStructure);
  USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
  USART_Cmd(USART2, ENABLE);                  

}

u16 nuum=1;//ó&#195;×÷&#209;-&#187;·±&#228;á&#191;
void USART2_IRQHandler(void)            
{
        u8 Res;
#if SYSTEM_SUPPORT_OS                
        OSIntEnter();   
#endif
        if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  
        {
                Res =USART_ReceiveData(USART2);       
                if((USART2_RX_STA&0x8000)==0)
                {
                        if(USART2_RX_STA&0x4000)
                {
                                if(Res!=0x0a)USART2_RX_STA=0;
                                else
                                {       
                                        USART2_RX_STA|=0x8000;       
                                        USART2_RX_BUF[USART2_RX_STA&0X3FFF]=0 ;

                                        for(nuum=0;nuum<(USART2_RX_STA&0X3FFF);nuum++)
                                        {
                                                My2_USART_RX_BUF[nuum]=USART2_RX_BUF[nuum];
                                        }
                                        My2_USART_RX_STA=USART2_RX_STA;
                               
                                }
                        }
                        else //&#187;1&#195;&#187;ê&#213;μ&#189;0X0D
                        {       
                                if(Res==0x0d)USART2_RX_STA|=0x4000;
                                else
                                {
                                        USART2_RX_BUF[USART2_RX_STA&0X3FFF]=Res ;
//                                        USART_SendData(USART1,Res);
                                        USART2_RX_STA++;
                                        if(USART2_RX_STA>(USART2_REC_LEN-1))USART2_RX_STA=0;
                                }                 
                        }
                }                    
    }
#if SYSTEM_SUPPORT_OS        
        OSIntExit();                                                                                           
#endif
        nuum++;       
}
#endif       
----------------------------------------------------------------------------------------------------

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "usart2.h"
#include "string.h"

u8 USART1_TX_BUF[USART2_REC_LEN];                                        
u8 USART2_TX_BUF[USART_REC_LEN];                                        
u8 upload=0;
int main(void)
{               
        u8 t;
        u8 len;       
  u8 len2;       
        delay_init();                     
        NVIC_Configuration();        
        uart_init(9600);         
       
  uart2_init(9600);
        //LED_Init();                            
        //KEY_Init();        
        while(1)
        {
                delay_ms(1);
                if(USART_RX_STA&0X8000)               
                {
                        len=USART_RX_STA&0X7FFF;       
                        for(t=0;t<len;t++)USART2_TX_BUF[t]=USART_RX_BUF[t];          
                        USART_RX_STA=0;                          
                        USART2_TX_BUF[t]=0;                       
                       
                        if(upload)printf("\r\n%s\r\n",USART2_TX_BUF);
                }
                        if(USART2_RX_STA&0X8000)               
                {
                        len2=USART2_RX_STA&0X7FFF;       
                        for(t=0;t<len2;t++)USART1_TX_BUF[t]=USART2_RX_BUF[t];          
                        USART2_RX_STA=0;                          
                        USART1_TX_BUF[t]=0;                       
                       
                        if(upload)printf("\r\n%s\r\n",USART1_TX_BUF);
                }
               
}

}





双1口.zip

2.15 MB, 下载次数: 32

最佳答案

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

自己解决了,有空给大家分享
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2016-10-2
在线时间
29 小时
 楼主| 发表于 2016-10-29 15:21:53 | 显示全部楼层
自己解决了,有空给大家分享
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2016-10-29 16:16:55 | 显示全部楼层
太乱太长,先分别调通再组合
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-24 16:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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