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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

STM32串口通信原理及实验讲解

發布時間:2023/12/31 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32串口通信原理及实验讲解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

串口通信基本原理? ? ? ?

串口

  串口,顧名思義,即為串行接口,是處理器與外部設備進行串行通信的接口。串行通信是指數據按位進行順序傳輸,這種方法占用引腳資源少,但速度相對較慢。串行通信按數據傳輸方向可分為三種:單工、半雙工、全雙工;按通信方式可分為同步通信和異步通信。

單工:只允許一個方向傳輸數據

半雙工:允許兩個方向,但不能同時兩個方向傳輸

全雙工:允許兩個方向且同時傳輸

同步:傳輸時,帶時鐘同步信號--SPI、IIC

異步:傳輸時,不帶時鐘同步信號(異步傳輸前,波特率[即傳輸速度]要約定好)-UART

?

UART?(通用異步收發器)

STM32F10x系列的芯片包括3個USART和2個UART。

引腳:RXD-數據接收;TXD-數據發送

特點:全雙工異步通信、分數波特率發生系統、...

傳輸速度由波特率決定。

串口通信常用寄存器和庫函數

常用串口相關寄存器

USART_SR狀態寄存器

USART_DR數據寄存器

USART_BRR波特率寄存器

波特率的計算方法

波特率控制異步通信串口接收和發送數據的速度。

波特率=115200,PCLK2的時鐘為72M,則USARTDIV=72000000/(115200*16)=39.0625。在波特率寄存器中,整數部分DIV_Mantissa=39=0X27;DIV_Fraction=0.0625*16=1=0X01;故USART1->BRR值為0X0271,只要設置串口1的BRR寄存器值為0X0271就可得到115200的波特率。

串口操作的相關庫函數

?

查看串口實驗FWLIB文件下的stm32f10x_usart.c中的頭文件stm32f10x_usart.h

?下面是寫串口實驗主函數的思路以及代碼:

void My_USART_Init(void)//初始化函數 {GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//GPIO時鐘使能 1RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//GPIO串口使能GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//推挽復用輸出GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);//GPIO端口初始化GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空輸入GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);//GPIO端口初始化 2USART_InitStructure.USART_BaudRate=115200;//波特率USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//不使用硬件流USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//發送接收均使能,使用或|符號USART_InitStructure.USART_Parity=USART_Parity_No;//不使用奇偶校驗USART_InitStructure.USART_StopBits=USART_StopBits_1;//設置一個停止位USART_InitStructure.USART_WordLength=USART_WordLength_8b;//字長USART_Init(USART1,&USART_InitStructure);//串口參數初始化 3USART_Cmd(USART1,ENABLE);//串口使能 4USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//開啟接收中斷 5NVIC_InitStructure.NVIC_IRQChannel= USART1_IRQn ;//在stm32f10x.h文件種215行NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//搶占優先級NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;//響應優先級NVIC_Init(&NVIC_InitStructure);//初始化NVIC 6 }void USART1_IRQHandler(void)//中斷處理函數 {if(USART_GetITStatus(USART1,USART_IT_RXNE ))//判斷現在發生的中斷是否是接收到的數據產生的中斷{u8 res;res= USART_ReceiveData(USART1);//接收到的數據USART_SendData(USART1,res);//發送數據 }}int main(void){ //***設置中斷NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//系統中斷分組設置為2My_USART_Init();while(1);//死循環}//移除system中的usart.c文件

總結

以上是生活随笔為你收集整理的STM32串口通信原理及实验讲解的全部內容,希望文章能夠幫你解決所遇到的問題。

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