本章參考資料:《STM32F4xx 中文參考手冊》 USART 章節。
學習本章時,配合《STM32F4xx 中文參考手冊》 USART 章節一起閱讀,效果會更佳,特别是涉及到寄存器說明的部分。
特别說明, 本書内容是以 STM32F42xxx 系列控制器資源講解。
17.1 序列槽通訊協定簡介:
實體層: 規定通訊系統中具有機械、電子功能部分的特性,確定原始資料在實體媒體的傳輸。其實就是硬
件部分。
協定層: 協定層主要規定通訊邏輯,統一收發雙方的資料打包、解包标準。其實就是軟體部分。
1-RS232标準:
RS232标準序列槽通訊結構圖:
1、 RS232标準序列槽主要用于工業裝置直接通信
2、電平轉換晶片一般有MAX3232, SP3232
RS-232 與 TTL 電平差別
2-USB轉序列槽
USB轉序列槽通訊結構圖
1、 USB轉序列槽主要用于裝置跟電腦通信
2、電平轉換晶片一般有CH340、 PL2303、 CP2102、 FT232
3、使用的時候電腦端需要安裝電平轉換晶片的驅動
3-原生的序列槽到序列槽
1、原生的序列槽通信主要是控制器跟序列槽的裝置戒者傳感器通信,不需要經過電平轉換晶片來轉換電平,直接就用TTL電平通信
2、 GPS子產品、 GSM子產品、序列槽轉WIFI子產品、 HC04藍牙子產品
序列槽資料包的基本組成
起始位: 由1個邏輯 0 的資料位表示
結束位: 由 0.5、 1、 1.5 戒 2 個邏輯 1 的資料位表示
有效資料:在起始位後緊接着的就是有效資料,有效資料的長度常被約定為 5、 6、 7 戒 8 位長
校驗位: 可選,為的是資料的抗幹擾性。
校驗方法分為:
1-奇校驗(odd)、 2-偶校驗(even)
3-0 校驗(space)、 4-校驗(mark)
5-無校驗(noparity)
奇校驗(odd) : 有效資料和校驗位中“ 1”的個數為奇數
比如一個 8 位長的有效資料為: 01101001,此時總共有 4個“ 1” ,為達到奇校驗效果,校驗位為“ 1” , 最後傳輸的資料将是 8 位的有效資料加上 1 位的校驗位總共 9 位
偶校驗(even) : 有效資料和校驗位中“ 1”的個數為偶數
比如一個 8 位長的有效資料為: 01101001,此時總共有 4個“ 1” ,為達到偶校驗效果,校驗位為“ 0” , 最後傳輸的資料将是 8 位的有效資料加上 1 位的校驗位總共 9 位
0 校驗是不管有效資料中的内容是什麼,校驗位總為“ 0” 。
1 校驗是校驗位總為“ 1” 。
無校驗就是資料包中不包含校驗位
17.2 STM32序列槽功能框圖講解:
1-引腳 2-資料寄存器 3-控制器 4-波特率
STM32F4xx資料手冊—Pinouts and pin description。
ST每個系列的晶片都有一個資料手冊,裡面有引腳的詳細功能。
TX: 資料發送
RX: 是資料接收
SCLK: 時鐘,僅同步通信時使用
nRTS: 請求發送(Request To Send)
nCTS: 允許發送(Clear To Send)
資料寄存器—USART_DR: 9位有效,包含一個發送資料寄存器TDR和一個接收資料寄存器RDR。一個位址對應了兩個實體記憶體。
USART_CR1: M, 0: 8bit, 1: 9bit
USART_CR2: STOP
USART_CR1: PCE、 PS、 PEIE
USART_SR : PE
USART_SR: TXE, Transmit data register empty
USART_SR: TC, Transmission complete
USART_CR1: TXEIE
USART_CR1: TCIE
USART_SR: RXNE, Read data register not empty
USART_CR1: RXNEIE
USART_CR1: UE、 TE、 RE
波特率—每秒鐘要發送多少資料
USART_BRR:波特率寄存器
USART_CR1: OVER8
USARTDIV:無符号的定點數
FPCLK:序列槽的時鐘,注區分APB2和APB1兩條總線
OVER8:過采樣模式
例如:
USART: USART1,時鐘為90M
波特率: 115200
OVER8: 0, 16倍過才樣, BRR小數位有效
7.3 STM32序列槽初始化結構體講解:
USART初始化結構體
typedef struct
{
uint32_t USART_BaudRate; //波特率 BRR
uint16_t USART_WordLength; //字長 CR1_M
uint16_t USART_StopBits; //停止位 CR2_STOP
uint16_t USART_Parity; //校驗控制 CR1_PCE、 CR1_PS
uint16_t USART_Mode; //模式選擇CR1_TE、 CR1_RE
// 硬體流選擇 CR3_CTSE、 CR3_RTSE
uint16_t USART_HardwareFlowControl;
} USART_InitTypeDef;
同步時鐘初始化結構體
typedef struct
{
uint16_t USART_Clock; // 同步時鐘 CR2_CLKEN
uint16_t USART_CPOL; // 極性 CR2_CPOL
uint16_t USART_CPHA; // 相位 CR2_CPHA
uint16_t USART_LastBit; //最後一個位的時鐘脈沖 CR2_LBC
} USART_ClockInitTypeDef;
7.4 程式設計時需要用到的固件庫函數:
1-配置GPIO為具體的第二功能
void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF)
2-中斷配置函數
void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT,
FunctionalState NewState)
3-序列槽使能函數
void USART_Cmd(USART_TypeDef* USARTx,FunctionalState NewState)
4-資料發送函數
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
5-資料接收函數
uint16_t USART_ReceiveData(USART_TypeDef* USARTx)
6-中斷狀态位擷取函數
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)
7.5 代碼講解:
硬體設計-1: TTL電平轉USB電平(使用時電腦上記得安裝CH340驅動)