野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20991|回复: 10

stm32串口2的通信问题

[复制链接]
发表于 2014-2-21 19:30:04 | 显示全部楼层 |阅读模式
用相同的代码,为什么串口1可以收发数据,而串口2只能发送数据不能接收数据?
        while(1)
        {
        i=500;
        if(USART_GetFlagStatus(USART2, USART_IT_RXNE) != RESET)
        {     
              USART_SendData(USART2,USART_ReceiveData(USART2));
                while(i--);
        }
        }

回复

使用道具 举报

发表于 2014-2-21 21:04:16 | 显示全部楼层
把你配置的代码帖出来吧。肯定是配置没配置完全
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-23 17:27:40 | 显示全部楼层
随风 发表于 2014-2-21 21:04
把你配置的代码帖出来吧。肯定是配置没配置完全

void USART_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
//        NVIC_Configuration();

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_2;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10|GPIO_Pin_3;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA,&GPIO_InitStructure);

        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;
          /* Configure the USART1 */
          USART_Init(USART1, &USART_InitStructure);
  /* INIT  USART1 */
         USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
  /* Enable the USART1 */
         USART_Cmd(USART1, 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;
         /* Configure the USART2 */
          USART_Init(USART2, &USART_InitStructure);
  /* INIT  USART2 */
        USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
  /* Enable the USART2 */
        USART_ITConfig(USART2, USART_IT_TXE, ENABLE);
          USART_ClearFlag(USART2,USART_FLAG_TC);
          USART_Cmd(USART2, ENABLE);
}
void NVIC_Configuration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//设置优先级分组形式1,即抢占级占一位,优先级占3位
       
        /****************UART2全局中断使能***********************/
        NVIC_InitStructure.NVIC_IRQChannel=USART2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);

}
int main(void)
{
        vu16 i=500;
//        gpio_initi();
        NVIC_Configuration();
        USART_Config();
/*        start_gsm();
        Delay(20000000);
        USART_printf(USART2,"AT\r\n");
        Delay(2000000);
        USART_printf(USART2,"AT+CGPSPWR=1\r\n");
        Delay(200000);
        USART_printf(USART2,"AT+CGPSRST=1\r\n");
        Delay(200000);
        USART_printf(USART2,"AT+CGPSIPR=9600\r\n");*/
        while(1)
        {
        i=500;
        if(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) != RESET)
        {     
              USART_SendData(USART2,USART_ReceiveData(USART2));
                while(i--);
        }
        }       
}
回复 支持 反对

使用道具 举报

发表于 2014-2-23 18:08:52 | 显示全部楼层
chun 发表于 2014-2-23 17:27
void USART_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;

你配置串口2是接收中断呀,应该在串口中断服务函数里处理数据
回复 支持 反对

使用道具 举报

发表于 2014-2-23 18:13:29 | 显示全部楼层
楼主参考一下我们野火V3板子的程序,这个程序直接下载到ISO板子也是可以使用的
4-野火M3-USART2(polling).rar (1.08 MB, 下载次数: 259)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-24 11:25:42 | 显示全部楼层
随风 发表于 2014-2-23 18:08
你配置串口2是接收中断呀,应该在串口中断服务函数里处理数据

那为什么串口1是这样写也能接收和发送数据,这又是为什么?
回复 支持 反对

使用道具 举报

发表于 2014-2-24 11:48:48 | 显示全部楼层
chun 发表于 2014-2-24 11:25
那为什么串口1是这样写也能接收和发送数据,这又是为什么?

串口1应该是在stm32f10x_it.c文件里边有进行处理的,你看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-24 13:05:26 | 显示全部楼层
随风 发表于 2014-2-24 11:48
串口1应该是在stm32f10x_it.c文件里边有进行处理的,你看看

里面的函数都是空的耶
回复 支持 反对

使用道具 举报

发表于 2014-2-24 13:06:42 | 显示全部楼层
chun 发表于 2014-2-24 13:05
里面的函数都是空的耶

那你试试5楼的程序吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-24 13:10:24 | 显示全部楼层
随风 发表于 2014-2-24 13:06
那你试试5楼的程序吧

那个程序只有发送的   没有接收数据那部分   但我是接收数据那部分出现问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-24 22:31:30 | 显示全部楼层
chun 发表于 2014-2-24 13:10
那个程序只有发送的   没有接收数据那部分   但我是接收数据那部分出现问题

初步认定为硬件问题,我试了试串口3,结果收发都没问题,谢谢你的帮助强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-6-7 22:42 , Processed in 0.031386 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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