18video性欧美19sex,欧美高清videosddfsexhd,性少妇videosexfreexxx片中国,激情五月激情综合五月看花,亚洲人成网77777色在线播放

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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


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

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


//相應的DMA配置
DMA_Reset(DMA1_Channel6);
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&USART1->DR;//DMA外設ADC基地址
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)DMA_Rece_Buf;//DMA內(nèi)存基地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PERIPHERAL_SRC;//數(shù)據(jù)傳輸方向,從外設讀取發(fā)送到內(nèi)存
DMA_InitStructure.DMA_BufferSize = DMA_Rec_Len;//DMA通道的DMA緩存的大小
DMA_InitStructure.DMA_PeripheralInc = DMA_PERIPHERAL_INC_DISABLE;//外設地址寄存器不變
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沒有設置為內(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中斷服務程序
{

if(USART_ReadStatusFlag(USART1, USART_FLAG_IDLE) != RESET)//接收中斷(接收到的數(shù)據(jù)必須是0x0d 0x0a結(jié)尾)
{
USART_RxData(USART1);//讀取數(shù)據(jù) 注意:這句必須要,否則不能夠清除中斷標志位。
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); //清除中斷標志
DMA_Enable(DMA1_Channel6); //恢復DMA指針,等待下一次的接收
}

原文標題: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)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    147

    文章

    18408

    瀏覽量

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

    關(guān)注

    3

    文章

    577

    瀏覽量

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

    關(guān)注

    0

    文章

    34

    瀏覽量

    14217

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

    極海APM32E030/F402系列MCU通過IEC 60730/60335功能安全認證

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

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

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

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

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

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

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

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

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

    致真精密儀器探針臺系列產(chǎn)品介紹

    致真精密儀器探針臺系列產(chǎn)品介紹
    的頭像 發(fā)表于 02-18 10:47 ?736次閱讀
    致真精密儀器探針臺<b class='flag-5'>系列產(chǎn)品</b>介紹

    致真精密儀器低溫設備系列產(chǎn)品介紹

    致真精密儀器低溫設備系列產(chǎn)品介紹
    的頭像 發(fā)表于 02-18 10:45 ?653次閱讀
    致真精密儀器低溫設備<b class='flag-5'>系列產(chǎn)品</b>介紹

    安科瑞APM產(chǎn)品及其平臺集成在智能電力管理中的應用研究

    安科瑞 程瑜 187 0211 2087 摘要 本文研究了安科瑞APM產(chǎn)品及其平臺集成在智能電力管理中的應用。通過對APM系列產(chǎn)品的功能特點、技術(shù)優(yōu)勢以及在工業(yè)、商業(yè)和公共設施等領(lǐng)域的
    的頭像 發(fā)表于 02-13 14:52 ?667次閱讀
    安科瑞<b class='flag-5'>APM</b><b class='flag-5'>產(chǎn)品</b>及其平臺集成在智能電力管理中的應用研究

    源杰科技推出50G EML+SOA批量系列產(chǎn)品

    下一代高速PON網(wǎng)絡設計。 此次推出的50G EML+SOA系列產(chǎn)品,是基于源杰科技在10G 1577nm EML+SOA大規(guī)模量產(chǎn)中積累的豐富經(jīng)驗,經(jīng)過精心研發(fā)而成。該系列產(chǎn)品不僅滿足了當前市場對高速、大功率PON光芯片的需求
    的頭像 發(fā)表于 02-12 10:23 ?1109次閱讀

    N32A455xxL8系列產(chǎn)品簡介

    電子發(fā)燒友網(wǎng)站提供《N32A455xxL8系列產(chǎn)品簡介.pdf》資料免費下載
    發(fā)表于 01-22 16:37 ?0次下載
    N32A455xxL8<b class='flag-5'>系列產(chǎn)品</b>簡介

    N32G451系列產(chǎn)品簡介

    電子發(fā)燒友網(wǎng)站提供《N32G451系列產(chǎn)品簡介.pdf》資料免費下載
    發(fā)表于 01-22 15:34 ?1次下載
    N32G451<b class='flag-5'>系列產(chǎn)品</b>簡介

    PIC32CM MC00系列產(chǎn)品簡介

    電子發(fā)燒友網(wǎng)站提供《PIC32CM MC00系列產(chǎn)品簡介.pdf》資料免費下載
    發(fā)表于 01-21 14:06 ?0次下載
    PIC32CM MC00<b class='flag-5'>系列產(chǎn)品</b>簡介

    上海貝嶺150V SGT MOSFET系列產(chǎn)品介紹

    上海貝嶺推出150V SGT MOSFET系列產(chǎn)品。貝嶺150V SGT系列產(chǎn)品采用業(yè)界先進工藝,使得器件具有良好的柵極漏電流IGSS性能;采用深溝槽、多層外延襯底以及多重浮空環(huán)終端結(jié)構(gòu),使得器件
    的頭像 發(fā)表于 01-03 10:19 ?1721次閱讀
    上海貝嶺150V SGT MOSFET<b class='flag-5'>系列產(chǎn)品</b>介紹

    怎么用Clion開發(fā)APM32

    APM32 官方 SDK 中提供了三種開發(fā)環(huán)境:Keil、IAR 和 Eclipse。不否認這三種環(huán)境的強大,但是在 AI 時代做嵌入式開發(fā),用這三種環(huán)境就顯得有點不夠優(yōu)雅了。本篇文章主要介紹怎么用
    的頭像 發(fā)表于 12-17 09:19 ?2051次閱讀
    怎么用Clion開發(fā)<b class='flag-5'>APM32</b>