參考原子的程式(基本照抄o(╯□╰)o)
串列埠設定的一般步驟可以總結為如下幾個步驟:
1) 串列埠時鐘使能, gpio 時鐘使能
2) 串列埠復位
3) gpio 埠模式設定
4) 串列埠引數初始化
5) 開啟中斷並且初始化 nvic(如果需要開啟中斷才需要這個步驟)
6) 使能串列埠
7) 編寫中斷處理函式
時鐘設定,埠模式等、設定初始化的部分按說明書抓藥就行~
有兩個暫存器要了解:
①串列埠資料暫存器: usart_dr ,這是個雙暫存器,分接收和傳送。這個暫存器只有低9位有效。
向串列埠暫存器寫入資料函式:void usart_senddata(usart_typedef* usartx, uint16_t data);
讀取串列埠暫存器接收資料函式:uint16_t usart_receivedata(usart_typedef* usartx);
②串列埠狀態暫存器 usart_sr
這裡我們關注一下兩個位,第 5、 6 位 rxne 和 tc。rxne(讀資料暫存器非空),當該位被置 1 的時候,就是提示已經有資料被接收到了,並
且可以讀出來了。這時候我們要做的就是盡快去讀取 usart_dr,通過讀 usart_dr 可以將
該位清零,也可以向該位寫 0,直接清除。
tc(傳送完成),當該位被置位的時候,表示 usart_dr 內的資料已經被傳送完成了。如
果設定了這個位的中斷,則會產生中斷。該位也有兩種清零方式: 1)讀 usart_sr,寫
usart_dr。 2)直接向該位寫 0。
要判斷讀暫存器是否非空(rxne), 操
作庫函式的方法是:
usart_getflagstatus(usart1, usart_flag_rxne);
我們要判斷傳送是否完成(tc),操作庫函式的方法是:
usart_getflagstatus(usart1, usart_flag_tc);
void usart1_irqhandler(void) //串列埠1中斷服務程式
if((usart_rx_sta&0x4000)!=0)//接收到一次0x0d
}} }
**分析:
u16的變數 usart_rx_sta ,這是個「復用」的變數。
※第15位–可以將usart_rx_sta&0x8000整體為乙個變數,為1表明接收完成,語句usart_rx_sta|=0x8000就是給其賦值1
※第14位-- usart_rx_sta&0x4000是另乙個變數 ,當接收到0x0d時,給其賦值1;下次進串列埠中斷時,就判斷接收到的是否是0x0a;0x0d 0x0a連起來,表示按鍵的回車,即串列埠助手中的傳送新行。
※第0~13位,用來計數接收個數,2^14,最大可接收4096個。
注意:usart_rx_sta&0x8000無法直接判斷其是否為1.因為它在第15位,只能判斷==0或!=0
//注意是哪個串列埠使用printf,在下面修改就行
file __stdout;
//定義_sys_exit()以避免使用半主機模式
void _sys_exit(int x)
//重定義fputc函式
int fputc(int ch, file *f)
//迴圈傳送,直到傳送完畢
usart1->dr = (u8) ch;
return ch;
}#endif
串列埠中斷分組在主函式裡
int main(void)
printf("\r\n\r\n");//插入換行
usart_rx_sta=0;
}else
if(times%200==0)printf("請輸入資料,以回車鍵結束\n");
if(times%30==0)led0=!led0;//閃爍led,提示系統正在執行.
delay_ms(10);
} }
}
stm32串列埠通訊
通訊方式 1 同步通訊 帶時鐘同步訊號傳輸 spi,iic等 2 非同步通訊 不帶時鐘用途訊號 usrt,單匯流排 stm32串列埠引腳表 串口號 rxd txd 1 pa10 pa9 2 pa3pa2 3 pb11 pb10 4 pc11 pc10 5 pd2pc12 通訊過程 接收過程 由rx入...
STM32串列埠通訊
1.常用的串列埠相關暫存器 1 usart sr狀態暫存器,對應的庫函式 flagstatus usart getflagstatus usart typedef usartx,uint16 t usart flag 2 usart dr資料暫存器,對應的庫函式 void usart senddat...
STM32串列埠通訊
串列埠作為mcu最重要的外部介面,同時也是軟體開發重要的除錯手段,其重要性不言而喻。在這裡我們主要從庫函式的角度來講述如何設定串列埠,來達到最基本的通訊功能。串列埠的設定一般可以歸結為以下幾個步驟 1 串列埠時鐘使能,gpio時鐘使能。2 設定引腳復用器對映,呼叫gpio pinafconfig函式...