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

yinyinehnzuotong 2011-09-26 08:56:18
我用的是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);

}
...全文
3503 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
windyzyf 2013-01-16
  • 打赏
  • 举报
回复
需要对GPIO配置
jldream110 2011-10-10
  • 打赏
  • 举报
回复
if(USART_GetFlagStatus(USART2,USART_FLAG_RXNE)==SET)
{
USART_SendData(USART1,USART_ReceiveData(USART2));
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);
Delay(0XFFFFF);
}

这里用的对吗? 是不是忘记清楚标志位了
天冰天降 2011-10-10
  • 打赏
  • 举报
回复
定义一个缓冲区,两个指针,一个接收指针,一个发送指针,接收指针随接收数据下移,存储数据,退出接收中断,主程序中判断发送指针与接收指针不一致,就把当前发送指针指向的缓冲区数据发送,指针下移,一直到两个指针相等,最好就是缓冲区设置成256个,指针unsigned char 型,到256自动回0,还要注意你的程序会不会因缓冲区256个字节丢数据的问题,祝你好运
yinyinehnzuotong 2011-10-09
  • 打赏
  • 举报
回复
我做的这个是开发板的串口2不断接收GPS模块发送过来的数据,然后通过串口1发送到电脑 因为是不断接收 不断发送 采用中断的话不好实现吧 关键的是通过串口2接收到的数据储存在哪里呢 是自己定义一个数据缓存的数组吗 stm32有没有 类似数据缓冲寄存器的东西呢 谢谢各位高手!!!
dontium 2011-09-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 yinyinehnzuotong 的回复:]
……在电脑上用串口调试助手能够看到数据。





……
[/Quote]

既然能看到数据,那么程序既使错了,也是对的,
lbing7 2011-09-28
  • 打赏
  • 举报
回复
1.UART对应IO的属性没有进行配置
2.你期间的延时太长,有可能会漏掉数据,这样接收不完全。最好 还是采用中断方式接收,发送,可以查询可中断

说 明:本例程是基于STM32_V3.4固件函数库的uCOSII网络通讯实例,在MDK4.12中编译通过。(版本V1.0) 操作过程:1、打开APP文件夹的MDK工程文件,编译后下载到开发板; 2、打开“串口调试程序”,选择串口1,波特率9600,打开串口; 3、打开网络调试助手,设置主机IP地址为192.168.0.0~255网段,设置本地通信端口为1004,设置目标IP地址为192.168.0.100端口为2004: 4、在网络调试助手发送框输入"sky:c=1"点击发送,进行网络连接,连接成功调试助手会连续收到网络数据。 5、默认每秒发送一个数据包。网络调试助手发送框输入"sky:c=0"发送,暂停发送。网络调试助手发送框输入"sky:c=?"发送,恢复发送。 6、串口每秒发送一串字符,串口助手发送任意字符重新初始化网卡芯片。 7、可以使用ping 192.168.0.100进行验证IP应答,输入arp -a验证地址应答。 8、网卡芯片为enc28j60,使用中断方式接收,具体引脚定义请看程序。 9、接收任务挂起,接收中断函数中将接收任务恢复读取数据包。 本例程由微芯简易协议修改而来,添加了UDP主动发送函数,并在uCOSII系统下运行。 该版本更改了任务堆栈,添加了网卡芯片检测函数监控网卡状态如果出错则重新初始化网卡芯片,做了网卡芯片临界资源保护。该版本网络收发稳定性有了较大提高,并且对函数进行了封装,只需添加文件和路径即可移植。

6,127

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 硬件设计
社区管理员
  • 硬件设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧