4 USART
UART:universal asynchronous receiver and transmitter通用異步收發器;
USART:universal synchronous asynchronous receiver and transmitter通用同步異步收發器,
注意是不一樣的
USART_Init



x是需要配置的變數,一般使用異步模式
USART_BaudRate
該成員設定了 USART 傳輸的波特率,波特率可以由以下公式計算:
IntegerDivider = ((APBClock) / (16 * (USART_InitStruct->USART_BaudRate)))
FractionalDivider = ((IntegerDivider - ((u32) IntegerDivider)) * 16) + 0.5
USART_WordLength
USART_WordLength 提示了在一個幀中傳輸或者接收到的資料位數,Table 709. 給出了該引數可取的值,
USART_StopBits
USART_StopBits 定義了發送的停止位數目,Table 710. 給出了該引數可取的值
USART_Parity
USART_Parity 定義了奇偶模式,Table 711. 給出了該引數可取的值
USART_HardwareFlowControl
USART_HardwareFlowControl 指定了硬體流控制模式使能還是失能,Table 712. 給出了該引數可取的值,
1.硬體流控制
??硬體流控制常用的有rts/cts流控制和dtr/dsr(資料終端就緒/資料設定就緒)流控制,
硬體流控制必須將相應的電纜線連上,用rts/cts(請求發送/清除發送)流控制時,應將通訊兩端的rts、cts線對應相連,資料終端設備(如計算機)使用rts來起始調制解調器或其它資料通訊設備的資料流,而資料通訊設備(如調制解調器)則用cts來起動和暫停來自計算機的資料流,這種硬體握手方式的程序為:
編程時根據接收端緩沖區大小設定一個高位標志(可為緩沖區大小的75%)和一個低位標志(可為緩沖區大小的25%),當緩沖區內資料量達到高位時,在接收端將cts線置低電平(送邏輯0),當發送端的程式檢測到cts為低后,就停止發送資料,直到接收端緩沖區的資料量低于低位而將cts置高電平,
2.硬體流:RTS/CTS (Request To Send/Clear To Send)即請求發送/清除發送協議,
??用于半雙工時的收發切換,半雙工的意思是說,發的時候不收,收的時候不發,那么怎么區分收發呢?預設時是DCE向DTE發送資料,當DTE決定向DCE發資料時,先有效RTS,表示DTE希望向DCE發送,一般DCE不能馬上轉換收發狀態,DTE就通過監測CTS是否有效來判斷可否發送,這樣避免了DTE在DCE未準備好時發送所導致的資料丟失,
簡單的說就是:在發送之前告訴你我要發送資料(有效RTS),通過檢測CTS來查看這個時候總線是否空閑,來決定是否可以發送資料
一般USART_HardwareFlowControl_None就行
USART_Mode
USART_Mode 指定了使能或者失能發送和接收模式,Table 713. 給出了該引數可取的值,
示范
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//無硬體資料流使能
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收發模式
USART_Init(USART1, &USART_InitStructure);
USART_ITConfig

USART_IT
輸入引數 USART_IT 使能或者失能 USART 的中斷,可以取下表的一個或者多個取值的組合作為該引數的
值,
一般使能接受
USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);//rx interrupt is enable
USART_ Cmd

使能usart
USART_SendData

USART_ReceiveData

USART_GetFlagStatus

USART_FLAG
Table 744. 給出了所有可以被函式USART_ GetFlagStatus檢查的標志位串列
步驟與示例
1 使能時鐘 (GPIO,USRAT,AFIO)
2初始化GPIO,NVIC,USRAT
3寫中斷處理函式
初始化USRAT的時候記得如果需要接受要 USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//rx interrupt is enable
示例
初始化
void USART1_Init(unsigned long bound)
{
NVIC_InitTypeDef NVIC_InitStructure;//定義NVIC初始化結構體
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1 | RCC_APB2Periph_AFIO, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = bound;//
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//8bits
USART_InitStructure.USART_StopBits = USART_StopBits_1;//stop bit is 1
USART_InitStructure.USART_Parity = USART_Parity_No;//no parity
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//no Hardware Flow Control
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;//enable tx and rx
USART_Init(USART1, &USART_InitStructure);//
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//rx interrupt is enable
USART_Cmd(USART1, ENABLE);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//優先級組別2
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//串口中斷1
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
處理(接收資料)
void USART1_IRQHandler(void)
{
uint8_t ch;
//接收暫存器非空
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
ch = USART_ReceiveData(USART1); //接受資料
}
}
發送資料,不需要中斷
/*發送資料*/
USART_SendData(USART1,i);
/*等待發送完成*/
while( USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/261452.html
標籤:其他
上一篇:51單片機:靜態數碼管詳細教程
