我有一台PIC32MX460F512L。我正在设置一个与raspberry Pi 3的UART通信。我还用mi PC Windows串行终端(Putty,Teraterm等)进行了一些测试。我有问题,因为树莓只发送和接收垃圾。然后我在Windows上用putty测试了它,我注意到了一些奇怪的事情。例如,板上的uart波特率设置为9600,而要在windows上发送和接收数据,我必须将putty的波特率设置为130 !!然后我看了看我的PCLK设置在pic上,似乎一切都是正确的,因为有一个8 8MHz的外部clk振荡器。我发布了下面的代码。
PIC代码:
#define GetSystemClock() (80000000ul) // Hz
#define GetInstructionClock() (GetSystemClock()/1)
#define GetPeripheralClock() (GetInstructionClock()/1) //
long Baud_Rate;
Baud_Rate = 9600;
TRISFbits.TRISF8 = 0; // Set UART1TX like output
TRISFbits.TRISF2 = 1; // Set UART1RX like input
U1MODE = 0x00008000;
U1STA = 0x00001400; // RXEN set, TXEN set
U1BRG = ((USART_Clock_Source)/(Baud_Rate/16))-1;可能是外部振荡器出现故障,或者波特率计算出现错误?我听不懂。
发布于 2020-12-02 20:05:06
下面是一个错误:
U1BRG = ((USART_Clock_Source)/(Baud_Rate/16))-1;它应该是:
U1BRG = ((USART_Clock_Source)/(Baud_Rate*16))-1;还有这个:
#define GetSystemClock() (80000000ul) // Hz应该是
#define GetSystemClock() (8000000ul) // Hz在此计算中,指令频率是8 MHz,而不是时钟频率。指令频率是时钟的一半。
https://stackoverflow.com/questions/65105927
复制相似问题