OpenEdv-开源电子网

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

请问怎样实现串口1接收,串口2发送呢?程序感觉也没有错误啊!求大神解答!!!

[复制链接]

12

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2016-11-7
在线时间
39 小时
发表于 2016-12-20 14:51:58 | 显示全部楼层 |阅读模式
1金钱

#include "stm32f10x.h"
#include "delay.h"

/************************************************
ALIENTEK 战舰STM32F103开发板实验0
工程模板
注意,这是手册中的新建工程章节使用的main文件
技术支持:www.openedv.com
淘宝店铺:http://eboard.taobao.com
关注微信公众平台微信号:"正点原子",免费获取STM32资料。
广州市星翼电子科技有限公司  
作者:正点原子 @ALIENTEK
************************************************/
void usart1_init(void)
{
GPIO_InitTypeDef GPIO_InitTypeStruct;
USART_InitTypeDef USART_InitTypeStruct;
NVIC_InitTypeDef NVIC_InitTypeStruct;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
        USART_DeInit(USART1);

GPIO_InitTypeStruct.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitTypeStruct.GPIO_Pin=GPIO_Pin_9;
GPIO_InitTypeStruct.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOA,&GPIO_InitTypeStruct);

GPIO_InitTypeStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_InitTypeStruct.GPIO_Pin=GPIO_Pin_10;
GPIO_InitTypeStruct.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOA,&GPIO_InitTypeStruct);

USART_InitTypeStruct.USART_BaudRate=9600;
USART_InitTypeStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitTypeStruct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_InitTypeStruct.USART_Parity=USART_Parity_No;
USART_InitTypeStruct.USART_StopBits=USART_StopBits_1;
USART_InitTypeStruct.USART_WordLength=USART_WordLength_8b;

USART_Init(USART1,&USART_InitTypeStruct);

USART_Cmd(USART1,ENABLE); //使能串口

USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);

NVIC_InitTypeStruct.NVIC_IRQChannel=USART1_IRQn;
NVIC_InitTypeStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitTypeStruct.NVIC_IRQChannelPreemptionPriority=1;
NVIC_InitTypeStruct.NVIC_IRQChannelSubPriority=1;
NVIC_Init(&NVIC_InitTypeStruct);

}
void USART1_IRQHandler(void)
{
u8 res;
if(USART_GetITStatus(USART1,USART_IT_RXNE))
{
  res=USART_ReceiveData(USART1);  //usart1接收
   USART_SendData(USART2,res);    //usart2发送
}

}
void uart2_init(u32 bound)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIOA时钟
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);//使能USART2
        USART_DeInit(USART2);
//USART2_TX   GPIOA.2
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.2
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.2

  //USART2_RX   GPIOA.3初始化
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA3
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.3  
  //USART 初始化设置
USART_InitStructure.USART_BaudRate = bound;//串口波特率
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
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); //初始化串口2
  //USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启串口接受中断
  USART_Cmd(USART2, ENABLE);                    //使能串口2

}

int main(void)
{
   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
   usart1_init();
   uart2_init(9600);
   while(1);
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2016-10-27
在线时间
48 小时
发表于 2016-12-20 15:04:39 | 显示全部楼层
你在这个区翻之前的帖子,好想有一个跟你很类似,我刚才看见的那个好像是2到3吧
回复

使用道具 举报

12

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2016-11-7
在线时间
39 小时
 楼主| 发表于 2016-12-20 15:10:17 | 显示全部楼层
摩天轮转了 发表于 2016-12-20 15:04
你在这个区翻之前的帖子,好想有一个跟你很类似,我刚才看见的那个好像是2到3吧

是的,不过那个我也用过,也不行的,所以想问问看究竟是哪里出错了
回复

使用道具 举报

35

主题

181

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1115
金钱
1115
注册时间
2016-8-1
在线时间
235 小时
发表于 2016-12-20 15:34:35 | 显示全部楼层
可以先单独测试串口1接收和串口2发送是否都没问题
回复

使用道具 举报

14

主题

44

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
386
金钱
386
注册时间
2016-9-5
在线时间
66 小时
发表于 2016-12-20 16:04:51 | 显示全部楼层
你不会是串口1和串口2的引脚连接接错了吧
回复

使用道具 举报

26

主题

280

帖子

1

精华

高级会员

Rank: 4

积分
908
金钱
908
注册时间
2013-8-2
在线时间
279 小时
发表于 2016-12-20 16:21:06 | 显示全部楼层
我个性签名档的博客地址,《STM32之串口》。
博客:http://blog.csdn.net/feilusia
CC2541群(127442605);CC2640群(557278427);
Android群(541462902);STM8/STM32群(164311667);
Linux群(512598061);职场交流群(450154342);
回复

使用道具 举报

50

主题

193

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-4-11
在线时间
141 小时
发表于 2016-12-20 16:37:09 | 显示全部楼层
中断1 函数 没有清除中断标志
USART_ClearITPendingBit
回复

使用道具 举报

12

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2016-11-7
在线时间
39 小时
 楼主| 发表于 2016-12-20 16:39:51 | 显示全部楼层
梨落繁华心 发表于 2016-12-20 16:04
你不会是串口1和串口2的引脚连接接错了吧

引脚是正确的
回复

使用道具 举报

12

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2016-11-7
在线时间
39 小时
 楼主| 发表于 2016-12-20 16:44:07 | 显示全部楼层
滴丶滴 发表于 2016-12-20 16:37
中断1 函数 没有清除中断标志
USART_ClearITPendingBit

不管用啊,试过了,还是不行
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2016-11-24
在线时间
4 小时
发表于 2016-12-22 10:10:26 | 显示全部楼层
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);  只是串口1的时钟使能了,串口2用APB1
回复

使用道具 举报

18

主题

75

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2016-12-24
在线时间
29 小时
发表于 2016-12-25 15:23:33 来自手机 | 显示全部楼层
我也是初学,但我想问下,波特率相同,usart1进入到中断后,usart2在中断之中发送会不会有点影响?
回复

使用道具 举报

18

主题

75

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2016-12-24
在线时间
29 小时
发表于 2016-12-25 15:25:51 来自手机 | 显示全部楼层
还有,usart2发送是不是还要有个等待发送完成啊,要不天知道发完没有
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 11:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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