日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于正点原子stm32mini板的串行通信原理

發布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于正点原子stm32mini板的串行通信原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本篇文章將講述正點原子stm32mini板的串行通信原理,小白總結,如有錯誤,請大神指教。

目錄

一、通信雙方的兩種通信方式

二、STM32的串口通信接口

三、硬件連接

四、STM32UART異步通信方式特點:

五、STM32串口異步通信需要定義的參數:

六、STM32串口寄存器庫函數配置


一、通信雙方的兩種通信方式

(1)并行通信

傳輸原理:數據各個位同時傳輸

優點:速度快

缺點:占用引腳資源多

(2)串行通信

傳輸原理:數據按位順序傳輸

優點:占用引腳資源較少

缺點:速度相對較慢

(3)串行通信分類:

<1>單工通信:數據傳輸只支持數據在一個方向上傳輸。

<2>半雙工通信:允許數據在兩個方向上傳輸,但是,在某一時刻,只允許數據在一個方向上傳輸,它實際上是一種切換方向的單工通信。

<3>全雙工通信:允許數據同時在兩個方向上傳輸,因此,全雙工通信是兩個單工通信方式結合,它要求發送設備和接收設備都有獨立的接收和發送能力。

串行通信的三種傳送方式:

(4)串行通信的通信方式

<1>同步通信:帶時鐘同步信號傳輸——SPI,IIC通信接口

<2>異步通信:不帶時鐘同步信號——UART(通用異步收發器),單總線

二、STM32的串口通信接口

UART:通用異步收發器

USART:通用同異步收發器

三、硬件連接

?串口的連接要RX連接TX,TX連接RX。

四、STM32UART異步通信方式特點:

(1)全雙工異步通信。

(2)分數波特率發生器系統,提供精準的波特率——發送和接受共用的可編程波特率,最高可達4.5Mbits/s。

(3)可編程的數據字長度(8位或者9位)。

(4)可配置的停止位(支持1或者2位停止位)。

(5)可配置的使用DMA多緩沖器通信。

(6)單獨的發送器和接收器使能位。

(7)檢測標志:①接收緩沖器②發送緩沖器空③傳輸結束標志

(8)多個帶標志的中斷源,觸發中斷。

(9)其他:校驗控制,四個錯誤檢測標志。

五、STM32串口異步通信需要定義的參數:

①起始位②數據位(8位或9位)③奇偶校驗位(第9位)④停止位(1,15,2位)⑤波特率設置

六、STM32串口寄存器庫函數配置

(1)常用的串口相關寄存器:USART_SR狀態寄存器、USART_DR數據寄存器、USART_BRR波特率寄存器。

(2)波特率計算方法

?可以使用這個公式來計算波特率

(3)串口操作相關庫函數(省略入口參數):

void USART_Init();//串口初始化:波特率,數據字長,奇偶校驗,硬件流控以及收發使能 void USART_Cmd();//使能串口 void USART_ITConfig();//使能相關中斷 void USART_SendData();發送數據到串口,DR uint16_t USART_ReceiveData();//接收數據,從DR讀取接收到的數據 FlagStatus USART_GetFlagStatus();//獲取狀態標志位 void USART_ClearFlag();//清除狀態標志位 ITStatus USART_GetITStatus();//獲取中斷狀態標志位 void USART_ClearITPendingBit();//清除中斷狀態標志位

(4)串口配置的一般步驟(一般這些函數工程模板里有,這塊寫出來只是熟悉一下函數的功能)

①串口時鐘使能,GPIO時鐘使能:RCC_APB2PeriphClockCmd();

②串口復位:USART_DeInit();//這一步不是必須的

③GPIO端口模式設置:GPIO_Init();模式設置為GPIO_Mode_AF_PP

④串口參數初始化:USART_Init();

⑤開啟中斷并且初始化NVIC(如果需要開啟中斷才需要這個步驟)

NVIC_Init();

USART_ITConfig();

⑥使能串口:USART_Cmd();

⑦編寫中斷處理函數:USARTx_IRQHandle();

⑧串口傳輸狀態獲取: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); }} }

然后剩下的就和模板一模一樣就好。

總結

以上是生活随笔為你收集整理的基于正点原子stm32mini板的串行通信原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。