簡述:stm32晶元具有多個usart外設用於串列埠通訊,它是universal synchronousasynchronous receiver and transmitter的縮寫,即通用同步非同步收發器可以靈活地與外部裝置進行全雙工資料交換,還有種uart外設universal asynchronous
receiver and transmitter,沒有同步功能,只有非同步通訊; usart支援使用dma;
序列通訊的分類:
全雙工:同一時刻,兩個裝置可以同時收發資料(雙向車道)
半雙工:兩個裝置可以收發資料,但不能在同一時刻進行(比如一次只能過一輛車的雙向車道)
單工:單方向通訊,乙個為發,另個為收(單向車道)
資料同步方式分類:
同步資料
非同步資料:
區別:有沒有時鐘線; 有:同步; 無:非同步;
傳輸速率:
通訊效能的重要引數
位元率(bitrate),即每秒鐘傳輸的二進位制位數,單位:位元每秒(bit/s);
波特率(baudrate),表示 每秒鐘傳輸了多少個碼元; 碼元是通訊訊號調製的概念,通訊中常用時間間隔相同的符號來表示乙個二進位制數字,這樣的訊號稱為碼元;
注意:位元率=波特率 * 單個調製狀態對應的二進位制位數; 因為uart是按乙個個二進位制位傳送資料的,所以在此情況下:位元率=波特率;
切記:數值相同,意義不同;
字長:(最低有效位在前)
7位(個別usart支援7位模式)
8位9位
奇偶校驗位:
可配置的停止位
1個停止位(預設值)
2位停止位(正常usart模式、單線模式、數據機模式)
1.5個停止位(智慧卡模式)
0.5個停止位(智慧卡模式下接收資料時使用)
串列埠結構框圖:
軟體初始化流程:
功能初始化(波特率、字長、校驗、硬體流、模式)
重寫hal_uart_mspinit()函式,引腳初始化
開啟gpio、串列埠時鐘
選擇串列埠時鐘源;預設為pclk2(rcc 專用時鐘配置暫存器 (dckcfgr))
預設的pclk2時鐘源,頻率:108mhz;(串列埠1,不同串列埠最大時鐘頻率不同,如無特殊要求按預設時鐘源選擇即可)
sysclk時鐘源,頻率:216mhz;
例程:
功能初始化
u8 arxbuffer[rxbuffersize];//hal庫使用的串列埠接收緩衝
uart_handletypedef uart1_handler; //uart控制代碼
//初始化io 串列埠1
//bound:波特率
void uart_init(u32 bound)
引腳初始化
//uart底層初始化,時鐘使能,引腳配置,中斷配置
//此函式會被hal_uart_init()呼叫
//huart:串列埠控制代碼
void hal_uart_mspinit(uart_handletypedef *huart)
}
中斷服務函式
//串列埠1中斷服務程式
void usart1_irqhandler(void)
else //還沒收到0x0d
}}
} hal_uart_irqhandler(&uart1_handler);
}
總結 串列埠時鐘源的選擇
hal庫中斷程式較繁瑣
串列埠波特率不用計算,需要多少波特率直接寫多少;
STM32F103串列埠通訊
usart 通用同步非同步收發器 是乙個序列通訊裝置,可以靈活地與外部裝置進行全雙工資料交換。有別於 usart 還有乙個uart,它是在 usart 基礎上裁剪掉了同步通訊功能,只有非同步通訊。全雙工的,非同步通訊 分數波特率發生器系統 傳送和接收共用的可程式設計波特率,最高達4.5mbits s...
stm32f7網口 STM32F7串列埠通訊問題
stm32f7串列埠通訊問題 所屬分類 stm32f系列 瀏覽數 4572 提問者 dlx6969 問 stm32f767用到2個串列埠 串列埠1,230400,dma傳送,中斷接收 串列埠5,460800,dma傳送,中斷接收。初始化程式如下 初始化函式 void mx uart5 init vo...
stm32串列埠通訊
通訊方式 1 同步通訊 帶時鐘同步訊號傳輸 spi,iic等 2 非同步通訊 不帶時鐘用途訊號 usrt,單匯流排 stm32串列埠引腳表 串口號 rxd txd 1 pa10 pa9 2 pa3pa2 3 pb11 pb10 4 pc11 pc10 5 pd2pc12 通訊過程 接收過程 由rx入...