在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

Stm32 HAL庫開發(fā)-UART串口通信輪詢方式

冬至子 ? 來源:Vulcan Matrix ? 作者:Vulcan ? 2023-10-26 16:22 ? 次閱讀

1

HAL庫中UART相關(guān)結(jié)構(gòu)體的內(nèi)容

本小節(jié)參考《description-of-stm32f0-hal-and-lowlayer-drivers-stmicroelectronics》、《STM32F051x 參考手冊中文》。

圖片

UART的結(jié)構(gòu)體有兩個(gè),如圖,UART_InitTypeDef是初始化結(jié)構(gòu)體,包含UART開始運(yùn)行時(shí)的配置;UART_HandleTypeDef是句柄結(jié)構(gòu)體,包含UART所有運(yùn)行時(shí)的信息。

圖片

UART_InitTypeDef初始化結(jié)構(gòu)體中包含,波特率、幀的字長、停止位長度、奇偶校驗(yàn)方式、工作模式、硬件流模式和過(超)采樣率設(shè)置。

圖片

其中過采樣的目的類似于一種低通濾波,Stm32通過對一幀進(jìn)行16次或者8次采樣,并對采樣結(jié)果進(jìn)行“多數(shù)票決”來判斷該幀為起始位或是數(shù)據(jù)位的0或1。詳見《STM32F051x 參考手冊中文》573頁。

圖片

硬件流控制是通過硬件對UART傳輸進(jìn)行更精細(xì)的控制的手段。UART傳輸中,Stm32通過nCTS端口讀取對方的nRTS端口電平,獲知對方是否準(zhǔn)備好接受新的數(shù)據(jù),這種操作可以避免數(shù)據(jù)寄存器中未被讀出的舊數(shù)據(jù)被新數(shù)據(jù)刷新掉的情況發(fā)生。詳見《STM32F051x 參考手冊中文》604頁。

圖片

UART_HandleTypeDef是UART句柄結(jié)構(gòu)體,包含了UART運(yùn)行過程中HAL層的所有信息。

2

UART初始化三步

在介紹Stm32的HAL初始化UART之前,我們先看一下Arduino怎么初始化UART的。

圖片

Arduino使用非常簡便的一句話,*Serial.begin(波特率); *來初始化UART,這一句話包含了三個(gè)內(nèi)容:

  • UART對象——其代表我們要使用的UART外設(shè);
  • UART啟動(dòng)——其代表根據(jù)UART參數(shù)啟動(dòng)串口;
  • UART參數(shù)——其代表UART以何種配置運(yùn)行;

圖片

Stm32的HAL初始化過程也可以進(jìn)行類比:

圖片

我們還可以用填表格來理解這三步操作:

圖片

2.1

Step1-申明結(jié)構(gòu)體變量-生成表格

圖片

申明一個(gè)UART_HandleTypeDef的結(jié)構(gòu)體變量,圖中的結(jié)構(gòu)體是在main函數(shù)中聲明,推薦在main.c的頭部申明結(jié)構(gòu)體,使其成為全局變量。

圖片

2.2

Step2-配置UART參數(shù)-填寫表格

配置UART參數(shù)參數(shù)包括兩步:

圖片

第一步是要給UART_HandleTypeDef結(jié)構(gòu)體變量賦值

  • 將我們要使用的外設(shè)賦值給其instance字段。
  • 將波特率、幀長度等配合賦值給其UART_InitTypeDef初始化結(jié)構(gòu)體變量的相應(yīng)字段。

圖片

第二步是要配置與所使用的UART連接的GPIO口,因?yàn)槿魏瓮庠O(shè)想與外界交換數(shù)據(jù)都需要正確的和使用的GPIO進(jìn)行綁定。

在還未介紹的Step3中,我們需要調(diào)用HAL_UART_Init()初始化UART,HAL_UART_Init()又會(huì)調(diào)用HAL_UART_MspInit()對于單片機(jī)的Msp( MCU Specific Package 單片機(jī)的具體方案 )進(jìn)行配置,這里Msp就指具體配置哪個(gè)IO與UART進(jìn)行連接。

在HAL_UART_MspInit()中配置GPIO又需要進(jìn)行如下兩步操作:

1. 定義GPIO_InitTypeDef初始化結(jié)構(gòu)體變量作為所要初始化GPIO的配置的“暫存”。

圖片

2. 然后判斷此次調(diào)用HAL_UART_MspInit()函數(shù)的UART外設(shè),根據(jù)不同的UART外設(shè)對于相應(yīng)的GPIO和時(shí)鐘進(jìn)行如下操作:

  • 啟動(dòng)所用UART外設(shè)的時(shí)鐘。
  • 啟用所用GPIO的時(shí)鐘。
  • 配置GPIO_InitTypeDef初始化結(jié)構(gòu)體變量(變量值如上圖)。
  • 使用初始化函數(shù)初始化GPIO。
    圖片

2.3

Step3-使用函數(shù)初始化UART-提交表格

圖片

完成了UART的參數(shù)配置和IO配置之后,我們需要使用HAL_UART_Init()函數(shù)提交之前配置好的UART_HandleTypeDef結(jié)構(gòu)體變量這個(gè)“表格”,使得Stm32按照我們的參數(shù)配置、IO配置啟動(dòng)。

3

使用輪詢模式

圖片

3.1

UART通信的三種模式

UART通信有三種模式,分別為輪詢模式、中斷模式、DMA模式,本小節(jié)介紹輪詢模式通信。

如果讀者學(xué)過8位單片機(jī)的底層開發(fā),應(yīng)該能理解輪詢模式和中斷模式的區(qū)別以及中斷模式比輪詢模式在單片機(jī)任務(wù)較多時(shí)更為高效的原因。

《Mastering Stm32》一書的248頁也對兩者的區(qū)別進(jìn)行了闡述:

圖片

簡單來說,輪詢模式是內(nèi)核在規(guī)定的阻塞時(shí)間內(nèi)使用while循環(huán)讀取傳輸?shù)臉?biāo)志位,直到標(biāo)志位被置位才將數(shù)據(jù)寫入或讀出DR寄存器。

而中斷模式是傳輸完成的相關(guān)中斷發(fā)生時(shí),內(nèi)核才放下手中的工作,將數(shù)據(jù)寫入或讀出DR寄存器。少了阻塞時(shí)間內(nèi)的循環(huán)讀取因此更高效。

而DMA模式則更為高效,DMA作為內(nèi)核的二弟,當(dāng)傳輸完成中斷發(fā)生時(shí),幫助大哥將數(shù)據(jù)寫入或讀出DR寄存器,不需要打斷大哥-內(nèi)核的工作。

3.2

輪詢模式

圖片

在輪詢模式發(fā)送數(shù)據(jù)調(diào)用函數(shù)HAL_UART_Transmit() ,接收數(shù)據(jù)調(diào)用函數(shù)HAL_UART_Receive(),兩者的傳入?yún)?shù)列表,以及返回值意義相同,如下圖,摘自《description-of-stm32f0-hal-and-lowlayer-drivers-stmicroelectronics》P572頁。

圖片

下面演示兩個(gè)函數(shù)的幾種調(diào)用案例:

/* 發(fā)送字符數(shù)組 */
  char buff[2] = {'a','b'};
  HAL_UART_Transmit(&huart3,(uint8_t *)buff,
                      sizeof(buff),HAL_MAX_DELAY);
/* 發(fā)送字符串 */
  HAL_UART_Transmit(&huart3, (uint8_t*)"Hello", 
                      strlen("Hello"),HAL_MAX_DELAY);
/* 接受字符數(shù)組 */
  char readBuf[1];
  HAL_UART_Receive(&huart2, (uint8_t*)readBuf, 1, HAL_MAX_DELAY);

至此本文已經(jīng)完成了對于Stm32使用HAL初始化UART,以及在輪詢模式通信方法的闡述。

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

    關(guān)注

    2290

    文章

    11018

    瀏覽量

    362727
  • 串口通信
    +關(guān)注

    關(guān)注

    34

    文章

    1636

    瀏覽量

    56607
  • 低通濾波
    +關(guān)注

    關(guān)注

    0

    文章

    18

    瀏覽量

    16194
  • 奇偶校驗(yàn)
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    8311
  • HAL庫
    +關(guān)注

    關(guān)注

    1

    文章

    121

    瀏覽量

    6778
收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    stm32F411和hal串口輪詢方式接收丟失字節(jié)

    各位好,我串口推信三種方式輪詢,接收中斷,DMA)都使用過了,我的前兩種當(dāng)發(fā)的長度超過一定數(shù)值后就發(fā)生丟字節(jié),DMA沒有問題,我用的STM32F411,結(jié)合cube生成的工程,哪位幫
    發(fā)表于 11-06 08:52

    基于STM32F4的HAL串口UART程序的詳細(xì)資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是基于STM32F4的HAL串口UART程序的詳細(xì)資料免費(fèi)下載,中斷接收固定開頭不固定長度數(shù)據(jù)
    發(fā)表于 08-20 08:00 ?67次下載
    基于<b class='flag-5'>STM32</b>F4的<b class='flag-5'>HAL</b><b class='flag-5'>庫</b><b class='flag-5'>串口</b><b class='flag-5'>UART</b>程序的詳細(xì)資料免費(fèi)下載

    基于STM32F429HAL的CAN通信代碼

    基于STM32F429HAL的CAN通信代碼* 最近在學(xué)正點(diǎn)原子阿波羅STM32F429開發(fā)板的CAN
    發(fā)表于 12-04 19:06 ?19次下載
    基于<b class='flag-5'>STM32F429HAL</b><b class='flag-5'>庫</b>的CAN<b class='flag-5'>通信</b>代碼

    HAL STM32CubeMX--USART串口通信(一)

    簡介STM32CubeMX串口的操作,以及HAL串口的配置,基于HAL
    發(fā)表于 12-06 17:51 ?3次下載
    <b class='flag-5'>HAL</b><b class='flag-5'>庫</b> <b class='flag-5'>STM32</b>CubeMX--USART<b class='flag-5'>串口</b><b class='flag-5'>通信</b>(一)

    串口通信小試牛刀~使用STM32CubeMX+ HAL點(diǎn)亮流水燈

    STM32CubeMX與Keil MDK配合HAL完成流水燈的點(diǎn)亮。目錄一、STM32串口通信
    發(fā)表于 12-07 10:06 ?14次下載
    <b class='flag-5'>串口</b><b class='flag-5'>通信</b>小試牛刀~使用<b class='flag-5'>STM32</b>CubeMX+ <b class='flag-5'>HAL</b><b class='flag-5'>庫</b>點(diǎn)亮流水燈

    STM32CubeMX基于HAL實(shí)現(xiàn)簡單串口通信

    STM32CubeMX基于HAL實(shí)現(xiàn)簡單串口通信板子:STM32F103C8編譯工具:Keil
    發(fā)表于 12-08 12:36 ?21次下載
    <b class='flag-5'>STM32</b>CubeMX基于<b class='flag-5'>HAL</b><b class='flag-5'>庫</b>實(shí)現(xiàn)簡單<b class='flag-5'>串口</b><b class='flag-5'>通信</b>

    STM32_HALUART通信

    0x00.章索引STM32_HAL:點(diǎn)亮第一個(gè)LEDSTM32_HAL:按鍵輸入檢測STM32_HAL:簡單定時(shí)器的使用STM32_HAL:PWM輸出
    發(fā)表于 12-08 12:51 ?6次下載
    <b class='flag-5'>STM32_HAL</b>:<b class='flag-5'>UART</b><b class='flag-5'>通信</b>

    使用LL開發(fā)STM32UART基礎(chǔ)使用

    485通訊從寫程序的角度來說就是使用UART進(jìn)行通訊。(這個(gè)地方有些人會(huì)混淆,串口更多是一種通訊方式、機(jī)制,而TTL、232、485更多的是電氣相關(guān)特性)HAL
    發(fā)表于 12-08 18:21 ?14次下載
    使用LL<b class='flag-5'>庫</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>STM32</b>:<b class='flag-5'>UART</b>基礎(chǔ)使用

    HAL串口通信

    HAL入門之串口通信學(xué)習(xí)經(jīng)驗(yàn)分享
    發(fā)表于 12-16 16:58 ?5次下載
    【<b class='flag-5'>HAL</b><b class='flag-5'>庫</b>】<b class='flag-5'>串口</b><b class='flag-5'>通信</b>

    STM32 HAL CubeMX教程(五)串口通信基礎(chǔ)

    STM32 HAL CubeMX教程(五)串口通信基礎(chǔ)串口
    發(fā)表于 12-24 18:49 ?12次下載
    <b class='flag-5'>STM32</b> <b class='flag-5'>HAL</b><b class='flag-5'>庫</b> CubeMX教程(五)<b class='flag-5'>串口</b><b class='flag-5'>通信</b>基礎(chǔ)

    STM32 HAL UART 串口讀寫功能筆記

    STM32L0 HAL UART 串口讀寫功能串口發(fā)送功能:uint8_t TxData[10
    發(fā)表于 12-27 19:11 ?13次下載
    <b class='flag-5'>STM32</b> <b class='flag-5'>HAL</b><b class='flag-5'>庫</b> <b class='flag-5'>UART</b> <b class='flag-5'>串口</b>讀寫功能筆記

    STM32串口通信HAL配置中 UART_IT_xx與UART_FLAG_xx 的區(qū)別

    STM32串口通信HAL配置中 UART_IT_xx與UA
    發(fā)表于 12-28 19:05 ?2次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b><b class='flag-5'>HAL</b><b class='flag-5'>庫</b>配置中 <b class='flag-5'>UART</b>_IT_xx與<b class='flag-5'>UART</b>_FLAG_xx 的區(qū)別

    STM32 HAL串口收發(fā)如何使用

    前言 一、 HAL 串口收發(fā) 1.1 串口發(fā)送 1.2 串口接收 二、 收發(fā)同時(shí)串口卡死? 2
    的頭像 發(fā)表于 06-22 10:38 ?7862次閱讀
    <b class='flag-5'>STM32</b> <b class='flag-5'>HAL</b><b class='flag-5'>庫</b><b class='flag-5'>串口</b>收發(fā)如何使用

    STM32 HAL串口收發(fā)是如何使用的?

    STM32 HAL串口收發(fā)是如何使用的? STM32是一款高性能的微控制器,它擁有廣泛的應(yīng)用領(lǐng)域,其中包括了各種通訊應(yīng)用,如
    的頭像 發(fā)表于 10-26 17:42 ?1727次閱讀

    STM32 HAL串口同時(shí)收發(fā),接收卡死?

    HAL是針對STM32系列單片機(jī)的一套常用的高級抽象層。在HAL中,
    的頭像 發(fā)表于 10-26 17:42 ?4117次閱讀
    主站蜘蛛池模板: 五月天激情综合网 | аbt天堂资源在线官网 | 国产免费高清在线精品一区 | 精品国产一区二区三区成人 | 在线视频一区二区三区四区 | 永久免费视频网站在线观看 | 最新精品| 狠狠色狠狠色综合网 | 人人干干| 视频一区 在线 | 日韩a毛片免费全部播放完整 | 久草在线免费资源站 | 日本成人视屏 | 午夜大片在线观看 | 日本人的色道www免费一区 | 免费国产综合视频在线看 | 天天草天天爽 | 亚洲精品亚洲人成人网 | 激情综合五月 | 亚洲一二三四 | 美女用手扒开尿口给男生桶爽 | 一级aaaaaa片毛片在线播放 | 4438全国最大成人免费高清 | 天堂在线网 | 天天射天天搞 | 丁香视频在线观看播放 | 亚洲成片在线观看12345ba | 日韩午夜免费 | 色cccwww| 日日日天天射天天干视频 | 天堂网成人 | 美国一级毛片不卡无毒 | 一级毛片在播放免费 | 国内色视频 | 免费国产黄网站在线观看视频 | 国模视频在线 | 91精品国产91久久久久青草 | 午夜影院黄色片 | 久久免费99精品久久久久久 | 看全色黄大色大片免费久久 | 色播欧美 |