笔者由于项目的需求,做起了stm与PC的串口通信工作。由于是新手,一路上磕磕绊绊,踩了不少坑,这儿做下记录(ennn~,几天不写博客,感觉自己懒了),大家可以参考~
一):分频系数要写正确
下面是初始化函数:
void Init_UART1(void)
{
UART1_CR1=0x00;
UART1_CR3=0x00;
UART1_BRR2=0x00;//2M的计算方式,2000 000/9600=00D0h,BRR2为高四,低四
UART1_BRR1=0x0D;//BRR1为中间的八位
UART1_CR2=0x08;
}
其中一定要根据自己系统时钟频率来计算相应的分频系数 。以stm8s103f3p6为例,内部有16MHz的高速振荡器,启动后系统用的是它的八分频作为系统时钟源,要想得到9600kbs的波特率,则用两者相除即可。需要注意的UART1_BRR2为高四,低四位,UART1_BRR2为中间的八位。如果写的不正确,则很有可能出现乱码。
二):头文件stdio.h一定要包含
尽管编译的时候,没有包含stdio.h是能通过的,但是却不能够正确输出。笔者起初没有包含,结果愣是奇怪,费了近一天工夫,一步步地调试,还是不行,一脸懵逼,怀疑人生,结果对比别人的工程,然后就#include一下,发现奇迹般地好了。。心里默念三遍:头文件stdio.h一定要包含!头文件stdio.h一定要包含!