打印

STM32F103串口的收发问题?

[复制链接]
4584|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Bruce_Li|  楼主 | 2013-8-9 16:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近写了一个串口的程序,用的STM32F103的UART2和UART3,UART发送数据,UART3接收数据,具体的程序如下,但是现在UART2能正常发送数据但是UART3无法接收到程序,UART3的接收数据的寄存器都没有数据,但是我是讲UART2的发送口连接到UART3的接收口了的啊!求教???????

#include "stm32f10x.h"

uint8_t UART, i=0, nn;

void GPIO_Configuration(void);

int main(void)
{
        USART_InitTypeDef USART_InitStructure;
       
        SystemInit();
       
        GPIO_Configuration();
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 | RCC_APB1Periph_USART3, ENABLE);
       
        USART_InitStructure.USART_BaudRate = 9600;
        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_Init(USART3, &USART_InitStructure);
       
        USART_Cmd(USART2, ENABLE);

        USART_Cmd(USART3, ENABLE);

        USART_HalfDuplexCmd(USART2, ENABLE);

        USART_HalfDuplexCmd(USART3, ENABLE);
       
        USART_ClearFlag(USART2, USART_FLAG_TC);
        USART_ClearFlag(USART3, USART_FLAG_RXNE);      
       
        while (1)
        {
                i++;
                while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
                        USART_SendData(USART2, i);
               
                if (USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == SET)
                {
                        UART = USART_ReceiveData(USART3);
//                         UART++;
//                         while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
//                         USART_SendData(USART3, UART);
                }
               
//                 if (USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == SET)
//                 {
//                         nn = USART_ReceiveData(USART2);
//                 }
        }
}

void GPIO_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
       
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                 //上啦输入
        GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_2;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_3;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;                 //上啦输入
        GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_11;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
}



沙发
feilusia| | 2013-8-9 16:37 | 只看该作者
本帖最后由 feilusia 于 2013-8-9 16:39 编辑

1)少了中断函数USART_ITConfig
2)少了中断优先级函数
--------------------------------
我搞错了,原来你没用中断

使用特权

评论回复
板凳
feilusia| | 2013-8-9 16:56 | 只看该作者
你设置为半双工有啥用?去掉试试
      USART_HalfDuplexCmd(USART2, ENABLE);

        USART_HalfDuplexCmd(USART3, ENABLE);

使用特权

评论回复
地板
chuangpu| | 2013-8-9 20:31 | 只看该作者
不知道楼主的方法有没有效果   只能试一试了   楼主  

使用特权

评论回复
5
logokfu| | 2013-8-10 09:27 | 只看该作者
你是怎么知道没有收到呢

使用特权

评论回复
6
trumpxp| | 2013-8-10 10:04 | 只看该作者
发了某个字符  后面没有收到   应该是这样判断的

使用特权

评论回复
7
Bruce_Li|  楼主 | 2013-8-16 17:44 | 只看该作者
去掉半双工更加是完全没有效果,原来程序并没有什么问题,我原来是用的两个开发板一个写循环发送程序,另外一个在线调试看有没有接收到,开始是用开发板的RX接另一个的TX,完全没有效果,后来完全一样的程序将RX接另外一个的RX就能正常收发了,不知道是什么问题,理论上应该是RX接TX才对啊。有谁知道这是什么问题啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

21

帖子

1

粉丝