AnswerRaul 发表于 2015-3-23 13:19:10

求帮忙分析问题可能出现在哪里?

我使用的是STM32F427VG,现在做的部分是PC机通过串口配置3个传感器。
大致流程是这样的,PC机与板子通过UART4通信,然后将收到的数据转发给指定串口,取配置传感器。使用了UART4,USART1,USART3,USART6。UART4能够正常的向每个串口发送数据,但是USART3和USART6没有收到反馈,USART1能收到反馈。
单步调试,得到发现反馈数据进入了USART_SendData函数,但是数据没有输出来。
简化,只进行UART4与USART3之间相互透传,UART4收到数据可以通过USART3传出,而USART3收到的数据透传进入USART_SendData,但是收不到数据。USART6与USART3之间透传没问题,USART1与UART4之间透传没问题。
找到的可能线索,USART3与USART6在同一个max3223上,UART4与USART1在同一个max3223上。

串口配置代码:
void UART_Configuration(void)
{
        USART_InitTypeDef USART_InitStructure;

/* USART resources configuration (Clock, GPIO pins and USART registers) ----*/
/* USART configured as follow:
      - BaudRate = 115200 baud
      - Word Length = 8 Bits
      - One Stop Bit
      - No parity
      - Hardware flow control disabled (RTS and CTS signals)
      - Receive and transmit enabled
*/
       
        /*USART1 Configure*/
        USART_DeInit(USART1);
USART_InitStructure.USART_BaudRate = 115200;
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_Tx | USART_Mode_Rx;

/* USART configuration */
USART_Init(USART1, &USART_InitStructure);
        USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);

/* Enable the USART1 */
USART_Cmd(USART1, ENABLE);
       
       
        /*USART3 Configure*/
        USART_DeInit(USART3);
USART_InitStructure.USART_BaudRate = 115200;
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_Tx | USART_Mode_Rx;

/* USART configuration */
USART_Init(USART3, &USART_InitStructure);
        USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);

/* Enable the USART3 */
USART_Cmd(USART3, ENABLE);
       
        /*USART6 Configure*/
        USART_DeInit(USART6);
USART_InitStructure.USART_BaudRate = 115200;
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_Tx | USART_Mode_Rx;

/* USART configuration */
USART_Init(USART6, &USART_InitStructure);
        USART_ITConfig(USART6,USART_IT_RXNE,ENABLE);

/* Enable the USART6 */
USART_Cmd(USART6, ENABLE);
       
        /*UART4 Configure*/
        USART_DeInit(UART4);
USART_InitStructure.USART_BaudRate = 115200;
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_Tx | USART_Mode_Rx;
       
        /* UART configuration */
        USART_Init(UART4,&USART_InitStructure);
        USART_ITConfig(UART4,USART_IT_RXNE,ENABLE);
       
/* Enable the UART4 */
        USART_Cmd(UART4, ENABLE);
       
        /*UART7 Configure*/
        USART_DeInit(UART7);
USART_InitStructure.USART_BaudRate = 115200;
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_Tx | USART_Mode_Rx;
       
        /* UART configuration */
        USART_Init(UART7,&USART_InitStructure);
        USART_ITConfig(UART7,USART_IT_RXNE,ENABLE);
       
        /* Enable the UART7 */
        USART_Cmd(UART7, ENABLE);
}

中断处理代码(设置标志位,然后再在while循环里处理)

void USART1_IRQHandler(void)                //´®¿ÚÖжϴ¦Àíº¯Êý
{
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
        {
                Buf1 = USART_ReceiveData(USART1);

                USART_ClearITPendingBit(USART1, USART_IT_RXNE);       
                Flag=1;
        }
}

void USART3_IRQHandler(void)
{
        Buf3 = USART_ReceiveData(USART3);
       
        USART_ClearITPendingBit(USART3, USART_IT_RXNE);
        Flag=1;
}

void UART4_IRQHandler(void)
{
        Buf4 = USART_ReceiveData(UART4);
       
        USART_ClearITPendingBit(UART4, USART_IT_RXNE);
Flag=1;
}

void USART6_IRQHandler(void)
{
        Buf6= USART_ReceiveData(USART6);
       
        USART_ClearITPendingBit(USART6, USART_IT_RXNE);
        Flag=1;
}


飞翔的起点 发表于 2015-3-23 13:42:48

你是想将PC发给USART1的数据转发到其它的USART?1,你直接在USART1的接收中断里,将接收到的字符直接发送到对应的串口就是了。

发表于 2015-3-23 14:20:12

测试一下波形,看看是否能够输出数据。

AnswerRaul 发表于 2015-3-23 15:14:28

飞翔的起点 发表于 2015-3-23 13:42
你是想将PC发给USART1的数据转发到其它的USART?1,你直接在USART1的接收中断里,将接收到的字符直接发送到对 ...

我开始就是这么做的,可是能发不过去,我才试这种的

AnswerRaul 发表于 2015-3-23 15:15:28

安 发表于 2015-3-23 14:20
测试一下波形,看看是否能够输出数据。

找到原因的,是max3223芯片的forceon脚的问题。

stary666 发表于 2015-3-23 15:37:46

支持一下!

earnest 发表于 2015-3-23 16:05:45

stm32F103的飘过!

左岸右岸 发表于 2015-3-23 18:36:46

没用过F4:lol

小蚂蚁快溜跑 发表于 2015-3-23 20:39:40

跟着学习。。。。:D

zfz0122 发表于 2015-3-24 00:07:59

跟着学习
页: [1] 2
查看完整版本: 求帮忙分析问题可能出现在哪里?