打印

一个串口接收另一个串口发送数据程序哪里出错了

[复制链接]
4065|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jxmzzr|  楼主 | 2013-6-5 22:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的是stm32zet6 程序的目的是用串口2接收我的gps模块发送来的gps信息  ,然后利用串口1将信息发送出去,在电脑上用串口调试助手能够看到数据。


#include "stm32_eval.h"
#include "stm32f10x.h"
#include "platform_config.h"
#include<stdio.h>




GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;


void RCC_Configuration(void);


void Delay(vu32 nCount)
{
  for(; nCount != 0; nCount--);
}
int main(void)
{
  RCC_Configuration();
  USART_InitStructure.USART_BaudRate = 115200;               /*设置波特率为115200*/
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;/*设置数据位为8*/
  USART_InitStructure.USART_StopBits = USART_StopBits_1;     /*设置停止位为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;  /*发送和接收*/

  /*配置串口1 */
  USART_Init(USART1, &USART_InitStructure);
  /*配置串口2*/
  USART_Init(USART2, &USART_InitStructure);
  


  /* 使能串口1 */
  USART_Cmd(USART1, ENABLE);
  /* 使能串口2 */
  USART_Cmd(USART2, ENABLE);

  /* Wait until end of transmission from USART1 to USART2 */
  STM_EVAL_COMInit(COM1, &USART_InitStructure);



  while (1)
{
  if(USART_GetFlagStatus(USART2,USART_FLAG_RXNE)==SET)
  {
  USART_SendData(USART1,USART_ReceiveData(USART2));
  while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);
  Delay(0XFFFFF);
  }
}

}

/**
  * @brief  Configures the different system clocks.
  * @param  None
  * @retval None
  */
void RCC_Configuration(void)
{   
  /*使能串口1和串口2使用的GPIO时钟*/
  RCC_APB2PeriphClockCmd(USART1_GPIO_CLK |USART2_GPIO_CLK, ENABLE);
  /* Enable USART1 Clock */
  /*使能串口1时钟*/
  RCC_APB2PeriphClockCmd(USART1_CLK, ENABLE);
  /*使能串口2时钟*/
  RCC_APB1PeriphClockCmd(USART2_CLK, ENABLE);  

}
评分
参与人数 1威望 +1 收起 理由
woshiaokeman + 1 建议使用DMA,串口发送数据的时候是要等待.
沙发
jamsan| | 2013-6-6 09:44 | 只看该作者
  while (1)
{
  while(USART_GetFlagStatus(USART2,USART_FLAG_RXNE)==RESET);
  USART_SendData(USART1,USART_ReceiveData(USART2));
  while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
}

使用特权

评论回复
板凳
grasswolfs| | 2013-6-6 11:40 | 只看该作者
错误情况是电脑上收不到数据么?

使用特权

评论回复
地板
huangfeng33| | 2013-6-6 19:45 | 只看该作者
1.UART对应IO的属性没有进行配置
2.你期间的延时太长,有可能会漏掉数据,这样接收不完全。最好 还是采用中断方式接收,发送,可以查询可中断

使用特权

评论回复
5
jxmzzr|  楼主 | 2013-6-11 15:35 | 只看该作者
我做的这个是开发板的串口2不断接收GPS模块发送过来的数据,然后通过串口1发送到电脑     因为是不断接收 不断发送 采用中断的话不好实现吧  关键的是通过串口2接收到的数据储存在哪里呢   是自己定义一个数据缓存的数组吗  stm32有没有 类似数据缓冲寄存器的东西呢  谢谢各位朋友!!!   

使用特权

评论回复
6
trumpxp| | 2013-6-11 20:01 | 只看该作者
不是很了解  楼主  帮你顶一个  看看别人的意见

使用特权

评论回复
7
cym_anhui| | 2013-6-13 15:02 | 只看该作者
NVIC,IO,没有设置

使用特权

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

本版积分规则

460

主题

2188

帖子

12

粉丝