一不小心串口接到
USART1
上了
.
因为在调程序时才发现错了
,
没得办法
,
只能通过端
口重映射来解决
.
但是以前没用过端口重映射
,
只闻其名
,
未用其身
,
所以
..
呵呵
...
只能从头去
看了
.
STM32
上有很多
I/O
口,
也有很多的内置外设想
I2C,ADC,ISP,USART
等,
为了节省
引出管脚,这些内置外设基本上是与
I/O
口共用管脚的,也就是
I/O
管脚的复用功能。但是
STM32
还有一特别之处就是:很多复用内置的外设的
I/O
引脚可以通过重映射功能,从不
同的
I/O
管脚引出,即复用功能的引脚是可通过程序改变的
.
读到这里相信大家都应该了解
了端口重映射的一些概念了
.
原理上的东西不细说了
,
大家可以看手册或者网上查
,
这方面的
资料还是很多的
.
下面说说我的调试经历
.
不知道是什么原因
PCB
制图时把串口接到
USART1
上了
,
当时也没在意
,
等我把
USART
测试程序写好烧进去硬件仿真时
,
串口给的是乱码
,
我当时就觉得奇怪
.
把程序检查了
好几遍就是查不出问题来
,
以为是硬件有问题
,
但突然想到了
STM
有复用功能
,
心想会不会是
这里有鬼
?
于是找来
datasheet
一看
,
真相大白
三个红框交汇处
.STM32F103VCT6
这个
CPU
的
USART1
接的是
PB6/PB7
但是上电初始
化后默认功能并非是
USART1.
所以想要用串口功能
.
必须用端口重映射
..
大家知道
,STM32
的单片机每个功能模块有自己的时钟系统
,
所以要想要调用
STM32
单片
机的功能模块时
必须先配置对应时钟
,
然后才能去操作相应的功能模块
.
端口重映射也一样
.