<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

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

3天內不再提示

【有那么點詳細的CW32學習筆記】通用異步收發器—發送篇

CW32生態社區 ? 來源:CW32生態社區 ? 作者:CW32生態社區 ? 2023-11-17 17:30 ? 次閱讀

本章介紹CW32通用異步收發器的使用。

雖然大部分時候會被簡單稱為“串口”,但實際上 用“串口”來指代UART并不正確 。串口對應并口的概念,在串口通信中,數據被以二進制形式發送,并且每次發送都只傳輸1比特位(當然,傳輸速度可能會很快),像SPI、IIC其實也屬于串口。而對傳輸速度的描述,也就是波特率即是 描述的每秒傳輸的比特位數量 ,例如波特率是9600,就代表該串口每秒可以傳輸9600bit的數據。與之相對應的并口,則是使用多個物理信道傳輸數據,一批數據會同時在多個物理信道上傳輸,這種并行通信會占用很多IO資源,但是傳輸速度也得到了顯著提高。

UART作為一種異步通信方式,它 不需要時鐘 ,在供電正常的情況下一共就只需要兩根數據線,非常適合一對一的通信需求。CW32F030擁有3個UART外設,此文章介紹UART1的使用,那么按照慣例,先總覽一下使用UART需要做哪些準備工作。

第一:需要將IO設置為輸出,并復用為UART模式。

第二:需要使能UART這個外設,并設置通信協議的必要參數(關于UART協議本身,互聯網有很多優質教程,讀者可以自行搜索),完成初始化。

第三:編寫發送和接收函數,調用函數實現發送和接收的功能。

第一步的進行非常簡單,查詢芯片《數據表》的引腳定義,發現LQFP48封裝下,PA8 & PA9是UART1的發送和接收,因此只需要配置好這兩個IO的功能,第一步就算是完成了。

圖片

圖片

配置代碼如上圖,但有讀者表示自己找不到設置復用功能的函數,那我們就來看看功能復用函數的本質是什么。

圖片

這是PA9的復用函數,可以看到這是一個宏函數,其內容表明設置復用其實就是設置了對應GPIO復用寄存器的值,PA9屬于A組IO的第9號口,是高位Pin口,因此要找到高位口的復用寄存器,并設置復用功能為(0010) 2 ,也就是AF2,具體設置如下圖所示。

圖片

因此配置復用的時候,如果找不到對應的復用函數,可以直接配置此寄存器來完成復用配置,但為了方便讀者,配置IO復用的宏函數均位于cw32xxxxx_gpio.h這個文件中,此頭文件包含了相當多的宏函數,均是常用的IO操作,如反轉、置位、閃爍等,感興趣的讀者可以前往翻閱。

話題拽回到UART這邊,接下來要進行的是第二步,配置UART的必要參數,這里先講解發送功能需要進行的配置。

不論是什么單片機,想要使用任何一個片上外設,必須要使能該外設的時鐘總線 ,直接在工程的函數列表中找到時鐘配置文件下的全部函數,根據函數的名字可以快速定位使能UART1時鐘的函數

我們可以看到這個函數本質上就是在操作APBEN2這個寄存器,通過查看芯片手冊,我們也可以找到各個外設所屬的時鐘線。

圖片

圖片

隨后就是UART通信參數的結構體了,結構體同樣對應了寄存器,但使用結構體可以簡化開發者的配置步驟,且看下圖:

圖片

圖片

此結構體成員擁有相當詳細的注釋,這里直接按照開發者意圖配置即可,我在這里配置為:波特率115200、PCLK時鐘源、1個停止位、無校驗位、全雙工模式,配置完成后初始化結構體即可。

值得注意的是,在芯片內部并沒有一個直接的波特率數值寄存器,為了保證異步通訊的可靠,波特率越精準越好,且既有的系統時鐘不一定能夠剛好提供波特率倍數的時基,因此實際上的波特率是一個浮點數,它擁有整數部分小數部分2****個寄存器 。具體的計算公式在芯片手冊的通用異步收發器章節有寫,這里只列舉初始化函數中的相關操作:

圖片

由于我選擇的是16倍采樣,初始化函數會執行上述代碼,代碼的計算過程復刻了手冊中的計算過程(如下圖),這里是先計算時鐘源在16倍采樣模式下能夠直接取得的波特率結果temp,temp包含了整數部分和小數部分,整數部分直接賦值即可,小數部分則是將公式變型得到的。開發者在使用時不需要手寫計算BRRI和BRRF的寄存器值,初始化函數會自動完成該計算。

圖片

皆大歡喜,到目前為止已經成功完成兩步了,還差最后一步就可以使用UART的發送功能了,那就是自己寫一個UART1的發送函數。我手里剛好就有一個自己寫的發送函數,長這個樣子:

圖片

這段簡易代碼會發送這個字符串作為UART1的調試參數。

圖片

這段代碼的主要邏輯在芯片手冊里面也有詳細描述:

圖片

Tips: 在編寫各類通信函數這里,我建議一定要 加上至少兩個功能 。第一個就是 發送的狀態 ,成功還是失敗,這很重要,出問題之后的排查工作基本就靠這個了;第二個就是 超時跳出功能 ,有的時候可能硬件故障或者什么別的原因導致發送一直失敗,如果死等就讓程序全部死掉了,超時跳出可以保證其他大部分程序的正常運行,當然使用看門狗是一種更優解。

在輪詢函數中調用調試函數即可實現間隔100ms發送一次的功能,效果如下:

圖片

圖片

從時間上來看,100ms的定時發送還是很精確的,這種方式占用CPU的時間資源實現發送,雖然傳統但是有效可控。

要點總結:

1、注意區分串口和并口的概念。

2、CW32的UART雖然有2個波特率寄存器,但是并不需要開發者手算寄存器參數。

審核編輯 黃宇

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

    關注

    22

    文章

    1159

    瀏覽量

    99969
  • 通用異步收發器

    關注

    0

    文章

    14

    瀏覽量

    6681
  • CW32
    +關注

    關注

    1

    文章

    122

    瀏覽量

    229
收藏 人收藏

    評論

    相關推薦

    【有那么點詳細CW32學習筆記】模數轉換器

    來說,想要判斷大小就需要有對比,因此該數字指示的電壓大小實際上是一個比較的結果。 ADC將需要測量的電壓信號Ut與已知電壓的信號U作比較,并最終輸出一個數字表示Ut相當于多少比例的U。 接下來就可以看看CW32的ADC外設結構框圖了,
    的頭像 發表于 02-29 09:41 ?229次閱讀
    【有<b class='flag-5'>那么點</b><b class='flag-5'>詳細</b>的<b class='flag-5'>CW32</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】模數轉換器

    【有那么點詳細CW32學習筆記】IIC接口-主機發送

    例程鏈接 : https://pan.baidu.com/s/1s1XwqDFkO8fK4SRSTKsNhA?pwd=mshk 提取碼 :mshk 本章將介紹CW32的IIC接口,并最終點亮一塊
    的頭像 發表于 01-11 09:53 ?249次閱讀
    【有<b class='flag-5'>那么點</b><b class='flag-5'>詳細</b>的<b class='flag-5'>CW32</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】IIC接口-主機<b class='flag-5'>發送</b>

    【有那么點詳細CW32學習筆記通用定時器——輸出比較

    本章以CW32通用定時器為例介紹單片機定時器的用法。 定時器是單片機中一個非常傳統且重要的外設,定時器的 本質其實就是一個計數器 ,只不過被計數的對象是定時器的時鐘源。定時器要正常工作,需要這幾
    的頭像 發表于 12-28 11:24 ?849次閱讀
    【有<b class='flag-5'>那么點</b><b class='flag-5'>詳細</b>的<b class='flag-5'>CW32</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】<b class='flag-5'>通用</b>定時器——輸出比較

    【有那么點詳細CW32學習筆記通用異步收發器—中斷接收篇

    上回說到單片機的Uart發送,我們編寫了一個發送函數循環發送固定的字符串,這回我們講Uart的中斷接收功能。 說一下中斷是什么 ,大概就是說,單片機只有一個核,就是只有一個大腦,他無法一核二用地做事
    的頭像 發表于 11-17 17:27 ?602次閱讀
    【有<b class='flag-5'>那么點</b><b class='flag-5'>詳細</b>的<b class='flag-5'>CW32</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】<b class='flag-5'>通用</b><b class='flag-5'>異步</b><b class='flag-5'>收發器</b>—中斷接收篇

    UART通用異步收發器原理是什么

    UART通用異步收發器(串口通信) 一般來說,開發過程中我們通常使用串口進行DEBUG調試。 原理 通用異步
    的頭像 發表于 11-09 17:32 ?332次閱讀
    UART<b class='flag-5'>通用</b><b class='flag-5'>異步</b><b class='flag-5'>收發器</b>原理是什么

    基于CW32的無刷水泵方案

    基于CW32的無刷水泵方案
    的頭像 發表于 11-03 17:28 ?448次閱讀
    基于<b class='flag-5'>CW32</b>的無刷水泵方案

    基于CW32的物聯網應用

    CW32】基于CW32的物聯網應用
    的頭像 發表于 11-02 15:55 ?336次閱讀
    基于<b class='flag-5'>CW32</b>的物聯網應用

    2023電賽A題國獎CW32 開源分享

    電賽A題開源分享,主控為CW32
    的頭像 發表于 11-02 10:16 ?786次閱讀
    2023電賽A題國獎<b class='flag-5'>CW32</b> 開源分享

    CW32通用輸入輸出端口詳解

    CW32通用輸入輸出端口詳解
    的頭像 發表于 10-30 17:33 ?576次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>通用</b>輸入輸出端口詳解

    CW32單片機UART基本數據收發功能介紹

    CW32單片機UART基本數據收發功能介紹
    的頭像 發表于 10-24 16:50 ?416次閱讀
    <b class='flag-5'>CW32</b>單片機UART基本數據<b class='flag-5'>收發</b>功能介紹

    8位PIC單片機上的通用異步收發器(UART)

    電子發燒友網站提供《8位PIC單片機上的通用異步收發器(UART).pdf》資料免費下載
    發表于 09-26 09:47 ?0次下載
    8位PIC單片機上的<b class='flag-5'>通用</b><b class='flag-5'>異步</b><b class='flag-5'>收發器</b>(UART)

    【有那么點詳細CW32學習筆記】看手冊配置時鐘樹

    本章針對CW32F030C8T6的時鐘樹進行詳細解析,續第一章啟動文件的相關講解。
    的頭像 發表于 08-17 14:54 ?592次閱讀
    【有<b class='flag-5'>那么點</b><b class='flag-5'>詳細</b>的<b class='flag-5'>CW32</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】看手冊配置時鐘樹

    cw32和stm32的區別

    cw32和stm32的區別 CW32和STM32是兩種常見的單片機,被廣泛應用于各種電子設備中。在本文中,我們將深入探討CW32和STM32之間的區別和優劣勢。 1. 硬件性能 硬件性能是衡量單片機
    的頭像 發表于 08-16 11:15 ?2257次閱讀

    【有那么點詳細CW32學習筆記】單片機啟動\庫函數構成

    此篇文章是CW32F030C8T6的參考資料,很詳細,適合初學者。
    的頭像 發表于 08-10 11:13 ?746次閱讀
    【有<b class='flag-5'>那么點</b><b class='flag-5'>詳細</b>的<b class='flag-5'>CW32</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】單片機啟動\庫函數構成

    CW32開發者扶持計劃#CW32 #芯片

    CW32
    CW32生態社區
    發布于 :2023年05月24日 16:56:14
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>