色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

STM8L051F3的DMA相關(guān)知識(shí)

汽車電子技術(shù) ? 來源:物聯(lián)網(wǎng)IoT開發(fā) ? 作者:光神 ? 2023-02-14 09:42 ? 次閱讀

本文介紹STM8L051F3的DMA相關(guān)知識(shí)。內(nèi)容分為以下幾部分:

  • DMA簡(jiǎn)介
  • DMA傳輸ADC數(shù)據(jù)

DMA(Direct memory access):直接內(nèi)存存儲(chǔ)。DMA可以提高外設(shè)和內(nèi)存以及內(nèi)存到內(nèi)存直接的傳輸速率,數(shù)據(jù)能不經(jīng)過CPU任何的參與快速地移動(dòng),這樣可以節(jié)省CPU去處理其他事情。以STM8L051F3為例,它的DMA控制器一共有4個(gè)人通道,每個(gè)通道專門用于從一個(gè)或多個(gè)外設(shè)內(nèi)存訪問請(qǐng)求,它也能仲裁DMA請(qǐng)求的優(yōu)先級(jí)。DMA的主要特點(diǎn)如下:

  • 4個(gè)通道在多個(gè)外設(shè)之間共享
  • 數(shù)據(jù)傳輸可以從外設(shè)到內(nèi)存、內(nèi)存到外設(shè)、內(nèi)存到內(nèi)存
  • 硬件/軟件可以根據(jù)每個(gè)通道的優(yōu)先級(jí)進(jìn)行仲裁
  • 編程傳輸數(shù)據(jù)量:最多達(dá)255個(gè)數(shù)據(jù)塊(字節(jié)或字)
  • 遞增和遞減尋址模式
  • 可硬件和軟件編程通道優(yōu)先級(jí)
  • 在半發(fā)送和發(fā)送結(jié)束可選擇中斷
  • 可軟件編程發(fā)送數(shù)據(jù)大?。?位或16位
  • 通道請(qǐng)求直接的優(yōu)先級(jí):可軟件編程(非常高、高、中、低)或在相同的情況下硬件可編程
  • 軟件觸發(fā)器也支持內(nèi)存通道,取決于硬件配置
  • 兩個(gè)標(biāo)志位(DMA半傳輸,DMA傳輸完成)對(duì)每個(gè)通道的單個(gè)中斷請(qǐng)求進(jìn)行邏輯上的或
  • 循環(huán)緩沖區(qū)管理(自動(dòng)裝載模式)
  • 掛起和重新開始DMA發(fā)送能力
  • 運(yùn)行在低功耗模式能力(WFI或WFE)

DMA模塊的框圖如下:

圖片

DMA傳輸。一個(gè)事件之后,外設(shè)發(fā)送一個(gè)請(qǐng)求信號(hào)到DMA控制器,DMA控制器根據(jù)通道的優(yōu)先級(jí)來對(duì)請(qǐng)求進(jìn)行處理,一旦DMA控制器訪問外設(shè),DMA控制器就會(huì)發(fā)送一個(gè)應(yīng)答給外設(shè),如果外設(shè)沒有其他等待的請(qǐng)求,得到DMA控制器的應(yīng)答后就會(huì)釋放它的請(qǐng)求信號(hào)。

DMA通道。4個(gè)通道:3個(gè)普通通道(通道0、通道1、通道2)和一個(gè)內(nèi)存通道(通道3)。普通通道處理位于固定地址的外設(shè)寄存器和一個(gè)自動(dòng)遞增/遞減指針指向的內(nèi)存地址范圍之間的數(shù)據(jù)傳輸。內(nèi)存通道也是一個(gè)普通通道,但是它可以處理兩個(gè)內(nèi)存指針指向的內(nèi)存地址之間的數(shù)據(jù)傳輸。

可編程的數(shù)據(jù)大小。發(fā)送的數(shù)據(jù)大小(8位或16位)可以通過DMA_CXSPR寄存器的TSIZE位來控制(當(dāng)運(yùn)行在16位模式是,系統(tǒng)處理字節(jié)存儲(chǔ)地址在遞增或遞減模式,目標(biāo)和源指針必須包含MSB地址)。配置成16位模式,傳輸由4個(gè)連續(xù)的8位讀寫操作:

  • 從源數(shù)據(jù)的偶地址讀取MSB
  • 從源數(shù)據(jù)的奇地址讀取LSB
  • 往目標(biāo)的偶地址寫入MSB數(shù)據(jù)
  • 往目標(biāo)的奇地址寫入LSB數(shù)據(jù)

為了保證數(shù)據(jù)的連貫性,兩個(gè)讀操作和兩個(gè)寫操作是不可分割的。

指針增量。在內(nèi)存到外設(shè)或外設(shè)到內(nèi)存?zhèn)鬏斊陂g,每次傳輸后內(nèi)存指針會(huì)自動(dòng)地遞增或遞減,這取決于DMA_CXCR寄存器的MINCDEC位,而外設(shè)的地址是固定的。

通道配置步驟。可根據(jù)以下步驟配置DMA的通道x(x為通道號(hào)):

1)在DMA_CXPARL/H寄存器設(shè)置外設(shè)寄存器地址

2)在DMA_CXPARH/L和DMA_CXM0ARH/L寄存器設(shè)置內(nèi)存地址

3)在DMA_CXNDTR寄存器配置發(fā)送數(shù)據(jù)的數(shù)量

4)在DMA_CXSPR寄存器的PL[1:0]位配置通道優(yōu)先級(jí)

5)在DMA_CXCR寄存器配置數(shù)據(jù)傳輸方向、循環(huán)模式、內(nèi)存遞增/遞減模式、發(fā)送數(shù)據(jù)大小、在半傳輸或傳輸完成中斷等

6)在DMA_CXCR寄存器設(shè)置EN位激活通道

7)在所有通道配置完成后,配置DMA_GCSR寄存器GEN位使能DMA

其他的循環(huán)模式、內(nèi)存到內(nèi)存模式、DMA傳輸暫停、等相關(guān)的詳細(xì)說明可以參考官方手冊(cè)RM0031的第13章內(nèi)容。DMA1(STM8L051F3的DMA外設(shè)是DMA1)通道請(qǐng)求映射如下:

圖片

2、 DMA傳輸ADC數(shù)據(jù)

2.1 DMA配置

本小節(jié)介紹通過ADC采集電壓數(shù)據(jù),通過DMA把數(shù)據(jù)轉(zhuǎn)送到內(nèi)存,然后設(shè)置TIM3_CH1(接的是PB1,也就是LED1)為PWM1模式,再通過DMA把內(nèi)存中ADC的數(shù)據(jù)傳送到TIM3的CCR1寄存器上,實(shí)現(xiàn)根據(jù)ADC采集電壓的變化來控制LED1的亮度。

實(shí)驗(yàn)的過程可以理解為:外設(shè)--DMA--內(nèi)存--DMA--外設(shè)。實(shí)驗(yàn)使用三個(gè)外設(shè)功能:

  • ADC1--配置ADC1_CH22,連續(xù)轉(zhuǎn)換模式,12位分辨率,使用DMA通道1(外設(shè)到內(nèi)存)
  • TIM3--配置TIM3_CH1為PWM1模式,使用通道0(內(nèi)存到外設(shè))
  • DMA--配置通道0與通道1的模式、參數(shù)以及使能

使用的例程:STM8L051F3_12_DMA,ADC的配置步驟如下:

1)使能ADC1外設(shè)時(shí)鐘

2)初始化ADC1通道22(PD0)IO口為浮空輸入模式

3)初始化ADC1:連續(xù)轉(zhuǎn)換模式,12位分辨率,ADC時(shí)鐘2分頻

4)配置ADC低速通道,采樣周期384

5)使能ADC1

6)使能ADC1通道22

DMA的配置步驟如下(包括ADC-->內(nèi)存與內(nèi)存-->TIM3):

1)使能DMA1外設(shè)時(shí)鐘

2)映射ADC1到DMA通道1

3)DMA初始化:通道1、內(nèi)存地址BUFFER_ADDRESS、外設(shè)地址ADC1_DR_ADDRESS、數(shù)據(jù)大小BUFFER_SIZE、傳輸方向外設(shè)到內(nèi)存、DMA模式循環(huán)、內(nèi)存增長(zhǎng)模式增長(zhǎng)、DMA優(yōu)先級(jí)高、內(nèi)存數(shù)據(jù)大小半字

4)DMA初始化:通道0、內(nèi)存地址BUFFER_ADDRESS、外設(shè)地址TIM3_CCR1_ADDRESS、數(shù)據(jù)大小BUFFER_SIZE、傳輸方向內(nèi)存到外設(shè)、DMA模式循環(huán)、內(nèi)存增長(zhǎng)模式增長(zhǎng)、DMA優(yōu)先級(jí)高、內(nèi)存數(shù)據(jù)大小半字

5)使能DMA1通道1

6)使能DMA1通道0

7)使能DMA1

TIM3配置(配置TIM3_CH1為PWM輸出)步驟如下:

1)使TIM3外設(shè)時(shí)鐘

2)TIM3基本配置:時(shí)鐘分頻1、向上計(jì)數(shù)、周期0xFFF

3)配置TIM3的通道1作為PWM輸出

4)使能TIM3

5)配置TIM3_CH1(PB1)的GPIO

6)使能TIM3通道1的PWM輸出

2.2 例程介紹

所有的函數(shù)實(shí)現(xiàn)都在main.c文件中,ADC配置函數(shù)如下:

static void ADC_Config ( void**)**

{

/* 使能 ADC1 時(shí)鐘 */

CLK_PeripheralClockConfig ( CLK_Peripheral_ADC1**,** ENABLE**);**

//配置ADC1通道22的IO口為浮空輸入模式

GPIO_Init ( GPIOD**,** GPIO_Pin_0**,** GPIO_Mode_In_FL_No_IT**);**

/* 初始化 ADC1 連續(xù)轉(zhuǎn)換,12位分辨率, ADC時(shí)鐘分頻2 */

ADC_Init ( ADC1**,** ADC_ConversionMode_Continuous**,** ADC_Resolution_12Bit**,** ADC_Prescaler_2**);**

/* 配置ADC1 低速通道, 采樣周期384 */

ADC_SamplingTimeConfig ( ADC1**,** ADC_Group_SlowChannels**,** ADC_SamplingTime_384Cycles**);**

/* 使能 ADC1 */

ADC_Cmd ( ADC1**,** ENABLE**);**

/* 使能ADC1通道22 */

ADC_ChannelCmd ( ADC1**,** ADC_Channel_22**,** ENABLE**);** /* connected to potentiometer */

}

TIM3的配置函數(shù)如下:

static void TIM3_Config ( void**)**

{

/* 使能 TIM3 時(shí)鐘 */

CLK_PeripheralClockConfig ( CLK_Peripheral_TIM3**,** ENABLE**);**

/* TIM3基本配置:時(shí)鐘分頻:1,向上計(jì)數(shù),周期:0xfff */

TIM3_TimeBaseInit ( TIM3_Prescaler_1**,** TIM3_CounterMode_Up**,** 0xFFF**);**

/* 配置TIM3_CH1作為PWM輸出 */

TIM3_OC1Init ( TIM3_OCMode_PWM1**,** TIM3_OutputState_Enable**,**

0x7FF**,** TIM3_OCPolarity_Low**,**

           TIM3_OCIdleState_Set**);**

/* 使能 TIM3 */

TIM3_Cmd ( ENABLE**);**

/* 配置TIM3_CH1的GPIO (PD2)*/

GPIO_Init ( GPIOB**,** GPIO_Pin_1 , GPIO_Mode_Out_PP_Low_Fast**);**

/* 使能TIM3的PWM輸出*/

TIM3_CtrlPWMOutputs ( ENABLE**);**

}

DMA配置函數(shù)如下:

static void DMA_Config ( void**)**

{

/* 使能 DMA1 時(shí)鐘 */

CLK_PeripheralClockConfig ( CLK_Peripheral_DMA1**,** ENABLE**);**

/* 連接ADC1到DMA1通道1 */

SYSCFG_REMAPDMAChannelConfig ( REMAP_DMA1Channel_ADC1ToChannel1**);**

//*初始化DMA1通道1, 內(nèi)存地址:BUFFER_ADDRESS,外設(shè)地址:ADC1_DR_ADDRESS,

//數(shù)據(jù)大小:BUFFER_SIZE,傳輸方向:外設(shè)到內(nèi)存,DMA模式:循環(huán),內(nèi)存地址模式:增長(zhǎng),

//DMA優(yōu)先級(jí):高,內(nèi)存數(shù)據(jù)大小:半字

DMA_Init ( DMA1_Channel1**,** BUFFER_ADDRESS**,** ADC1_DR_ADDRESS**,** BUFFER_SIZE**,** DMA_DIR_PeripheralToMemory**,**

DMA_Mode_Circular**,** DMA_MemoryIncMode_Inc**,** DMA_Priority_High**,**  DMA_MemoryDataSize_HalfWord**);**

// 初始化DMA1通道0, 內(nèi)存地址:BUFFER_ADDRESS,外設(shè)地址:ADC1_DR_ADDRESS,

//數(shù)據(jù)大?。築UFFER_SIZE,傳輸方向:內(nèi)存到外設(shè),DMA模式:循環(huán),內(nèi)存地址模式:增長(zhǎng),

//DMA優(yōu)先級(jí):高,內(nèi)存數(shù)據(jù)大小:半字

DMA_Init ( DMA1_Channel0**,** BUFFER_ADDRESS**,** TIM3_CCR1_ADDRESS**,** BUFFER_SIZE**,** DMA_DIR_MemoryToPeripheral**,**

DMA_Mode_Circular**,** DMA_MemoryIncMode_Inc**,** DMA_Priority_High**,** DMA_MemoryDataSize_HalfWord**);**

/* 使能DMA1通道1 */

DMA_Cmd ( DMA1_Channel1**,** ENABLE**);**

/* 使能DMA1通道0 */

DMA_Cmd ( DMA1_Channel0**,** ENABLE**);**

/* DMA1 使能 */

DMA_GlobalCmd ( ENABLE**);**

}

DMA配置相關(guān)的地址定義如下:

//定義內(nèi)存與外設(shè)的地址,用于DMA傳輸

#define ADC1_DR_ADDRESS ((uint16_t)(ADC1_BASE + 0x04))

#define TIM3_CCR1_ADDRESS ((uint16_t)(TIM3_BASE + 0x11))

#define BUFFER_SIZE ((uint8_t) 0x01)

#define BUFFER_ADDRESS ((uint16_t)(&Buffer))

uint16_t Buffer = 0**;** //定義變量保存DMA數(shù)據(jù),作為DMA傳輸內(nèi)存地址

主函數(shù)如下:

void main ( void**)**

{

ADC_Config**();** //ADC配置

DMA_Config**();** //DMA配置

TIM3_Config (); //TIM3配置

/* 使能 ADC1 DMA 請(qǐng)求*/

ADC_DMACmd ( ADC1**,** ENABLE**);**

/* 使能 TIM1 DMA 請(qǐng)求*/

TIM3_DMACmd ( TIM3_DMASource_Update**,** ENABLE**);**

/* 起始ADC1轉(zhuǎn)換*/

ADC_SoftwareStartConv ( ADC1**);**

while ( 1**)**

{

;

}

}

使用ST-LINK把程序下載到開發(fā)板,ADC1_CH22(PD0)采樣電壓越高LED1越亮,檢測(cè)的測(cè)試方法:把PD0口接板子的GND,LED1滅;接板子的VCC,LED1亮(如果把PD0接電位器,那么LED1的亮度可以由電位器調(diào)節(jié))。

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

    關(guān)注

    68

    文章

    10947

    瀏覽量

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

    關(guān)注

    3

    文章

    568

    瀏覽量

    101478
  • stm8l051f3
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    2312
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM8L051F3定時(shí)器無法啟動(dòng)的原因?

    STM8L051F3,定時(shí)器無法啟動(dòng)
    發(fā)表于 05-09 06:37

    分享一下最近用的stm8l051f3庫函數(shù)及數(shù)據(jù)手冊(cè)

    最近在用STM8所以分享一下最近用的stm8l051f3庫函數(shù)及數(shù)據(jù)手冊(cè)
    發(fā)表于 08-03 13:02

    STM8L051F3的例程

    一定是STM8L051F3的例程,要直接操作寄存器的例程,有時(shí)鐘、I/O的配置就可以了
    發(fā)表于 02-24 13:36

    stm8l051f3可以做浮動(dòng)操作?

    你好,我有一個(gè)問題是stm8L051F3是否可以執(zhí)行/計(jì)算浮動(dòng)操作,請(qǐng)幫忙告訴我,目前我無法用printf函數(shù)檢查它,因?yàn)槿绻褂脦в泄ぞ哌x項(xiàng)的庫,我的大小超過錯(cuò)誤,例子:float
    發(fā)表于 11-19 10:36

    如何以最低功率運(yùn)行STM8L051F3?我可以舉個(gè)例子嗎?

    我在用STM8L051F3為我的項(xiàng)目。我的項(xiàng)目使用10個(gè)LED,Timer2和1個(gè)輸入引腳。從1針輸入后,我將在LED 1上通過1.系統(tǒng)由電池供電,因此運(yùn)行時(shí)電流應(yīng)該最小。不使用睡眠,停止如何以最低
    發(fā)表于 05-27 15:06

    如何用STM8L051F3來開啟/關(guān)閉微控制器?

    我們使用的是STM8L051F3,它有2個(gè)輸入,這是我們用于我們應(yīng)用的2鍵鍵盤?,F(xiàn)在我想用那個(gè)鍵盤來開啟/關(guān)閉微控制器。我怎么能這樣做?我想在按下鍵盤按鍵時(shí)打開控制器電源,然后我也會(huì)將這些按鍵用于
    發(fā)表于 07-01 07:16

    STM8L051F3串口接收中斷超時(shí)判斷數(shù)據(jù)結(jié)束相關(guān)資料分享

    目標(biāo):實(shí)現(xiàn)由PC的串口調(diào)試軟件發(fā)一串任意長(zhǎng)(小于512字節(jié))的數(shù)據(jù)給STM8L051F3串口,然后STM8L051F3串口全部返回給PC串口調(diào)試軟件.所需軟件: XCOM V2.2串口調(diào)試助手
    發(fā)表于 02-21 07:19

    介紹STM8L051F3 PWR的低功耗模式與應(yīng)用

    本章介紹STM8L051F3的PWR相關(guān)知識(shí),并重點(diǎn)介紹它的低功耗模式與應(yīng)用。內(nèi)容分為以下幾部分:低功耗模式介紹WFI模式應(yīng)用1、低功耗模式介紹STM8L系列就是STM
    發(fā)表于 02-23 07:38

    STM8L051F3單片機(jī)用什么軟件做開發(fā)?KEIL可以嗎?

    STM8L051F3用什么軟件做開發(fā)?KEIL可以嗎?
    發(fā)表于 09-27 06:04

    STM8L051F3 STM8L151x2/x3 Errata

    STM8L051F3 STM8L151x2/x3 Errata sheet STM8L051F3 STM8L151x2 and STM
    發(fā)表于 03-20 10:27 ?35次下載

    STM8L051F3串口接收中斷超時(shí)判斷數(shù)據(jù)結(jié)束

    目標(biāo):實(shí)現(xiàn)由PC的串口調(diào)試軟件發(fā)一串任意長(zhǎng)(小于512字節(jié))的數(shù)據(jù)給STM8L051F3串口,然后STM8L051F3串口全部返回給PC串口調(diào)試軟件.所需軟件: XCOM V2.2串口調(diào)試助手
    發(fā)表于 12-27 18:31 ?8次下載
    <b class='flag-5'>STM8L051F3</b>串口接收中斷超時(shí)判斷數(shù)據(jù)結(jié)束

    STM8L051F3_04_PWR應(yīng)用

    本章介紹STM8L051F3的PWR相關(guān)知識(shí),并重點(diǎn)介紹它的低功耗模式與應(yīng)用。內(nèi)容分為以下幾部分:低功耗模式介紹 WFI模式應(yīng)用1、低功耗模式介紹STM8L系列就是STM
    發(fā)表于 12-31 18:59 ?0次下載
    STM<b class='flag-5'>8L051F3</b>_04_PWR應(yīng)用

    微控制器最小系統(tǒng)板STM8L051F3開源分享

    電子發(fā)燒友網(wǎng)站提供《微控制器最小系統(tǒng)板STM8L051F3開源分享.zip》資料免費(fèi)下載
    發(fā)表于 08-09 10:15 ?18次下載
    微控制器最小系統(tǒng)板<b class='flag-5'>STM8L051F3</b>開源分享

    STM8L051F3的TIM2相關(guān)知識(shí)

    本文主要介紹STM8L051F3的TIM4,TIM4是基本定時(shí)器,由一個(gè)8位的自動(dòng)重裝載的向上計(jì)數(shù)器和一個(gè)可編程預(yù)分頻器組成,功能簡(jiǎn)單,一般用于基本計(jì)時(shí),定時(shí)器溢出時(shí)可產(chǎn)生一個(gè)定時(shí)器溢出中斷
    的頭像 發(fā)表于 02-14 09:36 ?1295次閱讀
    <b class='flag-5'>STM8L051F3</b>的TIM2<b class='flag-5'>相關(guān)</b><b class='flag-5'>知識(shí)</b>

    STM8L051F3的ADC相關(guān)知識(shí)

    ADC(Analog-to-Digital Converter):模擬-數(shù)字轉(zhuǎn)換,就是把模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)。STM8L051F3的ADC可以執(zhí)行在單次或連續(xù)模式
    發(fā)表于 02-14 09:38 ?2425次閱讀
    <b class='flag-5'>STM8L051F3</b>的ADC<b class='flag-5'>相關(guān)</b><b class='flag-5'>知識(shí)</b>
    主站蜘蛛池模板: 受被三个攻各种道具PLAY | 成人永久免费视频网站在线观看 | 青春禁区动漫免费观看 | 极品美女久久久久久久久久久 | 久久精品热99看二 | 中文字幕高清在线中文字幕 | 亚洲 欧美 国产 综合 在线 | 一二三四韩国免费观看 | 免费观看99热只有精品 | 果冻传媒在线播放 免费观看 | 日本工口生肉全彩大全 | 色老99九久精品偷偷鲁 | 亚洲人视频在线 | 亚洲地址一地址二地址三 | 精品免费久久久久久影院 | 中文字幕亚洲欧美在线视频 | 超碰免费视频在线观看 | 久久精品观看影院2828 | 国产主播AV福利精品一区 | 打卡中国各地奋斗第一线 | 青青草偷拍国产亚洲欧洲 | 老师洗澡让我吃她胸的视频 | 毛片大片免费看 | 妺妺窝人体色WWW偷窥女厕 | 亚洲国产av | 国产在线精品亚洲观看不卡欧美 | 囯产精品一区二区三区线 | CHINESE熟女老女人HD视频 | 2020无码最新国产在线观看 | 亚洲 欧美 视频 手机在线 | 青青草视频在线ac | 999久久精品国产 | 亚洲色综合狠狠综合区 | 亚洲国产日韩欧美视频二区 | 好大好硬好爽好深好硬视频 | 国产剧情在线精品视频不卡 | 国产色偷偷男人的天堂 | 米奇在线8888在线精品视频 | 激情床戏揉胸吃胸视频 | 戳女人屁股流水羞羞漫画 | 久久re热在线视频精69 |