OpenEdv-开源电子网

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

usart3复用功能

[复制链接]

23

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
金钱
244
注册时间
2011-12-29
在线时间
1 小时
发表于 2012-2-17 16:06:05 | 显示全部楼层 |阅读模式
stm32 usart3复用后能正常使用 再复用回来后就不能发送数据了
求原子哥帮忙
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-2-17 16:16:47 | 显示全部楼层
回复 支持 反对

使用道具 举报

23

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
金钱
244
注册时间
2011-12-29
在线时间
1 小时
 楼主| 发表于 2012-2-17 16:33:42 | 显示全部楼层
出问题了  我只是把usrat3复用到PC10 C11 
               再复用回PB10 B11 就不能发送数据了
void Serial_Init3(void)
{
  //GPIO_InitTypeDef GPIO_InitStructure;
  USART_InitTypeDef USART_InitStructure;
 
  RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART3, ENABLE);
  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO , ENABLE);  
  /* Configure USART3 Tx (PB.10) as alternate function push-pull */
  GPIO_PinRemapConfig(GPIO_PartialRemap_USART3, ENABLE);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  /* Configure USART3 Rx (PB.11) as input floating */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOB, &GPIO_InitStructure);


   

/* USART3 configuration ------------------------------------------------------*/
  // USART3 configured as follow:

  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 USART3 */
  USART_Init(USART3, &USART_InitStructure);

  /* Enable the USART Transmoit interrupt: this interrupt is generated when the 
     USART1 transmit data register is empty */  
  //USART_ITConfig(USART1, USART_IT_TXE, ENABLE);

  /* Enable the USART Receive interrupt: this interrupt is generated when the 
     USART1 receive data register is not empty */
  USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);

  /* Enable USART3 */
  USART_Cmd(USART3, ENABLE);
  
}
void Serial_Init4(void)
{
  //GPIO_InitTypeDef GPIO_InitStructure;
  USART_InitTypeDef USART_InitStructure;
 
  RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART3, ENABLE);
  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO , ENABLE);
  /* Configure USART4 Tx (PC.10) as alternate function push-pull */
  GPIO_PinRemapConfig(GPIO_PartialRemap_USART3, ENABLE);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

  /* Configure USART4 Rx (PC.11) as input floating */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOC, &GPIO_InitStructure);


   

/* USART4 configuration ------------------------------------------------------*/
  // USART3 configured as follow:

  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 USART4 */
  USART_Init(USART3, &USART_InitStructure);

  /* Enable the USART Transmoit interrupt: this interrupt is generated when the 
     USART1 transmit data register is empty */  
  //USART_ITConfig(USART1, USART_IT_TXE, ENABLE);

  /* Enable the USART Receive interrupt: this interrupt is generated when the 
     USART1 receive data register is not empty */
  USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);

  /* Enable USART4 */
  USART_Cmd(USART3, ENABLE);
  
}
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-2-17 17:43:56 | 显示全部楼层
你在一个程序里面,同时使用两个地方输出一个串口啊?
重新初始化试试吧!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

23

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
金钱
244
注册时间
2011-12-29
在线时间
1 小时
 楼主| 发表于 2012-2-20 10:56:27 | 显示全部楼层
回复【4楼】正点原子:

---------------------------------
恩  USRAT3 在一个地方接收数据 在另一个地方发送数据 
怎么配置才能分别实现呢 
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-2-20 12:00:59 | 显示全部楼层
回复【5楼】asdbhk:
---------------------------------
真诡异....
这样很耽搁时间吧?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

23

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
金钱
244
注册时间
2011-12-29
在线时间
1 小时
 楼主| 发表于 2012-2-20 12:43:15 | 显示全部楼层
回复【6楼】正点原子:

---------------------------------
恩 关键是改不了 只能用那四个脚 还有只能有那个串口
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-2-20 14:01:01 | 显示全部楼层
改应该是可以的.
每次改变,你整个串口复位,然后重新配置.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

23

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
金钱
244
注册时间
2011-12-29
在线时间
1 小时
 楼主| 发表于 2012-2-27 10:56:47 | 显示全部楼层
回复【8楼】正点原子:

---------------------------------
怎么才算是复位呢  我把使能 时钟 中断都关了重开算是么
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-2-27 11:04:04 | 显示全部楼层
回复【9楼】asdbhk:
---------------------------------
有专门的串口复位啊.看寄存器描述.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

23

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
金钱
244
注册时间
2011-12-29
在线时间
1 小时
 楼主| 发表于 2012-2-27 16:41:28 | 显示全部楼层
RCC->APB1RSTR|=1<<17; //复位串口3
RCC->APB1RSTR&=~(1<<17);//停止复位

是这样位操作么
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-2-27 18:00:20 | 显示全部楼层
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2013-4-7
在线时间
9 小时
发表于 2013-4-30 11:23:20 | 显示全部楼层
void Serial_Init3(void) 函数中
语句 GPIO_PinRemapConfig(GPIO_PartialRemap_USART3, ENABLE);应该 删除

USART3_REMAP[1:0]:USART3 的重映像 (USART3 remapping)  位5:4 
这些位可由软件置’1’ 或置’0’ ,控制USART3 的CTS、RTS、CK、TX和RX复用功能在GPIO端
口的映像。 
00:  没有重映像(TX/PB10 ,RX/PB11,CK/PB12,CTS/PB13 ,RTS/PB14); 
01:  部分映像(TX/PC10 ,RX/PC11,CK/PC12,CTS/PB13 ,RTS/PB14); 
10:  未用组合; 
11:  完全映像(TX/PD8 ,RX/PD9,CK/PD10,CTS/PD11 ,RTS/PD12)。
回复 支持 反对

使用道具 举报

23

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
金钱
244
注册时间
2011-12-29
在线时间
1 小时
 楼主| 发表于 2013-5-2 10:32:12 | 显示全部楼层
回复【13楼】zbc:
---------------------------------
呵呵 谢啦 这个是一年前用过的了 已经完成了
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2013-5-12
在线时间
0 小时
发表于 2013-6-8 14:25:13 | 显示全部楼层
回复【13楼】zbc:
---------------------------------
不是很明白你是什么意思?现在我要用串口3的完全映射,怎么写程序啊?我写的是GPIO_PinRemapConfig(GPIO_Remap_USART3,ENABLE);报错为USART3.c(35): error:  #20: identifier "GPIO_Remap_USART3" is undefined
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2013-4-7
在线时间
9 小时
发表于 2013-6-8 16:47:00 | 显示全部楼层
回复【15楼】dagong184:
---------------------------------
首先查看你串口3用的哪几个引脚,然后确认是否需要映射。
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2013-4-7
在线时间
9 小时
发表于 2013-6-8 16:50:03 | 显示全部楼层
回复【16楼】zbc:
---------------------------------
GPIO_PartialRemap_USART3     /*!< USART3 artial Alternate Function mapping */串口3的部分映射
GPIO_FullRemap_USART3       /*!< USART3 Full Alternate Function mapping */串口3的完全映射
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2013-5-12
在线时间
0 小时
发表于 2013-6-8 16:51:38 | 显示全部楼层
谢谢!问题解决了,我还想问你另一个问题,您能不能帮我解答一下啊?我现在用的串口2,上电一次只能进入一次接收中断,再想进入就要重新上电,请问这种情况一般是什么问题啊?
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2013-5-12
在线时间
0 小时
发表于 2013-6-8 16:52:33 | 显示全部楼层
回复【16楼】zbc:
---------------------------------
谢谢!问题解决了,我还想问你另一个问题,您能不能帮我解答一下啊?我现在用的串口2,上电一次只能进入一次接收中断,再想进入就要重新上电,请问这种情况一般是什么问题啊?
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2013-4-7
在线时间
9 小时
发表于 2013-6-8 16:54:18 | 显示全部楼层
回复【18楼】dagong184:
---------------------------------
可能进中断没清标志位
回复 支持 反对

使用道具 举报

12

主题

126

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
281
金钱
281
注册时间
2013-1-5
在线时间
22 小时
发表于 2014-2-17 12:55:04 | 显示全部楼层
我是因为串口3有两种重映射进来的,顶一个
天道酬勤
回复 支持 反对

使用道具 举报

23

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
金钱
244
注册时间
2011-12-29
在线时间
1 小时
 楼主| 发表于 2014-8-12 21:56:24 | 显示全部楼层
回复【21楼】落月枫情:
---------------------------------
谢谢 哈哈  闲置好久的帖子了 怎么能结贴呢
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-3 19:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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