OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7107|回复: 7

将一个串口收到的数据通过另一个串口发出

[复制链接]

3

主题

6

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2017-5-30
在线时间
5 小时
发表于 2018-3-26 09:26:48 | 显示全部楼层 |阅读模式
10金钱
新人刚学这个。
想要将通过串口2收到的数据,同步通过串口1发出。
请问各位有类似的例程可以供参考吗。

最佳答案

查看完整内容[请看2#楼]

void UART2_Init(u32 bound) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; // 1、串口时钟使能 GPIO时钟使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); // 2、串口复位 USART_DeInit(USART2); // 3、GPIO端口设置 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2; / ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-3-26 09:26:49 | 显示全部楼层
void UART2_Init(u32 bound)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        // 1、串口时钟使能 GPIO时钟使能
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
        // 2、串口复位
        USART_DeInit(USART2);
        // 3、GPIO端口设置       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;        //PA2 TX
        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_3;        //PA3 RX
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //浮空输入
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
        // 4、串口参数初始化
        USART_InitStructure.USART_BaudRate=bound;
        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);
        // 5、初始化NVIC
        NVIC_InitStructure.NVIC_IRQChannel=USART2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        // 6、开启中断
        USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);
        // 7、使能串口
        USART_Cmd(USART2,ENABLE);

}

void USART2_IRQHandler(void)
{
        u8 res;
        if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET)
        {
                res=USART_ReceiveData(USART2);
                USART_SendData(USART2,res);                        //把接收到的数据发送出去
        }

}

最简单的串口2接收到的数据,在通过串口2发送出去,如果要通过串口1发就,就把中断中断发送函数串口2改成串口1就行。
回复

使用道具 举报

3

主题

6

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2017-5-30
在线时间
5 小时
 楼主| 发表于 2018-3-26 09:27:44 | 显示全部楼层
非常感谢了。资料里给的例程只有通过原串口发出,通过另一个串口怎么发出,我不是很理解。
回复

使用道具 举报

5

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2017-11-8
在线时间
33 小时
发表于 2018-3-26 09:30:13 | 显示全部楼层
如果数据不快,收到数据,进串口中断,给另一个串口放数,够简单吧。如果数据很快量很大,要考虑串口延时。
回复

使用道具 举报

160

主题

967

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2097
金钱
2097
注册时间
2014-3-7
在线时间
491 小时
发表于 2018-3-26 17:43:34 | 显示全部楼层
数据量小的话还可以这么搞,数据量大的话有什么方案呢?
回复

使用道具 举报

160

主题

967

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2097
金钱
2097
注册时间
2014-3-7
在线时间
491 小时
发表于 2018-3-26 17:43:49 | 显示全部楼层
HXYDJ 发表于 2018-3-26 09:26
void UART2_Init(u32 bound)
{
        GPIO_InitTypeDef GPIO_InitStructure;

数据量小的话还可以这么搞,数据量大的话有什么方案呢?
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-3-27 13:11:42 | 显示全部楼层
ssssssssssss 发表于 2018-3-26 17:43
数据量小的话还可以这么搞,数据量大的话有什么方案呢?

串口2接收的数据存储起来,然后设置接收完成标志位。主程序检测到接收完成标志后,通过串口1将接收的数据发送出去,然后将标志位复位。
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2019-11-24
在线时间
1 小时
发表于 2019-11-25 21:06:24 | 显示全部楼层
感谢楼主
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 05:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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