国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32 寄存器配置筆記——USART配置中斷接收乒乓緩存處理

這篇具有很好參考價值的文章主要介紹了STM32 寄存器配置筆記——USART配置中斷接收乒乓緩存處理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、概述

? ? ? ?本文主要介紹如何配置USART接收中斷,使用乒乓緩存的設(shè)計接收數(shù)據(jù)并將其回顯在PC 串口工具上。以stm32f10為例,配置USART1 9600波特率。具體配置參考上一章節(jié)STM32 寄存器配置筆記——USART配置 打印。

? ? ? ? 乒乓緩存的設(shè)計應(yīng)用場景:當(dāng)后面的處理單元在工作期間,前面的 buffer 的內(nèi)容不能被釋放。或者,在處理單元工作期間, buffer 的特定地址的內(nèi)容不止被訪問一次。優(yōu)點是相比全部寫完再讀的方式,可以節(jié)約讀寫時序。

二、中斷優(yōu)先級


? ? ? ?STM32 的中斷向量具有兩個屬性,一個為搶占屬性,另一個為響應(yīng)屬性,其屬性編號越小,表明它的優(yōu)先級別越高。即搶占優(yōu)先級和響應(yīng)優(yōu)先級。

搶占
搶占,是指打斷其他中斷的屬性,即因為具有這個屬性會出現(xiàn)嵌套中斷(在執(zhí)行中斷服務(wù)函數(shù)A 的過程中被中斷B 打斷,執(zhí)行完中斷服務(wù)函數(shù)B 再繼續(xù)執(zhí)行中斷服務(wù)函數(shù)A),搶占屬性由NVIC_IRQChannelPreemptionPriority 的參數(shù)配置。

響應(yīng)
響應(yīng)屬性則應(yīng)用在搶占屬性相同的情況下,當(dāng)兩個中斷向量的搶占優(yōu)先級相同時,如果兩個中斷同時到達, 則先處理響應(yīng)優(yōu)先級高的中斷, 響應(yīng)屬性由NVIC_IRQChannelSubPriority 參數(shù)配置。
?

三、配置流程

? ? ? ? 1)使能RXNE中斷

? ? ? ? 接收緩沖區(qū)非空中斷使能,通過MY_NVIC_init函數(shù)配置中斷的搶占優(yōu)先級和響應(yīng)優(yōu)先級為3(這里可以隨意配置本章重點不在這)。最后一個參數(shù)表示分組為2。即有2位用來表示搶占優(yōu)先級,2位用來表示響應(yīng)優(yōu)先級。

    USART1->CR1 |= 1 << 5;                                // enable RXNE interrupt 
	MY_NVIC_Init(3,3,USART1_IRQn,2);                      // 2bit PreemptionPriority 3 2bit SubPriority 3

stm32 usart1 接收緩存地址,stm32,筆記,嵌入式硬件,c語言

? ? ? ? 2)編寫串口中斷函數(shù)

? ? ? ? USART1_IRQHandler是在啟動文件里定義的只要有串口中斷便會跑進來。查詢狀態(tài)寄存器USART_SR的RXNE位為1則表示收到數(shù)據(jù)可以讀出。此時從USART_DR寄存器讀取數(shù)據(jù)。

stm32 usart1 接收緩存地址,stm32,筆記,嵌入式硬件,c語言

stm32 usart1 接收緩存地址,stm32,筆記,嵌入式硬件,c語言

stm32 usart1 接收緩存地址,stm32,筆記,嵌入式硬件,c語言

stm32 usart1 接收緩存地址,stm32,筆記,嵌入式硬件,c語言

? ? ? 三、乒乓緩存設(shè)計

? ? ? ? ?1)數(shù)據(jù)結(jié)構(gòu)定義

typedef struct
{
    u8 USART_RX_BUF[USART_REC_LEN];
	u16 len;
} USART_DATA;

typedef struct
{
   USART_DATA stUartFifo[2];
   u8 curRecFifo;
} USART_HANDLE;

static USART_DATA *p_cur_Usart1_Handle = NULL;
static USART_DATA *p_cur_Data_ProcessingHandle = NULL;
static USART_HANDLE g_Usart1Handle;

uin16 needPro = 0;

? ? ? ? 2)乒乓緩存初始化?

void init_usart_handle(void)
{
	memset((u8*)&g_Usart1Handle, 0, sizeof(USART_HANDLE));
    p_cur_Usart1_Handle = &g_Usart1Handle.stUartFifo[0];
}

? ? ? ? 3)乒乓緩存接收

void USART1_IRQHandler(void)
{
    if(USART1->SR&(1<<5))
	{
		p_cur_Usart1_Handle->USART_RX_BUF[p_cur_Usart1_Handle->len++] = USART1->DR;
	}
}

? ? ? ? ?4)乒乓緩存切換

? ? ? ? 這里是以每收到一幀完整幀的數(shù)據(jù)都是以0x0d 0x0a結(jié)尾的數(shù)據(jù)為例。收到一幀完整幀將當(dāng)前乒乓緩存A切換為處理,乒乓緩存B切換為接收。

void change_curFifo(void)
{
    u16 len = p_cur_Usart1_Handle->len;
	if (len >= 2)
	{
		if (p_cur_Usart1_Handle->USART_RX_BUF[len - 2] == 0x0d 
			&& p_cur_Usart1_Handle->USART_RX_BUF[len - 1] == 0x0a)
		{
			printf("curFifo:%d len:%d\r\n", g_Usart1Handle.curRecFifo, len);
			p_cur_Data_ProcessingHandle = p_cur_Usart1_Handle;
			g_Usart1Handle.curRecFifo++;
			p_cur_Usart1_Handle = &g_Usart1Handle.stUartFifo[g_Usart1Handle.curRecFifo % 2];
			p_cur_Usart1_Handle->len = 0;
            needPro = 1;
		}

	}
}

? ? ? ? 5)乒乓緩存處理

? ? ? ? 打印接收內(nèi)容。

void data_processing(void)
{
    if (needPro)
	{
        needPro = 0;
		p_cur_Data_ProcessingHandle->USART_RX_BUF[p_cur_Data_ProcessingHandle->len] = 0;
	    printf("func:%s dat:%s\r\n", __func__, p_cur_Data_ProcessingHandle->USART_RX_BUF);
	}
}

? ? ? 6)調(diào)用如下

? ? ? 主循環(huán)一直輪詢是否需要切換乒乓緩存以及是否存在數(shù)據(jù)待處理。

stm32 usart1 接收緩存地址,stm32,筆記,嵌入式硬件,c語言文章來源地址http://www.zghlxwxcb.cn/news/detail-828841.html

到了這里,關(guān)于STM32 寄存器配置筆記——USART配置中斷接收乒乓緩存處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【明解STM32】中斷系統(tǒng)理論基礎(chǔ)知識篇之中斷寄存器功能原理

    【明解STM32】中斷系統(tǒng)理論基礎(chǔ)知識篇之中斷寄存器功能原理

    目錄 一、前言 二、寄存器概述 三、NVIC寄存器組 四、SCB寄存器組 五、中斷屏蔽寄存器組 六、總結(jié) ????????在之前的STM32的中斷系統(tǒng)理論基礎(chǔ)知識之基本原理及NVIC中,分別中斷的基本原理,中斷的管理機制和中斷的處理流程進行了較為詳細(xì)的論述,讀者通過全篇的閱讀了

    2024年02月16日
    瀏覽(33)
  • 學(xué)習(xí)素材之USART篇——通過使用STM32與ESP8266(esp-01s)連接阿里云系列操作來了解USART協(xié)議和寄存器操作

    學(xué)習(xí)素材之USART篇——通過使用STM32與ESP8266(esp-01s)連接阿里云系列操作來了解USART協(xié)議和寄存器操作

    目錄 USART詳解 一、串口通訊協(xié)議簡介 串口通訊的物理層 串口通訊的協(xié)議層 二、STM32 的 USART 簡介 USART功能概述 功能引腳 三、與USART有關(guān)的寄存器 USART寄存器地址映像? 四、USART寄存器描述 1、USART狀態(tài)控制器(USART_SR) 2、數(shù)據(jù)寄存器(USART_DR) 3、波特比率寄存器(USART_BRR) 4、控

    2024年02月16日
    瀏覽(33)
  • 【STM32學(xué)習(xí)】定時器寄存器配置、功能工作過程詳解

    【STM32學(xué)習(xí)】定時器寄存器配置、功能工作過程詳解

    STM32-定時器詳解 STM32個人筆記-定時器 本文針對STM32F103系列單片機的定時器進行介紹。 主要是其常用功能的工作流程、以及寄存器的對應(yīng)配置。 該圖清晰的表明了各種定時器的參數(shù)與功能。其中,基礎(chǔ)定時器基本上就只有最簡單的計數(shù)到了然后觸發(fā)中斷的功能;通用和高級定

    2024年02月15日
    瀏覽(22)
  • STM32-串口通信波特率計算以及寄存器的配置詳解

    STM32-串口通信波特率計算以及寄存器的配置詳解

    處理器與外部設(shè)備通信的兩種方式 并行通信 傳輸原理:數(shù)據(jù)各個位同時傳輸。 優(yōu)點:速度快 缺點:占用引腳資源多 串行通信 傳輸原理:數(shù)據(jù)按位順序傳輸 優(yōu)點:占用引腳資源少 缺點:速度相對較慢 按照數(shù)據(jù)傳送方向,分為: 單工 :數(shù)據(jù)傳輸只支持?jǐn)?shù)據(jù)在一個方向上傳輸

    2024年02月05日
    瀏覽(29)
  • 野火霸天虎 STM32F407 學(xué)習(xí)筆記_2 寄存器介紹

    野火霸天虎 STM32F407 學(xué)習(xí)筆記_2 寄存器介紹

    雖然正式編程沒有必要用寄存器編程,通常都是庫函數(shù)或者 hal 庫。但是還是有必要學(xué)一下原理的。 寄存器映射 芯片視圖如下。 絲?。盒酒嫌〉男畔ⅰP吞?,內(nèi)核,生產(chǎn)批次等。 引腳:左上角是有小圓點的,從左上-左下-右下-右上逆時針看?;蛘呷绻麤]有小圓點,把絲印

    2024年02月06日
    瀏覽(56)
  • 【DRV8323】電機驅(qū)動芯片寄存器配置指南,通過STM32F407的SPI通信配置

    【DRV8323】電機驅(qū)動芯片寄存器配置指南,通過STM32F407的SPI通信配置

    筆者計劃使用一塊使用到STM32F407控制芯片與DRV8323s驅(qū)動芯片的板子,驅(qū)動BLDC。了解到需要使用SPI通信來配置DRV8323s驅(qū)動芯片,配置過程中涉及DRV8323數(shù)據(jù)手冊中提及的幾個寄存器,故寫此文做個記錄。 另外,DRV8323芯片和DRV8302、DRV8303、DRV8353都有極大的相似之處,可以相互參考

    2024年02月02日
    瀏覽(90)
  • stm32的BRR寄存器和BSRR寄存器

    stm32的BRR寄存器和BSRR寄存器

    1、BRR--- ? bit ? RESET(置0)? register?? //高16位無,低16位置1為0,不能寫1 2 、BSRR--- ? bit ? SET(設(shè)置1或0) ? ? ? register?? //低16位設(shè)置1為0 BSRR:用于低16位的作用是讓指定的IO口置1;而高16位的作用是讓指定的IO口置0。 ?

    2024年02月11日
    瀏覽(30)
  • STM32之寄存器

    STM32之寄存器

    在學(xué)習(xí)STM32之前有必要了解一下ARM架構(gòu),以下相關(guān)ARM架構(gòu)的知識來自百度百科?:? ARM架構(gòu),曾稱進階精簡指令集機器(Advanced?RISC?Machine)更早稱作Acorn RISC Machine,是一個32位精簡指令集(RISC)架構(gòu)。還有基于ARM設(shè)計的派生產(chǎn)品,重要產(chǎn)品包括Marvell的XScale架構(gòu)和德州儀器的

    2024年02月22日
    瀏覽(24)
  • STM32寄存器點亮LED燈

    STM32寄存器點亮LED燈

    ?這個燈是 PB5引腳 看原理圖可以看出 讓GPIOB5輸出低電平 就能點亮 那么我們得讓 打開控制GPIOB5的時鐘 讓GPIOB5?輸出模式 讓GPIOB5低電平 時鐘就相當(dāng)于一個閥門開關(guān),或者理解成水龍頭,你打開了 才有水出來,也就是你打開才能工作。 看中文參考手冊 系統(tǒng)架構(gòu) 找到你的GPIO

    2024年02月07日
    瀏覽(35)
  • STM32 入門 —— 寄存器與 GPIO

    STM32 入門 —— 寄存器與 GPIO

    STM32 總線構(gòu)圖: 什么是寄存器 根據(jù)百度百科介紹,寄存器是中央處理器內(nèi)的組成部分。寄存器是有限存貯容量的高速存貯部件,它們可用來暫存指令、數(shù)據(jù)和地址。簡單來說,寄存器就是存放東西的東西,存放的東西是指令、數(shù)據(jù)或地址 存放數(shù)據(jù)的寄存器最容易理解,不同

    2024年02月04日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包