历史上的今天
今天是:2025年05月20日(星期二)
2019年05月20日 | 串口调试助手出现乱码
2019-05-20 来源:eefocus
首先用一个正确的程序试一下确保软件本身没有什么问题,
然后再依次检查波特率和VPB时钟频率是否匹配,因为它们不匹配的时候同样会出现乱码。
如果最后还是乱码的话,可能就是程序的问题了,需要检查程序是否有语法以外的错误。
自己今天下午调了一个串口发送字符串的程序,就是因为没有把波特率和VPB时钟频率匹配好,导致一直出现乱码
当 UART_BPS 设为9600,Fpclk 为(Fosc/4)*1时是正确的组合,
错误一:UART_BPS 设为9600,Fpclk为 (Fosc/4)*2,出现了乱码,
错误二:UART_BPS 设为115200,Fpclk 为(Fosc/4)*1,出现了乱码
错误三:UART_BPS 设为115200,Fpclk 为(Fosc/4)*2,出现了乱码
程序如下所示:
方法一:
#include void UART1_Init(void); void UART1_SendStr(char *Str); void UART1_SendByte(char byte); void delayn(unsigned long n); #define UART_BPS 9600 //设置串口通信波特率 #define Fosc 12000000 //晶振频率 #define Fpclk (Fosc/4)*1 //VPB时钟频率,MD此处公式写错了,导致字符串显示不出 //UART1串口初始化 void UART1_Init(void) { //unsigned char Fdiv; U1FCR=1; //FIFO使能 U1LCR=0x83; //使能访问除数锁存,8位字符长度,1个停止位,禁止奇偶产生和校验, //Fdiv=(Fpclk/16)/UART_BPS; //设置波特率 U1DLL=Fpclk/(16*9600); //除数的底8位 U1DLM=(Fpclk/(16*9600))>>8; //除数的高8位 U1LCR=0x03; //禁止访问除数锁存器 } //发送字符串 void UART1_SendStr(char *Str) { while((*Str)!='




