基于正点原子stm32mini板的串行通信原理
本篇文章將講述正點原子stm32mini板的串行通信原理,小白總結(jié),如有錯誤,請大神指教。
目錄
一、通信雙方的兩種通信方式
二、STM32的串口通信接口
三、硬件連接
四、STM32UART異步通信方式特點:
五、STM32串口異步通信需要定義的參數(shù):
六、STM32串口寄存器庫函數(shù)配置
一、通信雙方的兩種通信方式
(1)并行通信
傳輸原理:數(shù)據(jù)各個位同時傳輸
優(yōu)點:速度快
缺點:占用引腳資源多
(2)串行通信
傳輸原理:數(shù)據(jù)按位順序傳輸
優(yōu)點:占用引腳資源較少
缺點:速度相對較慢
(3)串行通信分類:
<1>單工通信:數(shù)據(jù)傳輸只支持數(shù)據(jù)在一個方向上傳輸。
<2>半雙工通信:允許數(shù)據(jù)在兩個方向上傳輸,但是,在某一時刻,只允許數(shù)據(jù)在一個方向上傳輸,它實際上是一種切換方向的單工通信。
<3>全雙工通信:允許數(shù)據(jù)同時在兩個方向上傳輸,因此,全雙工通信是兩個單工通信方式結(jié)合,它要求發(fā)送設(shè)備和接收設(shè)備都有獨立的接收和發(fā)送能力。
串行通信的三種傳送方式:
(4)串行通信的通信方式
<1>同步通信:帶時鐘同步信號傳輸——SPI,IIC通信接口
<2>異步通信:不帶時鐘同步信號——UART(通用異步收發(fā)器),單總線
二、STM32的串口通信接口
UART:通用異步收發(fā)器
USART:通用同異步收發(fā)器
三、硬件連接
?串口的連接要RX連接TX,TX連接RX。
四、STM32UART異步通信方式特點:
(1)全雙工異步通信。
(2)分數(shù)波特率發(fā)生器系統(tǒng),提供精準的波特率——發(fā)送和接受共用的可編程波特率,最高可達4.5Mbits/s。
(3)可編程的數(shù)據(jù)字長度(8位或者9位)。
(4)可配置的停止位(支持1或者2位停止位)。
(5)可配置的使用DMA多緩沖器通信。
(6)單獨的發(fā)送器和接收器使能位。
(7)檢測標志:①接收緩沖器②發(fā)送緩沖器空③傳輸結(jié)束標志
(8)多個帶標志的中斷源,觸發(fā)中斷。
(9)其他:校驗控制,四個錯誤檢測標志。
五、STM32串口異步通信需要定義的參數(shù):
①起始位②數(shù)據(jù)位(8位或9位)③奇偶校驗位(第9位)④停止位(1,15,2位)⑤波特率設(shè)置
六、STM32串口寄存器庫函數(shù)配置
(1)常用的串口相關(guān)寄存器:USART_SR狀態(tài)寄存器、USART_DR數(shù)據(jù)寄存器、USART_BRR波特率寄存器。
(2)波特率計算方法
?可以使用這個公式來計算波特率
(3)串口操作相關(guān)庫函數(shù)(省略入口參數(shù)):
void USART_Init();//串口初始化:波特率,數(shù)據(jù)字長,奇偶校驗,硬件流控以及收發(fā)使能 void USART_Cmd();//使能串口 void USART_ITConfig();//使能相關(guān)中斷 void USART_SendData();發(fā)送數(shù)據(jù)到串口,DR uint16_t USART_ReceiveData();//接收數(shù)據(jù),從DR讀取接收到的數(shù)據(jù) FlagStatus USART_GetFlagStatus();//獲取狀態(tài)標志位 void USART_ClearFlag();//清除狀態(tài)標志位 ITStatus USART_GetITStatus();//獲取中斷狀態(tài)標志位 void USART_ClearITPendingBit();//清除中斷狀態(tài)標志位(4)串口配置的一般步驟(一般這些函數(shù)工程模板里有,這塊寫出來只是熟悉一下函數(shù)的功能)
①串口時鐘使能,GPIO時鐘使能:RCC_APB2PeriphClockCmd();
②串口復位:USART_DeInit();//這一步不是必須的
③GPIO端口模式設(shè)置:GPIO_Init();模式設(shè)置為GPIO_Mode_AF_PP
④串口參數(shù)初始化:USART_Init();
⑤開啟中斷并且初始化NVIC(如果需要開啟中斷才需要這個步驟)
NVIC_Init();
USART_ITConfig();
⑥使能串口:USART_Cmd();
⑦編寫中斷處理函數(shù):USARTx_IRQHandle();
⑧串口傳輸狀態(tài)獲取:FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx,uint16_t USART_FLAG);
void USART_ClearITPendingBit(USART_TypeDef* USARTx,uint16_t USART_IT);
七、串口通信實驗代碼
main.c里
#include "sys.h" #include "usart.h" #include "delay.h" #include "led.h" #include "key.h" #include "stdio.h" //ALIENTEK Mini STM32?a·¢°?·?ày′ú??3 //′??úêμ?é //??ê??§3?£owww.openedv.com //1??YêDD?òíμ?×ó????óD?T1???int main(void) { u8 t;u8 len; u16 times=0; Stm32_Clock_Init(9); //?μí3ê±?óéè??delay_init(72); //?óê±3?ê??ˉ uart_init(72,9600); //′??ú3?ê??ˉ?a9600LED_Init(); //3?ê??ˉó?LEDá??óμ?ó2?t?ó?ú while(1){if(USART_RX_STA&0x8000){ len=USART_RX_STA&0x3fff;//μ?μ?′?′??óê?μ?μ?êy?Y3¤?èprintf("\r\n?ú·¢?íμ????¢?a:\r\n");for(t=0;t<len;t++){USART1->DR=USART_RX_BUF[t];while((USART1->SR&0X40)==0);//μè′y·¢?í?áê?}printf("\r\n\r\n");//2?è???DDUSART_RX_STA=0;}else{times++;if(times%5000==0){printf("\r\nALIENTEK MiniSTM32?a·¢°? ′??úêμ?é\r\n");printf("?yμ??-×ó@ALIENTEK\r\n\r\n\r\n");}if(times%200==0)printf("??ê?è?êy?Y,ò???3μ?ü?áê?\r\n"); if(times%30==0)LED0=!LED0;//éá??LED,ìáê??μí3?y?ú??DD.delay_ms(10); }} }然后剩下的就和模板一模一樣就好。
總結(jié)
以上是生活随笔為你收集整理的基于正点原子stm32mini板的串行通信原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 屏幕尺寸
- 下一篇: WinAPI——Windows 消息
