1. 程式人生 > >錯誤解決:串列埠1與串列埠3相同程式碼卻結果不同

錯誤解決:串列埠1與串列埠3相同程式碼卻結果不同

    在前幾天除錯openmv時發現同樣的程式碼串列埠1和串列埠3的結果卻是不一樣的,當時著實是把我坑了很久,怎麼都找不到原因,用示波器看波形也是沒有問題的,在Openedv網站上有位網友指出是我初始化程式碼的問題,在翻閱參考手冊後終於發現了問題。

    下列程式碼為我原本的初始化程式碼:

#include "sys.h"
#include "usart.h"
#include "led.h"
#include "usart3.h"


int theta_err,rho_err;
int main(void)
{ 
	Stm32_Clock_Init(9);            //=====系統時鐘設定
	delay_init(72);                 //=====延時初始化
	uart_init(72,115200);           //=====初始化串列埠1
	uart3_init(72,115200);           //=====初始化串列埠3
	LED_Init();
	while(1)
	{    
		LED=!LED;

		delay_ms(100);		
	} 
}

    問題出在哪裡呢,就是我對串列埠三的初始化。

    參考手冊中的匯流排結構如下:

    可以看出,串列埠1掛載在APB2匯流排上,而串列埠2、3(4、5)都掛載在APB1匯流排上,而時鐘樹告訴我們:

    APB2匯流排是全速的(最高72MHZ),而APB1匯流排最高只支援36MHZ,這就是我的錯誤所在,將串列埠3設定為36MHZ後果然正常了。