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串口通信原理及实验讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 十.OpenCv 特征点检测和匹配
- 下一篇: oracle怎么删除.dat,oracl