OpenEdv-开源电子网

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

串口1改成串口2后不能通讯了

[复制链接]

40

主题

107

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
308
金钱
308
注册时间
2014-11-21
在线时间
22 小时
发表于 2015-12-12 11:50:02 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]void usart2_init(u32 bt) { float temp; u16 mantissa; u16 fraction; //GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA时钟 RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART1时钟 //串口1对应引脚复用映射 GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2); //GPIOA9复用为USART1 GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2); //GPIOA10复用为USART1 //USART1端口配置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3; //GPIOA9与GPIOA10 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉 GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA9,PA10 temp=(float)(84*1000000)/(bt*16); mantissa=temp; fraction=(temp-mantissa)*16; mantissa<<=4; mantissa+=fraction; RCC->APB1ENR|=1<<2; RCC->APB1ENR|=1<<14; RCC->APB1RSTR|=1<<14; RCC->APB1RSTR&=~(1<<14); USART2->BRR=mantissa; USART2->CR1|=0X240C; } void USART2_IRQHandler(void) { if(USART_GetITStatus(USART2,USART_IT_RXNE)==SET) { USART_ClearITPendingBit(USART2,USART_IT_RXNE); RX_Process_1(); } if(USART_GetFlagStatus(USART2,USART_FLAG_ORE)==SET) { USART_ClearFlag(USART2,USART_FLAG_ORE); USART_ReceiveData(USART2); } if(USART_GetITStatus(USART2, USART_IT_TXE)==SET) { USART_ClearITPendingBit(USART2,USART_IT_TXE); USART_ITConfig(USART2,USART_IT_TXE,DISABLE); } if(USART_GetITStatus(USART2, USART_IT_TC)==SET) { USART_ClearITPendingBit(USART2,USART_IT_TC); TX_Process_1(); } }[/mw_shl_code]
串口1改成串口2后不能通讯了,请问哪里改错了。

最佳答案

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

"RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART1时钟",问题应当在此。
打倒A莫,打倒小日本
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2013-5-3
在线时间
40 小时
发表于 2015-12-12 11:50:03 | 显示全部楼层
"RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART1时钟",问题应当在此。
恰如猛虎卧山丘,潜伏爪牙忍受!
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11552
金钱
11552
注册时间
2014-4-1
在线时间
1317 小时
发表于 2015-12-12 14:52:31 | 显示全部楼层
确定PA2、PA3具有USART2的功能吗?

确定1和2的时钟源频率一样吗?
回复

使用道具 举报

21

主题

299

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1836
金钱
1836
注册时间
2013-7-29
在线时间
278 小时
发表于 2015-12-12 17:08:43 | 显示全部楼层
波特率设置时需要变下,其它都一样。
回复

使用道具 举报

6

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-11-9
在线时间
13 小时
发表于 2016-4-12 22:15:17 | 显示全部楼层
串口2是不是还用了SD,SPI或者Flash这些功能?
回复

使用道具 举报

3

主题

794

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
1502
金钱
1502
注册时间
2015-3-3
在线时间
460 小时
发表于 2016-4-12 22:32:50 来自手机 | 显示全部楼层
串口2在APB1
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2016-4-22
在线时间
6 小时
发表于 2016-8-5 20:20:52 | 显示全部楼层
远方 发表于 2015-12-12 15:10
"RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART1时钟",问题应当在此。

正解,谢谢您。改成        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);        //使能USART2
就能用了。
回复

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2016-8-5 21:13:01 | 显示全部楼层
STM32串口复杂经常出现这个问题,习惯就好了
让我们的思维驾驭在电的速度之上!
回复

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4036
金钱
4036
注册时间
2015-11-14
在线时间
545 小时
发表于 2016-8-6 09:51:11 | 显示全部楼层
你的时钟没有设置对吧
回复

使用道具 举报

3

主题

126

帖子

0

精华

高级会员

Rank: 4

积分
776
金钱
776
注册时间
2015-2-28
在线时间
251 小时
发表于 2016-8-6 16:53:58 | 显示全部楼层
有时候时钟设置不正确  导致问题
回复

使用道具 举报

10

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
301
金钱
301
注册时间
2016-4-9
在线时间
98 小时
发表于 2016-8-15 17:33:03 | 显示全部楼层
这里的A2 a3可以换成a9 a10吗
回复

使用道具 举报

14

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2015-8-4
在线时间
39 小时
发表于 2016-8-29 21:55:04 | 显示全部楼层
xuande 发表于 2015-12-12 14:52
确定PA2、PA3具有USART2的功能吗?

确定1和2的时钟源频率一样吗?

两个串口挂载在不同的总线上,但两条总线的时钟频率不同,这是否会影响到波特率,如果受到了影响,又该如何修改?
回复

使用道具 举报

14

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2015-8-4
在线时间
39 小时
发表于 2016-8-29 21:57:23 | 显示全部楼层
布布 发表于 2016-8-5 20:20
正解,谢谢您。改成        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);        //使能USART2
就能用了。

能正确发送数据吗?
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11552
金钱
11552
注册时间
2014-4-1
在线时间
1317 小时
发表于 2016-8-29 22:06:57 | 显示全部楼层
hblgxy 发表于 2016-8-29 21:55
两个串口挂载在不同的总线上,但两条总线的时钟频率不同,这是否会影响到波特率,如果受到了影响,又该如 ...


肯定要影响。
要根据实际时钟频率和需要的波特率,重新计算。

回复

使用道具 举报

14

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2015-8-4
在线时间
39 小时
发表于 2016-8-29 22:13:00 | 显示全部楼层
xuande 发表于 2016-8-29 22:06
肯定要影响。
要根据实际时钟频率和需要的波特率,重新计算。

如何根据时钟频率计算波特率,串口初始化结构体控制波特率的成员的值又该如何填写
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11552
金钱
11552
注册时间
2014-4-1
在线时间
1317 小时
发表于 2016-8-29 22:18:31 | 显示全部楼层
hblgxy 发表于 2016-8-29 22:13
如何根据时钟频率计算波特率,串口初始化结构体控制波特率的成员的值又该如何填写


手册里面有计算公式。


回复

使用道具 举报

1

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
290
金钱
290
注册时间
2016-8-15
在线时间
20 小时
发表于 2016-8-30 08:25:07 | 显示全部楼层
看看答案
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2016-4-22
在线时间
6 小时
发表于 2016-9-8 15:32:57 | 显示全部楼层
hblgxy 发表于 2016-8-29 21:57
能正确发送数据吗?

可以了
回复

使用道具 举报

1

主题

14

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2017-7-6
在线时间
8 小时
发表于 2017-7-7 01:16:57 | 显示全部楼层
能否教教我,我也不会这个
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-17 16:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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