国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

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

使用APM32系列產(chǎn)品的經(jīng)驗(yàn)總結(jié)

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來源:21ic論壇極海半導(dǎo)體專區(qū) ? 作者:21ic論壇極海半導(dǎo)體 ? 2022-07-11 09:48 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

串口+DMA解決數(shù)據(jù)接收的難題


之前由于項(xiàng)目需要不停地利用串口接收數(shù)據(jù),剛開始的時候采用單字節(jié)中斷的方式接收判斷。但是用來做通信的時候需要不停的產(chǎn)生串口接收中斷,會嚴(yán)重影響主程序的運(yùn)行。后來采用DMA接收的方式,但是一般情況下配置的DMA都是接收指定長度的串口數(shù)據(jù),對于未知長度的串口數(shù)據(jù)接收并不適用。后來在網(wǎng)上發(fā)現(xiàn)了一種方法可以利用串口的 空閑中斷+DMA接收的方法可解決此類問題,特別適用于不需要每個接收字節(jié)都判斷的串口數(shù)據(jù)接收,下面簡單介紹一下。

思路:采用APM32E103的串口1,并配置成空閑中斷模式且使能DMA接收,并同時設(shè)置接收緩沖區(qū)和初始化DMA。當(dāng)初始化完成之后,外部給MCU發(fā)送數(shù)據(jù)的時候,假設(shè)這幀數(shù)據(jù)長度是100個字節(jié),那么在MCU中接收到一個字節(jié)的時候并不會產(chǎn)生串口中斷,而是DMA在后臺把數(shù)據(jù)全部搬運(yùn)到你指定的緩沖區(qū)里面,當(dāng)整幀數(shù)據(jù)發(fā)送完畢之后串口才會產(chǎn)生一次中斷,此時可以利用CurrDataCounterBegin = DMA_ReadDataNumber(DMA1_Channel6);計(jì)算出本次的數(shù)據(jù)接受長度,從而進(jìn)行數(shù)據(jù)處理。

關(guān)鍵代碼分析:
#include "public.h"
#ifndef __USART_H
#define __USART_H
#include "stdio.h"

volatile uint32_t CurrDataCounterBegin = 0;
#define DMA_Rec_Len 256 //定義一個256個字節(jié)的數(shù)據(jù)緩沖區(qū)。

void uartInit(void)
{
//GPIO端口設(shè)置
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
DMA_InitTypeDef DMA_InitStructure;

RCM_EnableAPB2PeriphClock((RCM_APB2_PERIPH_T)(RCM_APB2_PERIPH_GPIOA | RCM_APB2_PERIPH_USART1)); //使能USART1,GPIOA時鐘
RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_DMA1); //使能DMA傳輸
USART_DeInit(USART1);//復(fù)位串口1
//USART1_TX PA9
GPIO_InitStructure.pin = GPIO_PIN_9; //PA.9
GPIO_InitStructure.speed = GPIO_SPEED_50MHz;
GPIO_InitStructure.mode = GPIO_MODE_AF_PP; //復(fù)用推挽輸出
GPIO_Config(GPIOA, &GPIO_InitStructure); //初始化PA9

//USART1_RXA10
GPIO_InitStructure.pin = GPIO_PIN_10;
GPIO_InitStructure.mode = GPIO_MODE_IN_FLOATING;//浮空輸入
GPIO_Config(GPIOA, &GPIO_InitStructure);//初始化PA10
//USART 初始化設(shè)置
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WORD_LEN_8B;//字長為8位數(shù)據(jù)格式
USART_InitStructure.USART_StopBits = USART_STOP_BIT_1;//一個停止位
USART_InitStructure.USART_Parity = USART_PARITY_NONE;//無奇偶校驗(yàn)位
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//無硬件數(shù)據(jù)流控制
USART_InitStructure.USART_Mode = USART_MODE_TX | USART_MODE_RX; //收發(fā)模式

USART_Config(USART1, &USART_InitStructure);

USART_EnableInterrupt(USART1, USART_INT_IDLE);//開啟空閑中斷

USART_EnableDMA(USART1,USART_DMA_RX); //使能串口1 DMA接收

USART_Enable(USART1); //使能串口

// NVIC 配置
NVIC_EnableIRQRequest(DMA1_Channel6_IRQn, 3, 2);


//相應(yīng)的DMA配置
DMA_Reset(DMA1_Channel6);
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&USART1->DR;//DMA外設(shè)ADC基地址
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)DMA_Rece_Buf;//DMA內(nèi)存基地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PERIPHERAL_SRC;//數(shù)據(jù)傳輸方向,從外設(shè)讀取發(fā)送到內(nèi)存
DMA_InitStructure.DMA_BufferSize = DMA_Rec_Len;//DMA通道的DMA緩存的大小
DMA_InitStructure.DMA_PeripheralInc = DMA_PERIPHERAL_INC_DISABLE;//外設(shè)地址寄存器不變
DMA_InitStructure.DMA_MemoryInc = DMA_MEMORY_INC_ENABLE;//內(nèi)存地址寄存器遞增
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PERIPHERAL_DATA_SIZE_WOED;//數(shù)據(jù)寬度為8位
DMA_InitStructure.DMA_MemoryDataSize = DMA_MEMORY_DATA_SIZE_WOED; //數(shù)據(jù)寬度為8位
DMA_InitStructure.DMA_Mode = DMA_MODE_NORMAL;//工作在正常緩存模式
DMA_InitStructure.DMA_Priority = DMA_PRIORITY_HIGH; //DMA通道 x擁有中優(yōu)先級
DMA_InitStructure.DMA_M2M = DMA_M2MEN_ENABLE;//DMA通道x沒有設(shè)置為內(nèi)存到內(nèi)存?zhèn)鬏?br /> DMA_Init(DMA1_Channel6, &DMA_InitStructure);//根據(jù)DMA_InitStruct中指定的參數(shù)初始化DMA的通道

DMA_EnableInterrupt(DMA1_Channel6, DMA_INT_TC);
CurrDataCounterBegin = DMA_ReadDataNumber(DMA1_Channel6);

DMA_Enable(DMA1_Channel6);
}

//串口中斷函數(shù)
void USART1_IRQHandler(void) //串口1中斷服務(wù)程序
{

if(USART_ReadStatusFlag(USART1, USART_FLAG_IDLE) != RESET)//接收中斷(接收到的數(shù)據(jù)必須是0x0d 0x0a結(jié)尾)
{
USART_RxData(USART1);//讀取數(shù)據(jù) 注意:這句必須要,否則不能夠清除中斷標(biāo)志位。
Usart1_Rec_Cnt = DMA_Rec_Len-CurrDataCounterBegin(DMA1_Channel6); //算出接本幀數(shù)據(jù)長度

//幀數(shù)據(jù)處理函數(shù)
printf ("The lenght:%d ",Usart1_Rec_Cnt);
printf ("The data: ");
USART_TxData(DMA_Rece_Buf,Usart1_Rec_Cnt);
USART_ClearIntFlag(USART1, USART_FLAG_IDLE); //清除中斷標(biāo)志
DMA_Enable(DMA1_Channel6); //恢復(fù)DMA指針,等待下一次的接收
}

原文標(biāo)題:APM32芯得 EP.03 | APM32E103串口+DMA解決數(shù)據(jù)接收的困擾

文章出處:【微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

審核編輯:彭靜

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

    關(guān)注

    147

    文章

    18925

    瀏覽量

    398283
  • dma
    dma
    +關(guān)注

    關(guān)注

    3

    文章

    582

    瀏覽量

    105935
  • 串口數(shù)據(jù)
    +關(guān)注

    關(guān)注

    1

    文章

    34

    瀏覽量

    14272

原文標(biāo)題:APM32芯得 EP.03 | APM32E103串口+DMA解決數(shù)據(jù)接收的困擾

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

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

    極海APM32F427系列MCU榮獲IEC 60730/60335功能安全認(rèn)證

    近日,極海APM32F427系列工業(yè)級高性能拓展型MCU,成功通過IEC 60730/60335功能安全認(rèn)證。這標(biāo)志著該系列產(chǎn)品在功能安全設(shè)計(jì)上已達(dá)到國際領(lǐng)先水平,能夠?yàn)榭蛻籼峁┓螩lass B標(biāo)準(zhǔn)的功能安全庫,并助力其高效縮
    的頭像 發(fā)表于 02-09 09:15 ?758次閱讀
    極海<b class='flag-5'>APM</b>32F427<b class='flag-5'>系列</b>MCU榮獲IEC 60730/60335功能安全認(rèn)證

    博通Subminiature LED Lamps系列產(chǎn)品深度解析

    博通Subminiature LED Lamps系列產(chǎn)品深度解析 在電子設(shè)備的設(shè)計(jì)領(lǐng)域,LED燈作為重要的組件,其性能和特性對整個系統(tǒng)的表現(xiàn)有著關(guān)鍵影響。博通(Broadcom)的HLMP
    的頭像 發(fā)表于 12-30 15:35 ?208次閱讀

    Amphenol Socapex USBFIELD? 系列產(chǎn)品:滿足嚴(yán)苛環(huán)境的 USB 連接解決方案

    Amphenol Socapex USBFIELD? 系列產(chǎn)品:滿足嚴(yán)苛環(huán)境的 USB 連接解決方案 在電子設(shè)備的連接領(lǐng)域,面對復(fù)雜惡劣的環(huán)境,可靠且高性能的 USB 連接方案至關(guān)重要
    的頭像 發(fā)表于 12-12 09:35 ?347次閱讀

    Cortex-M0+通用 MCU CW32F系列產(chǎn)品介紹

    推出,該系列可提供TSSOP24、TSSOP20和QFN20等封裝。CW32F系列產(chǎn)品已全面實(shí)現(xiàn) -40℃ ~105℃超寬溫度范圍和 1.65V~5.5V 超寬工作電壓,面向最廣泛的各種基礎(chǔ)應(yīng)用,開始
    發(fā)表于 12-12 06:22

    Amphenol GuardXcel?電纜接頭系列產(chǎn)品解析

    在工業(yè)電子領(lǐng)域,電纜接頭作為連接電纜與設(shè)備的關(guān)鍵部件,其性能直接影響到整個系統(tǒng)的穩(wěn)定性和可靠性。Amphenol的GuardXcel?電纜接頭系列產(chǎn)品,憑借其卓越的性能和廣泛的適用性,在眾多工業(yè)應(yīng)用中脫穎而出。今天,我們就來深入剖析這個系列
    的頭像 發(fā)表于 12-09 13:39 ?383次閱讀

    在極海APM32系列MCU中如何把代碼重定位到SDRAM運(yùn)行

    在有些情況下,我們想要把代碼放到SDRAM運(yùn)行。下面介紹在APM32的MCU中,如何把代碼重定位到SDRAM運(yùn)行。對于不同APM32系列的MCU,方法都是一樣的。
    的頭像 發(fā)表于 11-04 09:14 ?5179次閱讀
    在極海<b class='flag-5'>APM32</b><b class='flag-5'>系列</b>MCU中如何把代碼重定位到SDRAM運(yùn)行

    求助,關(guān)于5.0.2 + serial_v1 + apm32f103vet6串口讀一幀問題求解

    第一次使用rtt,第一次來這里,先給各位前輩問個好,祝大家年年加薪,身體杠杠! 開始使用v2版本,編譯通過后下載沒反應(yīng),可能針對極海APM32適配還不完善,就使用了v1版本,官方提供的歷程可以正常
    發(fā)表于 10-10 07:11

    安世半導(dǎo)體推出全新線性LED驅(qū)動器系列產(chǎn)品

    安世半導(dǎo)體近期推出了12/16/24通道、每通道100mA驅(qū)動能力的線性LED驅(qū)動系列產(chǎn)品。該系列產(chǎn)品集成芯片級ASIL-B功能安全,滿足車燈系統(tǒng)針對功能安全日漸增加的高要求,非常適用于車外照明中的轉(zhuǎn)向燈、剎車燈、貫穿式尾燈,以及日間行車燈等信號燈和裝飾燈。
    的頭像 發(fā)表于 09-26 17:35 ?2258次閱讀
    安世半導(dǎo)體推出全新線性LED驅(qū)動器<b class='flag-5'>系列產(chǎn)品</b>

    極海APM32E030/F402系列MCU通過IEC 60730/60335功能安全認(rèn)證

    近日,極海APM32E030系列基礎(chǔ)拓展型MCU、APM32F402系列高性能高性價(jià)比MCU通過IEC 60730/60335認(rèn)證,可提供符合Class B標(biāo)準(zhǔn)的功能安全庫,助力客戶快
    的頭像 發(fā)表于 08-29 13:57 ?1183次閱讀
    極海<b class='flag-5'>APM</b>32E030/F402<b class='flag-5'>系列</b>MCU通過IEC 60730/60335功能安全認(rèn)證

    新潔能推出增強(qiáng)型N溝道MOSFET系列產(chǎn)品

    新潔能研發(fā)團(tuán)隊(duì)溝槽型工藝平臺推出耐壓30V 1mΩ級別增強(qiáng)型N溝道MOSFET 系列產(chǎn)品
    的頭像 發(fā)表于 08-22 18:02 ?2013次閱讀
    新潔能推出增強(qiáng)型N溝道MOSFET<b class='flag-5'>系列產(chǎn)品</b>

    Kubernetes集群運(yùn)維經(jīng)驗(yàn)總結(jié)

    本文總結(jié)了我和團(tuán)隊(duì)在K8s生產(chǎn)環(huán)境中遇到的10個最常見且最致命的坑,每個坑都配有真實(shí)案例、詳細(xì)分析和可執(zhí)行的解決方案。
    的頭像 發(fā)表于 08-18 11:23 ?639次閱讀

    千方科技推出AI視頻充電樁系列產(chǎn)品

    近年來,充電基礎(chǔ)設(shè)施保有量快速增長,運(yùn)營管理過程中普遍存在充電樁利用率低、設(shè)備維護(hù)困難等問題。千方科技推出AI視頻充電樁系列產(chǎn)品,從感知系統(tǒng)、控制系統(tǒng)到運(yùn)維體系實(shí)現(xiàn)智能化升級,助力充電場站實(shí)現(xiàn)運(yùn)營增效。
    的頭像 發(fā)表于 07-26 14:47 ?2188次閱讀

    基于極海APM32E103 MCU的CoreMark測試方法

    CoreMark跑分可以了解到MCU的算力。下面以APM32E103芯片和Keil為例,介紹一下如何在APM32上面運(yùn)行CoraMark測試。CoreMark需要定時器用于計(jì)時,還需要用串口來打印輸出測試結(jié)果。
    的頭像 發(fā)表于 06-12 09:42 ?1440次閱讀
    基于極海<b class='flag-5'>APM</b>32E103 MCU的CoreMark測試方法

    先輯半導(dǎo)體HPM6E00系列產(chǎn)品能用來做EtherCAT的主站嗎

    雖然明確說明了先輯半導(dǎo)體HPM6E00系列產(chǎn)品能用來做EtherCAT的從站,但它可以用來做主站嗎,還是說必須用其他芯片做主站呢
    發(fā)表于 03-16 10:16

    GaN E-HEMTs的PCB布局經(jīng)驗(yàn)總結(jié)

    GaN E-HEMTs的PCB布局經(jīng)驗(yàn)總結(jié)
    的頭像 發(fā)表于 03-13 15:52 ?1349次閱讀
    GaN E-HEMTs的PCB布局<b class='flag-5'>經(jīng)驗(yàn)總結(jié)</b>