1. 程式人生 > >STM32 串列埠的基本配置(暫存器版)筆記

STM32 串列埠的基本配置(暫存器版)筆記

1.串列埠

1.串列埠作為MCU和外界的連線工具,既可以檢驗程式碼的正確性,也可以和上位機進行交流

2.在STM32F103RCT6中,最多支援5路串列埠,對於串列埠而言,一般使用序列通訊(USART1--5)

3.幾個比較重要的暫存器:

<1>:USART->SR(狀態暫存器)

 

<2>USART->DR(資料暫存器)


<3>USART->BRR(波特率暫存器)


具體配置過程

1.計算波特率(整數和小數部分)

2.初始化GPIO口

3.復位USART 配置波特率,配置奇偶校驗,停止位等

4.配置中斷(可編寫中斷服務函式)

程式碼實現:

//初始化IO 串列埠1
//pclk2:PCLK2時鐘頻率(Mhz)
//bound:波特率
//1.計算波特率(整數和小數)
//2.初始化引腳
//3.復位USART1
//4.設定奇偶校驗等
//5.設定中斷 
void uart_init(u32 pclk2,u32 bound)//USART1使用pclk2 USART2-5使用PCLK1
{  	 
	float temp;
	u16 mantissa;//整數
	u16 fraction;//小數
	temp=(float)(pclk2*1000000)/(bound*16);//temp(float)=32.0625 temp=32;
	mantissa=temp;//整數部分
	fraction=(temp-mantissa)*16;
	mantissa<<=4;
	mantissa=mantissa+fraction;//以hex的形式 USART->BRR
	
	//設定GPIO口
	RCC->APB2ENR|=1<<2;//設定串列埠時鐘
	RCC->APB2ENR|=1<<14;//設定串列埠時鐘
	GPIOA->CRH&=0XFFFFF00F;//PA9 PA10
	GPIOA->CRH|=0X000008B0;//1000 1010 RXD TXD
	//複用
	RCC->APB2RSTR|=1<<14;
	RCC->APB2RSTR&=~(1<<14);
	//設定波特率
	USART1->BRR=mantissa;
	USART1->CR1|=0X200C;//設定停止位和校驗位
	//中斷
	#if EN_USART_RX
	//使能接收中斷
	USART1->CR1|=1<<8;//接收使能
	USART1->CR1|=1<<5;//接收緩衝區非空中斷使能
	MY_NVIC_Init(3,3,USART1_IRQn,2);
	#endif
}