OpenEdv-开源电子网

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

送给新手,串口实验扩展,把串口1改为串口2的修改方法(寄存器版,型号STM32F103RBT6)

[复制链接]

4

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2015-7-25
在线时间
1 小时
发表于 2015-8-1 15:19:12 | 显示全部楼层 |阅读模式
我刚从一个软件小菜鸟转到嵌入式,在这方面是新手,在做串口实验的扩展时(把串口1改为串口2)遇到了几个小波折,下面发个帖子总结一下。
1. 首先需要对硬件进行一点修改,需要将串口2和电脑USB串口连接,通过查看手册以及CPU引脚图,我们能查到串口2的输出输入口分别对应PA2和PA3这两个引脚,因此我们需要使用杜邦线把RXD和PA2、TXD和PA3分别连接起来。

2. 这一步我们需要修改波特率。在查看《STM32不完全手册V2.3》时我们找到如下一句话“PCLK1用于USART2、3、4、5,PCKL2用于USART1”,通过查看《STM32中文参考手册》我们会找到如下这一句话“只有USART1使用PCLK2(最高72MHz)。其它USART使用PCLK1(最高36MHz)”。在串口1的实验中我们配置波特率的代码如下:
uart_init(72,9600);
因此在串口2的实验中,我们需要改为:
uart_init(36,9600);

3. 接下来需要修改时钟、相关寄存器以及修改串口名字等。这一步仍然需要查看《STM32中文参考手册》,从中找到串口2的时钟使能位以及复位。接下来就是细心活了,需要在代码中把和串口1中相关的名字改为串口2。重要的函数如下:

void uart_init(u32 pclk2,u32 bound)
{    
float temp;
u16 mantissa;
u16 fraction;   
temp=(float)(pclk2*1000000)/(bound*16);//????USARTDIV
mantissa=temp; //??????????·?
fraction=(temp-mantissa)*16; //??????????·?  
    mantissa<<=4;
mantissa+=fraction; 
RCC->APB2ENR|=1<<2;   //????PORTA???±??  
RCC->APB1ENR|=1<<17;  //?????®???±?? 
GPIOA->CRL&=0XFFFF00FF; 
GPIOA->CRL|=0X00008B00;//IO×????è??
 
RCC->APB2RSTR|=1<<17;   //?????®??2
RCC->APB2RSTR&=~(1<<17);//????????     
//?¨?????è??
  USART2->BRR=mantissa; // ?¨?????è??  
USART2->CR1|=0X200C;  //1??????,?????é??.
#ifdef EN_USART2_RX  //??????????????
//????????????
USART2->CR1|=1<<8;    //PE????????
USART2->CR1|=1<<5;    //??????????·???????????    
MY_NVIC_Init(3,3,USART2_IRQChannel,2);//×é2??×????????? 
#endif
}

以上。

参考:
1.《STM32不完全手册V2.3》
2.《STM32中文参考手册》 
3.《MiniSTM32_V2.0_SCH》
4.  http://www.openedv.com/posts/list/27701.htm

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

使用道具 举报

14

主题

1592

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2622
金钱
2622
注册时间
2014-7-17
在线时间
350 小时
发表于 2015-8-1 16:22:46 | 显示全部楼层
回复 支持 反对

使用道具 举报

39

主题

598

帖子

0

精华

高级会员

Rank: 4

积分
875
金钱
875
注册时间
2013-12-18
在线时间
41 小时
发表于 2015-8-1 17:26:38 | 显示全部楼层
赞,谢谢分享
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-1 18:51:04 | 显示全部楼层
谢谢分享。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2015-5-25
在线时间
0 小时
发表于 2015-8-1 19:19:43 | 显示全部楼层
谢!~分享~~~
回复 支持 反对

使用道具 举报

20

主题

120

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2015-6-4
在线时间
5 小时
发表于 2015-8-3 16:08:51 | 显示全部楼层
CR2寄存器不用配置吗?刚开始接触寄存器,希望楼主耐心解答一下!CR2寄存器里面不是应该设置1个停止位吗?
回复 支持 反对

使用道具 举报

4

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2015-7-25
在线时间
1 小时
 楼主| 发表于 2015-8-6 18:52:56 | 显示全部楼层
回复【6楼】张晓斌:
---------------------------------
你好我也是新手,我的理解是: CR2寄存器里的停止位在这个实验里没有用到,所以不需要配置。需要配置的情况我还没有接触到。
回复 支持 反对

使用道具 举报

11

主题

193

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
425
金钱
425
注册时间
2013-3-19
在线时间
20 小时
发表于 2015-8-8 10:33:43 | 显示全部楼层
顶贴是一种美德
回复 支持 反对

使用道具 举报

20

主题

120

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2015-6-4
在线时间
5 小时
发表于 2015-8-13 18:56:52 | 显示全部楼层
回复【7楼】LuckyMan:
---------------------------------
哦哦,谢谢啦!
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2015-9-17
在线时间
0 小时
发表于 2015-9-17 10:44:59 | 显示全部楼层
非常感谢!楼主
回复 支持 反对

使用道具 举报

4

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2015-7-25
在线时间
1 小时
 楼主| 发表于 2015-9-18 21:04:27 | 显示全部楼层
回复【10楼】hechengzhu04:
---------------------------------
客气了~
回复 支持 反对

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2015-7-18
在线时间
15 小时
发表于 2015-9-23 17:28:21 | 显示全部楼层
楼主你好,我用的是mini开发板STM32F103RC,烧录程序用的是STLINK将电脑与开发板连接起来的。串口实验时候已经将RXD和PA2、TXD和PA3分别用杜邦线连接起来了,但是使用串口调试助手的时候没有输出,不知道是出什么原因,楼主求解!
学到老,活到老
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-9-29
在线时间
0 小时
发表于 2015-9-29 20:05:03 | 显示全部楼层
楼主怼地很好!3Q!
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2015-10-15
在线时间
0 小时
发表于 2015-10-15 20:53:31 | 显示全部楼层
看一下----学一点----顶一次
了解、学习
回复 支持 反对

使用道具 举报

0

主题

284

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
916
金钱
916
注册时间
2015-12-25
在线时间
277 小时
发表于 2015-12-25 17:33:46 | 显示全部楼层
谢谢分享,看下,学习学习
回复 支持 反对

使用道具 举报

4

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2018-7-21
在线时间
15 小时
发表于 2018-7-27 19:14:20 | 显示全部楼层
感谢分享,谢谢楼主,你真是个好人,我顺便练练盲打,楼主应该不会怪我吧,我发现我写代码的速度太慢了其实我是真的想谢谢喽主————平时我就应该多练练吗
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-7-15
在线时间
7 小时
发表于 2018-8-2 14:44:03 | 显示全部楼层
懂了。。。。
回复 支持 反对

使用道具 举报

10

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
362
金钱
362
注册时间
2018-5-14
在线时间
46 小时
发表于 2018-10-10 20:32:27 | 显示全部楼层
好贴帮顶
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2019-8-6
在线时间
3 小时
发表于 2019-8-16 15:58:51 | 显示全部楼层
谢谢分享!!
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
377
金钱
377
注册时间
2014-9-1
在线时间
95 小时
发表于 2020-12-2 22:59:43 | 显示全部楼层
你好,偶然间看到你的帖子,发现你有个地方写错了
RCC->APB2RSTR|=1<<17;   //?????&#174;??2
RCC->APB2RSTR&=~(1<<17);//????????     
这里应该是
RCC->APB1RSTR|=1<<17;
RCC->APB1RSTR&=~(1<<17);
如果我没记错的话,串口1和其他串口分开的
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 06:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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