精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

STM8S_ 004_UART基本收發數據

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 2020-03-20 10:41 ? 次閱讀

寫在前面 Ⅰ

做軟件開發的人都知道打印信息的重要,說到打印信息,我們就不得不說UART串口打印。做單片機開發的人,打印信息主要的來源就是UART串口打印。因此,關于UART相關的知識就比較重要。

printf、scanf這種標準的函數不只是可以在電腦上可以使用,在我們單片機上也同樣可以使用,本文只講述關于UART的基礎知識,關于printf、scanf這一塊后面將再次給大家整理一篇文章。

本文將結合“STM8S參考手冊”和軟件源代碼給大家講述關于UART的基礎知識和用法。

為方便大家閱讀,本文內容已經整理成PDF文件:

http://pan.baidu.com/s/1i5uWhJR

UART基礎知識 Ⅱ

通用異步收發傳輸器(Universal Asynchronous Receiver/Transmitter),通常稱作UART,是一種異步收發傳輸器。

STM8S微控制器家族的通用同步異步收發器(UART1、UART2或UART3)提供了一種靈活的方法和使用工業標準NZR異步串行數據格式的外部設備之間進行全雙工數據交換。STM8的UART提供寬范圍的波特率選擇,并且支持多處理器通訊。

主要特性:

?全雙工的,異步通信

?高精度波特率發生器系統:發送和接收共用的可編程波特率,最高達 2.5Mbits/s

?可編程數據字長度(8位或9位)

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

?單線半雙工通信(UART1)

?檢測標志:接收緩沖器滿、發送緩沖器空、傳輸結束標志

?6個帶標志的中斷源

?2個中斷向量

?低功耗模式

UART同步模式

UART_CK腳是UART發送器時鐘的輸出。在起始位和停止位期間,UART_CK腳上沒有時鐘脈沖。根據UART_CR3寄存器中LBCL位的狀態,發送器決定在最后一個有效數據位期間產生或不產生時鐘脈沖。 UART_CR3寄存器的CPOL位允許用戶選擇時鐘極性, UART_CR3寄存器上的CPHA位允許用戶選擇外部時鐘的相位。

在總線空閑幀和斷開幀中,外部CK時鐘處于非激活狀態。

注意:

1.UART_CK腳同UART_TX腳一起聯合工作。當UART發送端被禁用時(TEN和REN=0),UART_CK和UART_TX管腳為高阻態。

2.在UART發送端和接收端都被禁用(TEN=REN=0)時, LBCL,CPOL和CPHA位必須被正確配置以保證時鐘脈沖正確工作;當發送器或接收器被激活時,這些位不能被改變。

3.建議在同一條指令中設置TE和RE,以減少接收器的建立時間和保持時間。

4. UART只支持主模式:它不能使用來自其他設備的輸入時鐘以接收或發送數據(SCLK只能配置為輸出狀態)。

5. 本節給出的數據只有在寄存器UART_BRR2的UART_DIV[3:0]為0時才有效。否則建立時間和持續時間不再是1/16位時間,而是4/16位時間。

該功能選項可以串行地控制那些由移位寄存器組成的外設,而不會失去異步通訊的功能,即仍然可以與其他異步發送接收器通訊。

UART同步傳輸的例子:

軟件工程源代碼 Ⅲ

1、關于工程

本文提供的工程代碼是基于前面軟件工程“STM8S-A02_TIM精確延時(阻塞式)”增加UART串口修改而來。初學的朋友可以參看我前面對應的基礎文章,那些文章講的比較詳細。

工程源代碼主要實現功能:UART串口基本輸出+中斷接收數據。UART串口間隔1s打印字符串“Demo...”,串口通過中斷接收數據,接收到一個字符就將其通過串口發送出去。

本文重點講述關于UART的內容:

UART_Initializes:UART串口初始化

UART1_SendByte:UART串口發送字節數據

2.代碼分析說明

A.UART_Initializes:初始化

void UART_Initializes(void)

{

UART1_Init((uint32_t)115200, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);

UART1_Cmd(ENABLE);

UART1_ITConfig(UART1_IT_RXNE, ENABLE);

enableInterrupts();

}

UART1_Init:包含的參數

115200:波特率

UART1_WORDLENGTH_8D:字長,8位或9位

UART1_STOPBITS_1:停止位

UART1_PARITY_NO:奇偶校驗

UART1_SYNCMODE_CLOCK_DISABLE:同步模式

UART1_MODE_TXRX_ENABLE:收發使能

這里每一個參數都可以有不同值,可參看其枚舉類型。

UART1_Cmd(ENABLE):使能UART1.

UART1_ITConfig(UART1_IT_RXNE, ENABLE):使能中斷接收。

enableInterrupts():使能全局中斷。

B.UART1_SendByte:發送字節數據

void UART1_SendByte(uint8_t Data)

{

while((UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET));

UART1_SendData8(Data);

while((UART1_GetFlagStatus(UART1_FLAG_TC)==RESET));

}

while((UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET)):等待發送為空

UART1_FLAG_TXE代表發送寄存器為空。

UART1_SendData8(Data):發送字節數據

while((UART1_GetFlagStatus(UART1_FLAG_TC)==RESET)):等待傳輸完成

UART1_FLAG_TC代表發送完成標志。

C.中斷接收

位于stm8s_it.c文件下:

INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)

{

uint8_t temp;

temp = UART1_ReceiveData8();

UART1_SendData8(temp);

}

這里只是簡單的一個Demo例程,接收到數據,將其通過串口發送出去。

UART串口有接收數據中斷,會置位接收標志,平常我們響應中斷,一般都會清楚中斷標志,但串口中斷接收數據,我們都會去讀取串口接收數據,讀取數據會自動清除標志位。見參考手冊中“狀態寄存器UART_SR”:

D.主函數功能

while(1)

{

LED_ON;

TIMDelay_Nms(500);

LED_OFF;

TIMDelay_Nms(500);

UART1_Printf((uint8_t*)"Demo...");

}

主函數里面實現間隔一段時間(1s),通過UART串口發送字符串“Demo...”。

下載

STM8S資料

http://pan.baidu.com/s/1o7Tb9Yq

軟件源代碼工程(STM8S-A04_UART基本收發數據):

http://pan.baidu.com/s/1c2EcRo0

提示:如果網盤鏈接失效,可以微信公眾號“底部菜單”查看更新鏈接。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    7489

    瀏覽量

    151045
  • uart
    +關注

    關注

    22

    文章

    1227

    瀏覽量

    101172
  • STM8S
    +關注

    關注

    16

    文章

    149

    瀏覽量

    31363
收藏 人收藏

    評論

    相關推薦

    ElfBoard技術貼|如何在NXP源碼基礎上適配ELF 1開發板的UART功能

    UART即通用異步收發器,是一種支持全雙工串行通信協議的接口。在i.MX6ULL處理器平臺上,該處理器原生支持多達8路的UART接口,提供了豐富的串行通信能力。 針對ELF 1開發
    的頭像 發表于 09-25 13:56 ?2246次閱讀
    ElfBoard技術貼|如何在NXP源碼基礎上適配ELF 1開發板的<b class='flag-5'>UART</b>功能

    【xG24 Matter開發套件試用體驗】8-UART收發數據

    1 介紹 開發板引出了UART串口,根據原理圖搭建uart開發環境,通過USB轉TTL串口和串口調試助手進行uart接口的數據收發測試。 2
    發表于 08-13 08:13

    TSU6111A USB端口單刀雙擲(SP2T)開關支持USB和通用異步接收發器(UART)數據

    電子發燒友網站提供《TSU6111A USB端口單刀雙擲(SP2T)開關支持USB和通用異步接收發器(UART)數據表.pdf》資料免費下載
    發表于 07-10 09:21 ?0次下載
    TSU6111A USB端口單刀雙擲(SP2T)開關支持USB和通用異步接<b class='flag-5'>收發</b>器(<b class='flag-5'>UART</b>)<b class='flag-5'>數據</b>表

    ESP32-S3-WROOM-1U-N8R8 UART1用默認引腳調試不通怎么解決?

    測試ESP32-S3-WROOM-1U-N8R8模塊,自己畫的板子,用的串口1默認引腳,寫數據一直沒有數據寫出來,同樣程序串口0可以寫出來。 請教這樣問題的原因是什么?如何解決?謝謝
    發表于 06-27 07:26

    SDIO UART和音頻電壓轉換收發器TWL1200數據

    電子發燒友網站提供《SDIO UART和音頻電壓轉換收發器TWL1200數據表.pdf》資料免費下載
    發表于 05-29 10:16 ?0次下載
    SDIO <b class='flag-5'>UART</b>和音頻電壓轉換<b class='flag-5'>收發</b>器TWL1200<b class='flag-5'>數據</b>表

    為什么STM8S003F3P6的uart1發送數據是亂碼的?

    _clk.h\" #include \"stm8s_gpio.h\" #include \"stm8s_uart1.h\" #include \"
    發表于 05-09 07:49

    STM8S001用到UART,通過UART可以往外發數據,但是總是接收不到數據為什么?

    我現在使用STM8S001,需要用到UART。現在芯片通過UART可以往外發數據,但是總是接收不到數據(中斷、查詢都不成功)。但是同樣的程序
    發表于 04-28 08:58

    關于STM8S的多幀收發問題求解

    INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18) { uint8_t receData = 0; if(ComuData.Chan==0
    發表于 04-28 07:09

    STM8S UART應用代碼占用FLASH較大的原因?

    如題今天在做STM8S應用的時候 發現添加uart代碼后,在.map中查看發現uart簡單的發送數據就占用了3k的FLASH大家有沒有遇到類似的問題呢?
    發表于 04-17 08:12

    STM8S105C6T6 UART2串口能接收數據,不能發送數據是為什么?

    STM8S105C6T6 UART2串口,能接收數據,不能發送數據,哪位大神能幫忙看看。現在單片機自發自收沒有問題,串口自發自收也沒有問題,但是兩個連接起來就單片機只能接收
    發表于 04-10 08:05

    stm8s003串口中斷方式為什么只能接收兩個字節?

    各位大佬,uart1 發送一串數據到串口助手沒有問題,用串口助手向stm8s發送字符串,不知道為什么一次只能讀到2個字節,單個字節收發都沒問題,接收采用中斷方式,代碼如下Init
    發表于 03-29 07:48

    STM8S003K3 UART1中斷接收數據,0x00數據容易丟失怎么解決?

    如題:串口初始化如下 UART1_CR2=0x00;//禁止收發中斷UART1_CR1=0x00;//8數據位,無奇偶校驗
    發表于 03-15 06:18

    常見的UART收發方式

    這種方式適合大多數單片機,只要有中斷就行。使用UART Write發送數據時,數據并不是直接寫入到UART發送器,而是放進了一個環形緩沖區中。
    的頭像 發表于 02-19 16:23 ?835次閱讀

    請問tc233 Uart收發數據如何綁定到DMA?

    請問tc233 Uart收發數據如何綁定到DMA?綁定到DMA之后中斷觸發還是原來的 IfxCpu_Irq_installInterruptHandler()這個函數里綁定的中斷服務函數嗎?目前
    發表于 01-22 06:27

    CY8C4126AXI-S445的RS-232C UART有設置時間和保持時間的概念嗎?

    我們的客戶正在考慮使用CY8C4126AXI-S445的RS-232C。 由于是 RS-232,通信使用 SCB 的 UART 組件,但有人詢問了 PSOC4s Plus 的設置時間和保持時間
    發表于 01-19 07:51