0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

CKS32F107xx系列USART的特性和功能

中科芯MCU ? 來源:中科芯MCU ? 2025-02-18 16:58 ? 次閱讀

USART介紹

通用同步異步收發(fā)器(USART)提供了一種靈活的方法與使用工業(yè)標(biāo)準(zhǔn)NRZ異步串行數(shù)據(jù)格式的外部設(shè)備之間進行全雙工數(shù)據(jù)交換。USART利用分數(shù)波特率發(fā)生器提供寬范圍的波特率選擇。它支持同步單向通信和半雙工單線通信,也支持LIN(局部互連網(wǎng)),智能卡協(xié)議和IrDA(紅外數(shù)據(jù)組織)SIRENDEC規(guī)范,以及調(diào)制解調(diào)器(CTS/RTS)操作。它還允許多處理器通信。使用多緩沖器配置的DMA方式,可以實現(xiàn)高速數(shù)據(jù)通信。

USART主要特性

全雙工的,異步通信

NRZ標(biāo)準(zhǔn)格式

分數(shù)波特率發(fā)生器系統(tǒng)

—發(fā)送和接收共用的可編程波特率,最高達4.5Mbits/s

可編程數(shù)據(jù)字長度(8位或9位)

可配置的停止位-支持1或2個停止位

LIN主發(fā)送同步斷開符的能力以及LIN從檢測斷開符的能力

—當(dāng)USART硬件配置成LIN時,生成13位斷開符;檢測10/11位斷開符

發(fā)送方為同步傳輸提供時鐘

IRDA SIR編碼器解碼器

—在正常模式下支持3/16位的持續(xù)時間

模擬智能卡功能

—智能卡接口支持ISO7816-3標(biāo)準(zhǔn)里定義的異步智能卡協(xié)議

—智能卡用到的0.5和1.5個停止位

單線半雙工通信

可配置的使用DMA的多緩沖器通信

—在SRAM里利用集中式DMA緩沖接收/發(fā)送字節(jié)

單獨的發(fā)送器和接收器使能位

檢測標(biāo)志

—接收緩沖器滿

—發(fā)送緩沖器空

—傳輸結(jié)束標(biāo)志

校驗控制

—發(fā)送校驗位

—對接收數(shù)據(jù)進行校驗

四個錯誤檢測標(biāo)

—溢出錯誤

—噪音錯誤

—幀錯誤

—校驗錯誤

10個帶標(biāo)志的中斷源

—CTS改變

—LIN斷開符檢測

—發(fā)送數(shù)據(jù)寄存器

—發(fā)送完成

—接收數(shù)據(jù)寄存器滿

—檢測到總線為空閑

—溢出錯誤

—幀錯誤

—噪音錯誤

—校驗錯誤

多處理器通信--如果地址不匹配,則進入靜默模式

從靜默模式中喚醒(通過空閑總線檢測或地址標(biāo)志檢測)

兩種喚醒接收器的方式:地址位(MSB,第9位),總線空閑

USART功能概述

任何USART雙向通信至少需要兩個腳:接收數(shù)據(jù)輸入(RX)和發(fā)送數(shù)據(jù)輸出(TX)。RX:接收數(shù)據(jù)串行輸。通過過采樣技術(shù)來區(qū)別數(shù)據(jù)和噪音,從而恢復(fù)數(shù)據(jù)。

TX:發(fā)送數(shù)據(jù)輸出。當(dāng)發(fā)送器被禁止時,輸出引腳恢復(fù)到它的I/O端口配置。當(dāng)發(fā)送器被激活,并且不發(fā)送數(shù)據(jù)時,TX引腳處于高電平。

1、字符發(fā)送

在USART發(fā)送期間,在TX引腳上首先移出數(shù)據(jù)的最低有效位。在此模式里,USART_DR寄存器包含了一個內(nèi)部總線和發(fā)送移位寄存器之間的緩沖器。

每個字符之前都有一個低電平的起始位;之后跟著的停止位,其數(shù)目可配置。USART支持多種停止位的配置:0.5、1、1.5和2個停止位。

配置步驟:

通過在USART_CR1寄存器上置位UE位來激活USART

編程USART_CR1的M位來定義字長。

在USART_CR2中編程停止位的位數(shù)。

如果采用多緩沖器通信,配置USART_CR3中的DMA使能位(DMAT)。按多緩沖器通信中的描述配置DMA寄存器。

利用USART_BRR寄存器選擇要求的波特率。

設(shè)置USART_CR1中的TE位,發(fā)送一個空閑幀作為第一次數(shù)據(jù)發(fā)送。

把要發(fā)送的數(shù)據(jù)寫進USART_DR寄存器(此動作清除TXE位)。在只有一個緩沖器的情況下,對每個待發(fā)送的數(shù)據(jù)重復(fù)步驟7。

在USART_DR寄存器中寫入最后一個數(shù)據(jù)字后,要等待TC=1,它表示最后一個數(shù)據(jù)幀的傳輸結(jié)束。當(dāng)需要關(guān)閉USART或需要進入停機模式之前,需要確認傳輸結(jié)束,避免破壞最后一次傳輸。

2、字符接收

在USART接收期間,數(shù)據(jù)的最低有效位首先從RX腳移進。在此模式里,USART_DR寄存器包含的緩沖器位于內(nèi)部總線和接收移位寄存器之間。

配置步驟:

將USART_CR1寄存器的UE置1來激活USART。

編程USART_CR1的M位定義字長

在USART_CR2中編寫停止位的個數(shù)

如果需多緩沖器通信,選擇USART_CR3中的DMA使能位(DMAR)。按多緩沖器通信所要求的配置DMA寄存器。

利用波特率寄存器USART_BRR選擇希望的波特率。

設(shè)置USART_CR1的RE位。激活接收器,使它開始尋找起始位。

當(dāng)一字符被接收到時

RXNE位被置位。它表明移位寄存器的內(nèi)容被轉(zhuǎn)移到RDR。換句話說,數(shù)據(jù)已經(jīng)被接收并且可以被讀出(包括與之有關(guān)的錯誤標(biāo)志);

如果RXNEIE位被設(shè)置,產(chǎn)生中斷;

在接收期間如果檢測到幀錯誤,噪音或溢出錯誤,錯誤標(biāo)志將被置起;

在多緩沖器通信時,RXNE在每個字節(jié)接收后被置起,并由DMA對數(shù)據(jù)寄存器的讀操作而清零;

在單緩沖器模式里,由軟件讀USART_DR寄存器完成對RXNE位清除。RXNE標(biāo)志也可以通過對它寫0來清除。RXNE位必須在下一字符接收結(jié)束前被清零,以避免溢出錯誤。

USART程序編寫

開啟GPIO、USART1時鐘;

對USART引腳進行配置,PA9映射TX,PA10映射RX;

對USART參數(shù)進行配置、開啟USART的RXNE中斷;

對中斷參數(shù)進行配置;

/*******************************************************************************

* Function Name : USART_Configuration

* Description : Configure USART1

* Input : None

* Output : None

* Return : None

* Attention : None

*******************************************************************************/

void CKS_USART_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1,ENABLE);

/*USART1_TX -> PA9 , USART1_RX -> PA10*/

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 configuration ------------------------------------------------------*/

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);

/* Enable USART RXNE interrupt */

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

USART_Cmd(USART1, ENABLE);

/* NVIC configuration ------------------------------------------------------*/

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

5. 編寫USART1_IRQHandler函數(shù);

我們利用USART的IDLE狀態(tài)位進行不定長度數(shù)據(jù)接收,當(dāng)USART被RXNE中斷觸發(fā)后,程序?qū)⒃谠撝袛嗪瘮?shù)中輪詢,直至串口空閑后IDLE狀態(tài)位被置位。

/*******************************************************************************

* Function Name : USART1_IRQHandler

* Description : This function handles USART1 global interrupt request.

* Input : None

* Output : None

* Return : None

*******************************************************************************/

void USART1_IRQHandler(void)

{

uint8_t i = 0;

uint8_t j = 0;

if(USART_GetFlagStatus(USART1, USART_IT_RXNE) != RESET)

{

/* get usart data until IDLE flag is set */

while(!USART_GetFlagStatus(USART1, USART_FLAG_IDLE))

{

if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) != RESET)

{

CKS_Uart_Buff[i++] = USART_ReceiveData(USART1);

}

}

/* clear uart IDLE flag */

j = USART1->SR;

j = USART1->DR;

/* clear uart RXNE flag */

USART_ClearFlag(USART1, USART_IT_RXNE);

}

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 收發(fā)器
    +關(guān)注

    關(guān)注

    10

    文章

    3534

    瀏覽量

    106750
  • 異步通信
    +關(guān)注

    關(guān)注

    1

    文章

    58

    瀏覽量

    10248
  • USART
    +關(guān)注

    關(guān)注

    1

    文章

    198

    瀏覽量

    31342
  • 發(fā)送器
    +關(guān)注

    關(guān)注

    1

    文章

    261

    瀏覽量

    27014

原文標(biāo)題:MCU微課堂|CKS32F107xx USART(一)

文章出處:【微信號:中科芯MCU,微信公眾號:中科芯MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 0人收藏

    評論

    相關(guān)推薦

    基于CKS32F4xx系列的MCU互補PWM方案

    互補輸出實際跟比較輸出章節(jié)一樣使用的是定時器的功能,所以相關(guān)的函數(shù)設(shè)置同樣在庫函數(shù)文件CKS32f4xx_tim.h和CKS32f4xx_tim.c文件中。 1)開啟TIM1和GPIO時鐘,配置PA7、PA8選擇復(fù)用
    發(fā)表于 12-02 10:13 ?815次閱讀
    基于<b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>的MCU互補PWM方案

    CKS32F4xx系列DSP功能介紹

    CKS32F4xx系列使用高性能的32位內(nèi)核,支持浮點運算單元(FPU),同時還支持DSP指令以及存儲保護(MPU)用來加強應(yīng)用的安全性。
    的頭像 發(fā)表于 03-04 13:43 ?1787次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>DSP<b class='flag-5'>功能</b>介紹

    利用CKS32F107xx系列RTC的鬧鐘實驗

    本小節(jié)講解的是如何在萬年歷實驗的基礎(chǔ)上,利用RTC的鬧鐘功能實現(xiàn)一個鬧鐘,在每天的[XX小時-XX分鐘-XX秒]產(chǎn)生鬧鐘,然后通過閃爍LED模擬鬧鐘響效果。
    的頭像 發(fā)表于 02-18 17:21 ?562次閱讀

    CKS32F4xx系列產(chǎn)品串口DMA傳輸

    在上一講,我們講過CKS32F4xx系列的6個串口都支持DMA傳輸。因此本節(jié)我們對CKS32F4xx系列的DMA進行介紹,同時利用DMA對串口數(shù)據(jù)進行傳輸。
    的頭像 發(fā)表于 04-10 11:18 ?1193次閱讀

    CKS32F4xx系列RNG功能設(shè)置

    ? MCU 微課堂 CKS32F4xx 系 列RNG功能 隨機數(shù)發(fā)生器簡介 ? ? CKS32F4xx系列自帶了硬件隨機數(shù)發(fā)生器(RNG),RNG處理器是一個以連續(xù)模擬噪聲為基礎(chǔ)的隨機
    的頭像 發(fā)表于 09-08 10:01 ?751次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>RNG<b class='flag-5'>功能</b>設(shè)置

    CKS32F4xx系列DAC功能

    CKS32F4xx系列DAC功能
    的頭像 發(fā)表于 11-06 16:56 ?1007次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>DAC<b class='flag-5'>功能</b>

    CKS32F4xx系列ADC多通道DMA電壓采集

    CKS32F4xx系列ADC多通道DMA電壓采集
    的頭像 發(fā)表于 11-06 16:53 ?1248次閱讀

    CKS32F4xx系列產(chǎn)品Timer的基本使用方法-比較輸出

    CKS32F4xx系列產(chǎn)品Timer的基本使用方法-比較輸出
    的頭像 發(fā)表于 11-09 17:39 ?1006次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>產(chǎn)品Timer的基本使用方法-比較輸出

    MCU微課堂 | CKS32F4xx系列產(chǎn)品SPI通信

    MCU微課堂 | CKS32F4xx系列產(chǎn)品SPI通信
    的頭像 發(fā)表于 10-24 17:12 ?862次閱讀
    MCU微課堂 | <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>產(chǎn)品SPI通信

    CKS32F4xx系列FSMC功能簡介

    本課講為大家講解CKS32F4xx系列產(chǎn)品的FSMC應(yīng)用實例,F(xiàn)SMC全稱是Flexible Static Memory Controller,讀作靈活的靜態(tài)存儲控制器,顧名思義,MCU可以通過FSMC擴展靜態(tài)內(nèi)存
    的頭像 發(fā)表于 04-14 15:06 ?1198次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>FSMC<b class='flag-5'>功能</b>簡介

    CKS32F107xx系列時鐘系統(tǒng)具體配置方法講解

    上一章節(jié)對CKS32F107xx系列時鐘做了整體介紹,本章節(jié)以使用HSI內(nèi)部高速時鐘為例對時鐘具體配置方法進行講解。
    的頭像 發(fā)表于 05-28 10:05 ?842次閱讀
    <b class='flag-5'>CKS32F107xx</b><b class='flag-5'>系列</b>時鐘系統(tǒng)具體配置方法講解

    CKS32F107xx系列MCU中ADC介紹

    CKS32F107xx系列產(chǎn)品提供2個12位的模擬/數(shù)字轉(zhuǎn)換器(ADC),每個ADC共用多達16個外部通道,各通道的A/D轉(zhuǎn)換可以單次、連續(xù)、掃描或間斷模式執(zhí)行。ADC的結(jié)果可以左對齊或右對齊方式存儲在16位數(shù)據(jù)寄存器中。
    的頭像 發(fā)表于 06-22 11:04 ?957次閱讀

    CKS32F107xx系列MCU的GPIO內(nèi)部硬件結(jié)構(gòu)和工作模式

    16個引腳,如型號為CKS2F107VET6型號的芯片有GPIOA、GPIOB、GPIOC至GPIOE共5組GPIO,芯片一共100個引腳,其中GPIO就占了一大部分,所有的GPIO引腳都有基本的輸入輸出功能。
    的頭像 發(fā)表于 07-22 09:23 ?960次閱讀
    <b class='flag-5'>CKS32F107xx</b><b class='flag-5'>系列</b>MCU的GPIO內(nèi)部硬件結(jié)構(gòu)和工作模式

    詳解CKS32F107xx系列的定時器同步功能

    CKS32F107xx系列部分定時器在內(nèi)部是相連的,可用于定時器同步或鏈接,方便用戶配置不同的同步模式,以便在電機控制、數(shù)據(jù)采集和PWM信號生成等應(yīng)用中,實現(xiàn)復(fù)雜的時間序列和多通道的同步操作。本節(jié)課
    的頭像 發(fā)表于 11-26 17:51 ?774次閱讀
    詳解<b class='flag-5'>CKS32F107xx</b><b class='flag-5'>系列</b>的定時器同步<b class='flag-5'>功能</b>

    CKS32F107xx系列USART的LIN模式

    CKS32F107xx系列在支持正常USART功能的同時,亦支持LIN(局域互聯(lián)網(wǎng))模式。
    的頭像 發(fā)表于 02-18 17:18 ?258次閱讀
    <b class='flag-5'>CKS32F107xx</b><b class='flag-5'>系列</b><b class='flag-5'>USART</b>的LIN模式

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品