女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

【GD32F303紅楓派開發(fā)板使用手冊(cè)】第十一講 ADC-電源電壓?jiǎn)瓮ǖ繟DC檢測(cè)實(shí)驗(yàn)

聚沃科技 ? 2024-06-09 10:18 ? 次閱讀

11.1實(shí)驗(yàn)內(nèi)容

通過本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容:

11.2實(shí)驗(yàn)原理

11.2.1ADC原理

我們知道,自然界中有非常多的模擬信號(hào),比如上一節(jié)提到的光照強(qiáng)度,還有其他的例如溫度、聲音等等,那么人們是怎么來衡量一個(gè)模擬信號(hào)的呢?

我們通常會(huì)說今天光照度達(dá)到了3萬Lux(照度單位),現(xiàn)在測(cè)量到的體溫是36.5℃,我們所處的環(huán)境是40分貝,沒錯(cuò),人們就是通過將這些模擬信號(hào)數(shù)字化,從而達(dá)到衡量這些模擬信號(hào)的目的。那對(duì)于MCU來說,如果要測(cè)量一個(gè)模擬量,可以通過自帶的ADC(Analog-to-Digital converters)模塊,即模-數(shù)轉(zhuǎn)換器將模擬量轉(zhuǎn)化為可以被MCU讀取到的數(shù)字量。

11.2.2GD32F303 ADC工作原理

GD32F303有3個(gè)12位逐次逼近型ADC(SAR ADC),這三個(gè)ADC可以獨(dú)立工作,也可以讓ADC0和ADC1工作在同步模式下。有最多21個(gè)外部ADC引腳可用于將連接到這些引腳的電壓值轉(zhuǎn)換為數(shù)字量,這些引腳號(hào)可以通過Datasheet獲得。

wKgaomZlDPqAFEqIAAFFlTBbMjk151.png

表中ADC012_INx的意思是:該IO口可以作為通道x用于ADC0、ADC1和ADC2。如ADC012_IN0,表示PA0可以用于ADC0的通道0使用,也可以作為ADC1和ADC2的通道0使用。但要注意:不能在同一個(gè)時(shí)刻讓不同的ADC去轉(zhuǎn)換同一個(gè)通道,否則會(huì)有無法預(yù)料的結(jié)果

以下總結(jié)了GD32F303 ADC的特性:

  • 高性能:
    –可配置12位、10位、8位、或者6位分辨率;
    –自校準(zhǔn);
    –可編程采樣時(shí)間;
    –數(shù)據(jù)寄存器可配置數(shù)據(jù)對(duì)齊方式;
    –支持規(guī)則數(shù)據(jù)轉(zhuǎn)換的DMA請(qǐng)求。
  • 模擬輸入通道:
    – 16個(gè)外部模擬輸入通道;
    – 1個(gè)內(nèi)部溫度傳感器輸入通道(VSENSE);
    – 1個(gè)內(nèi)部參考電壓輸入通道(VREFINT)。
  • 轉(zhuǎn)換開始的發(fā)起:
    –軟件;
    –硬件觸發(fā)。
  • 轉(zhuǎn)換模式:
    –轉(zhuǎn)換單個(gè)通道,或者掃描一組通道;
    –單次模式,每次觸發(fā)轉(zhuǎn)換一次選擇的輸入通道;
    –連續(xù)模式,連續(xù)轉(zhuǎn)換所選擇的輸入通道;
    –間斷模式;
    –同步模式(適用于具有兩個(gè)或多個(gè)ADC的設(shè)備)。
  • 模擬看門狗。
  • 中斷的產(chǎn)生:
    –規(guī)則組或注入組轉(zhuǎn)換結(jié)束;
    –模擬看門狗事件。
  • 過采樣:
    – 16位的數(shù)據(jù)寄存器;
    –可調(diào)整的過采樣率,從2x到256x;
    –高達(dá)8位的可編程數(shù)據(jù)移位。
  • ADC供電要求:
    – 2.4V到3.6V,一般供電電壓為3.3V。
  • ADC輸入范圍:VREFN ≤VIN ≤VREFP 。

下面介紹下GD32F303的ADC框圖:

wKgZomZlDQ-AJzLpAAKIXyhmu1A865.png

標(biāo)注1:輸入電壓和參考電壓

輸入電壓引腳定義如下表:

wKgaomZAIY-AU-Z0AAFEKWA5sR8340.png

大于等于100pin的GD32F303,ADC參考電壓等于VREFP,100pin以下的GD32F303,ADC參考電壓等于VDDA

GD32F303的ADC是12bit有效位的,滿量程對(duì)應(yīng)的轉(zhuǎn)換值是4095,即當(dāng)采樣引腳上的電壓等于ADC參考電壓時(shí),得到的轉(zhuǎn)換值即為4095。故理論采樣是指可通過以下公式得到:采樣數(shù)值=實(shí)際電壓/參考電壓*4095

標(biāo)注2:輸入通道

前面提到,ADC有最多16個(gè)外部模擬通道和2個(gè)內(nèi)部通道,外部通道號(hào)從IN0~IN15,由IO口號(hào)來決定,兩個(gè)內(nèi)部通道是IN16(溫度傳感器)和IN17(內(nèi)部Vrefint,典型值1.2V),下表給出了IO口號(hào)對(duì)應(yīng)的ADC通道:

wKgaomZlDSCACbsgAAC_i3gG6T0484.png

標(biāo)注3:規(guī)則組和注入組

每個(gè)ADC有兩個(gè)組——規(guī)則組和注入組。

規(guī)則組有兩個(gè)重要的參數(shù),其一為轉(zhuǎn)換的個(gè)數(shù),其二為轉(zhuǎn)換的序列,規(guī)定好這兩個(gè)參數(shù)后,一旦開始規(guī)則組的轉(zhuǎn)換,則ADC就按照轉(zhuǎn)換序列一個(gè)一個(gè)的進(jìn)行模-數(shù)轉(zhuǎn)換,直到達(dá)到要求的轉(zhuǎn)換個(gè)數(shù)。

規(guī)則組的轉(zhuǎn)換個(gè)數(shù)由ADC_RSQ0寄存器的RL[3:0]位規(guī)定,轉(zhuǎn)換的總數(shù)目為RL[3:0]+1,轉(zhuǎn)換總數(shù)目最大為16個(gè);轉(zhuǎn)換序列由ADC_RSQ0~ADC_RSQ2共同決定,我們來看下這幾個(gè)寄存器。

ADC_RSQ0寄存器:

wKgZomZAIcKAJZyRAAA38c3g2hs770.pngwKgaomZlDXiAKjuYAAAhkW9Ua8o971.png

ADC_RSQ1寄存器:

wKgaomZAIdWAZsAvAABgZEY1Sss974.png

ADC_RSQ2寄存器:

wKgZomZAIeKAVJF7AABcB9r0jug096.png

舉個(gè)例子,現(xiàn)需要按照CH3->CH2->CH1的順序進(jìn)行規(guī)則組轉(zhuǎn)換,則設(shè)定RL[3:0] = 2,然后設(shè)定RSQ0為CH3,RSQ1為CH2,RSQ2為CH1,則當(dāng)開始規(guī)則組轉(zhuǎn)換時(shí),ADC首先進(jìn)行RSQ0規(guī)定的通道即CH3的轉(zhuǎn)換,再進(jìn)行RSQ1規(guī)定的通道即CH2的轉(zhuǎn)換,最后進(jìn)行RSQ2規(guī)定的通道即CH1轉(zhuǎn)換,當(dāng)這三個(gè)通道轉(zhuǎn)換完后,規(guī)則組轉(zhuǎn)換結(jié)束。

需要注意的是,每轉(zhuǎn)換一個(gè)規(guī)則組通道,轉(zhuǎn)換結(jié)果都會(huì)放在寄存器ADC_RDATA中,所以CPU一定要在下一個(gè)通道轉(zhuǎn)換完成前將上一個(gè)通道轉(zhuǎn)換結(jié)果讀走,否則會(huì)導(dǎo)致上一個(gè)通道數(shù)據(jù)被新的數(shù)據(jù)覆蓋。所以在多通道規(guī)則組轉(zhuǎn)換時(shí),為了保證能讀到所有通道的數(shù)據(jù),一定要使用DMA(直接存儲(chǔ)器訪問控制器),每個(gè)通道轉(zhuǎn)換結(jié)束后,都會(huì)給DMA發(fā)送請(qǐng)求,DMA就會(huì)將最新的ADC_RDATA中的數(shù)據(jù)搬走。關(guān)于ADC配合DMA的使用,后面章節(jié)會(huì)詳細(xì)介紹。

說完規(guī)則組,我們?cè)僬f下注入組。注入組,可以按照特定的序列組織成最多 4 個(gè)轉(zhuǎn)換的序列。ADC_ISQ寄存器規(guī)定了注入組的通道選擇。ADC_ISQ寄存器的IL[1:0]位規(guī)定了整個(gè)注入組轉(zhuǎn)換序列的長(zhǎng)度。

ADC_ISQ寄存器:

wKgZomZlDbWAfh5yAABdcX-AZHc220.png

和規(guī)則組轉(zhuǎn)換序列不同的是,如果 IL[1:0]長(zhǎng)度不足4,注入通道轉(zhuǎn)換從(4-IL[1:0]-1)開始:

當(dāng)IL = 3,注入組轉(zhuǎn)換順序?yàn)镮SQ0 >> ISQ1 >> ISQ2 >> ISQ3,轉(zhuǎn)換結(jié)果分別放在ADC_IDATA0~ADC_IDATA3;

當(dāng)IL = 2,注入組轉(zhuǎn)換順序?yàn)镮SQ1 >> ISQ2 >> ISQ3,轉(zhuǎn)換結(jié)果分別放在ADC_IDATA0~ADC_IDATA2;

當(dāng)IL = 1,注入組轉(zhuǎn)換順序?yàn)镮SQ2 >> ISQ3,轉(zhuǎn)換結(jié)果分別放在ADC_IDATA0~ADC_IDATA1;

當(dāng)IL = 0,注入組轉(zhuǎn)換ISQ3,轉(zhuǎn)換結(jié)果放在ADC_IDATA0

舉個(gè)例子,現(xiàn)需要按照CH3->CH2->CH1的順序進(jìn)行注入組轉(zhuǎn)換,則設(shè)定IL[3:0] = 2,然后設(shè)定ISQ1為CH3,ISQ2為CH2,ISQ3為CH1,則當(dāng)開始注入組轉(zhuǎn)換時(shí),ADC首先進(jìn)行ISQ1規(guī)定的通道即CH3的轉(zhuǎn)換,再進(jìn)行ISQ2規(guī)定的通道即CH2的轉(zhuǎn)換,最后進(jìn)行ISQ3規(guī)定的通道即CH1轉(zhuǎn)換,當(dāng)這三個(gè)通道轉(zhuǎn)換完后,注入組轉(zhuǎn)換結(jié)束。

因?yàn)?個(gè)通道轉(zhuǎn)換的結(jié)果分別放在4個(gè)不同的注入組數(shù)據(jù)寄存器ADC_IDATAx中,所以注入組不需要用到DMA,只需要在注入組轉(zhuǎn)換完成后分別去不同注入組數(shù)據(jù)寄存器中取數(shù)即可。

標(biāo)注4:觸發(fā)源

ADC的規(guī)則組和注入組需要選特定的觸發(fā)源用于觸發(fā)ADC轉(zhuǎn)換,注意,ADC的Enable(即ADC_CTL1寄存器的ADC_ON位置“1”)不會(huì)觸發(fā)ADC轉(zhuǎn)換,而是當(dāng)選定的觸發(fā)源來臨后ADC才開始轉(zhuǎn)換。

觸發(fā)源分為內(nèi)部觸發(fā)和外部觸發(fā),內(nèi)部觸發(fā)是指當(dāng)ADC_ON已經(jīng)為“1”的情況下,不改變其他ADC寄存器,再往ADC_ON位寫“1”,將觸發(fā)一次ADC轉(zhuǎn)換;外部觸發(fā)源是除了內(nèi)部觸發(fā)源以外的觸發(fā)源,外部觸發(fā)源可以通過ADC_CTL1寄存器查看:

ADC_CTL1寄存器:

wKgZomZlDcmATUPGAACFEa6lJrg320.pngwKgaomZlDc6ANh3rAAAvUsm0kf8805.pngwKgZomZlDdSABE7JAAGIAjLLAbY673.pngwKgZomZlDdqAUbUiAAG0RsZi-T4640.pngwKgaomZlDd-AW8AwAADDPuZcfws467.png

標(biāo)注5:規(guī)則組和注入組的數(shù)據(jù)寄存器

如標(biāo)注3規(guī)則組和注入組中的表述,每個(gè)ADC的規(guī)則組只有一個(gè)數(shù)據(jù)寄存器ADC_RDATA,每轉(zhuǎn)換一個(gè)通道,轉(zhuǎn)換結(jié)果放在這個(gè)寄存器中,在下一通道轉(zhuǎn)換結(jié)束前必須要將上一個(gè)通道的轉(zhuǎn)換結(jié)果取走;每個(gè)ADC的注入組有4個(gè)數(shù)據(jù)寄存器ADC_IDATAx(x = 0,1,2,3),分別保存4個(gè)通道的ADC注入組的轉(zhuǎn)換數(shù)據(jù)。

標(biāo)注6:ADC中斷及標(biāo)志位

ADC的中斷總共有三種:規(guī)則組轉(zhuǎn)換結(jié)束中斷、注入組轉(zhuǎn)換結(jié)束中斷以及模擬看門狗,可以通過將ADC_CTL0中的EOCIE、EOICIE和WDEIE置“1”來開啟相應(yīng)中斷。

ADC_STAT寄存器中的EOC、EOIC和WDE表示相應(yīng)事件發(fā)生,EOC置“1”表示規(guī)則組的轉(zhuǎn)換已經(jīng)結(jié)束;EOIC置“1”表示注入組的轉(zhuǎn)換已經(jīng)結(jié)束,注意:注入組轉(zhuǎn)換結(jié)束時(shí),EOC標(biāo)志位也會(huì)置起。

GD32F303的ADC原理部分就介紹到這里,下面我們通過電源電壓?jiǎn)瓮ǖ啦蓸訉?shí)驗(yàn)來詳細(xì)介紹下ADC的用法。

11.3硬件設(shè)計(jì)

電源電壓檢測(cè)的原理圖如下:

wKgZomZlDeyAfBSYAAB52QduNmI893.png

ADC_IN4連接到MCU的PF6管腳通過ADC轉(zhuǎn)換可以得到PF6腳上具體的電壓值,再通過該電壓值可反推電源電壓值。

11.4代碼解析

本實(shí)驗(yàn)只用到一個(gè)ADC通道:PF6——ADC2_CH4,故可以選擇使用ADC2的規(guī)則組進(jìn)行轉(zhuǎn)換,并通過查詢EOC標(biāo)志位來判斷通道轉(zhuǎn)換完成。

11.4.1ADC初始化

在driver_adc.c中定義了ADC初始化函數(shù)driver_adc_config:

C
void driver_adc_config(typdef_adc_ch_general *ADC,typdef_adc_ch_parameter *ADC_CH)
{
uint8_t i;
/*配置ADC時(shí)鐘頻率*/
rcu_adc_clock_config(ADC->adc_psc);
/*使能ADC時(shí)鐘*/
rcu_periph_clock_enable(ADC->rcu_adc);
/*配置ADC相關(guān)IO口,先配置時(shí)鐘,再將IO口設(shè)置為模擬輸入*/
for(i=0 ;ich_count; i++)
{
if(ADC_CH[i].adc_channel < ADC_CHANNEL_16)
{
rcu_periph_clock_enable(ADC_CH[i].rcu_port);
gpio_init(ADC_CH[i].port, GPIO_MODE_AIN, ADC_CH[i].gpio_speed, ADC_CH[i].pin);
}
else
{
adc_tempsensor_vrefint_enable();
}
}
/*配置ADC工作模式,如獨(dú)立模式,規(guī)則并行模式等*/
adc_mode_config(ADC->adc_mode);
/*配置規(guī)則組的掃描模式和連續(xù)轉(zhuǎn)換模式*/
adc_special_function_config(ADC->adc_port, ADC_SCAN_MODE, ADC->adc_scan_function);
if(ADC->adc_channel_group == ADC_REGULAR_CHANNEL)
{
adc_special_function_config(ADC->adc_port, ADC_CONTINUOUS_MODE, ADC->adc_continuous_function);
}
/*選擇數(shù)據(jù)右對(duì)齊*/
adc_data_alignment_config(ADC->adc_port, ADC_DATAALIGN_RIGHT);
/*配置轉(zhuǎn)換通道數(shù)*/
adc_channel_length_config(ADC->adc_port, ADC->adc_channel_group, ADC->ch_count);
/*配置轉(zhuǎn)換順序*/
if(ADC->adc_channel_group == ADC_REGULAR_CHANNEL)
{
for(i = 0;i< ADC->ch_count;i++)
{
adc_regular_channel_config(ADC->adc_port, i, ADC_CH[i].adc_channel,ADC_CH[i].sample_time);
}
}
else if(ADC->adc_channel_group == ADC_INSERTED_CHANNEL)
{
for(i = 0;i< ADC->ch_count;i++)
{
adc_inserted_channel_config(ADC->adc_port, i, ADC_CH[i].adc_channel,ADC_CH[i].sample_time);
}
}
/*選擇觸發(fā)源及使能外部觸發(fā)模式*/
adc_external_trigger_source_config(ADC->adc_port, ADC->adc_channel_group, ADC->trigger_source);
adc_external_trigger_config(ADC->adc_port, ADC->adc_channel_group, ENABLE);
/*選擇是否需要使用DMA*/
if(ADC->DMA_mode == ENABLE)
{
adc_dma_mode_enable(ADC->adc_port);
}
/*ADC的使能和自校準(zhǔn),ADC使能后需要經(jīng)過一定的ADC_CLK后才能校準(zhǔn),本示例中直接使用1ms延時(shí)*/
adc_enable(ADC->adc_port);
delay_ms(1);
adc_calibration_enable(ADC->adc_port);
}

在解析上述代碼前,我們先看driver_adc.h兩個(gè)結(jié)構(gòu)體聲明。

1、ADC設(shè)置參數(shù)結(jié)構(gòu)體,該結(jié)構(gòu)體中規(guī)定了ADC設(shè)置所需要的參數(shù):

C
/*ADC設(shè)置參數(shù)*/
typedef struct __typdef_adc_general
{
rcu_periph_enum rcu_adc;//ADC時(shí)鐘口
uint32_t adc_psc;//ADC時(shí)鐘源分頻系數(shù)
uint32_t adc_port;//ADC號(hào)
uint32_t adc_mode;//ADC工作模式:ADC_MODE_FREE,ADC_DAUL_REGULAL_PARALLEL
uint8_t adc_channel_group;//ADC工作組:規(guī)則組或注入組
EventStatus adc_scan_function;//設(shè)置掃描模式
EventStatus adc_continuous_function;//設(shè)置循環(huán)模式
uint8_t ch_count;//設(shè)置轉(zhuǎn)換通道個(gè)數(shù)
typdef_adc_dma_parameter dma_parameter;//若使用DMA,則需要設(shè)置dma
uint32_t trigger_source;//ADC觸發(fā)源
EventStatus DMA_mode;//是否使用DMA
}typdef_adc_ch_general;

2、ADC IO口及通道參數(shù)結(jié)構(gòu)體,該結(jié)構(gòu)體中規(guī)定了用于ADC轉(zhuǎn)換的IO口及通道參數(shù):

C
/*ADC IO口及通道參數(shù)*/
typedef struct __typdef_adc_ch_parameter
{
rcu_periph_enum rcu_port;//IO口時(shí)鐘
uint32_t port;//IO port
uint32_t pin;//IO pin
uint32_t gpio_speed;//IO 速率
uint8_t adc_channel;//IO對(duì)應(yīng)的ADC通道
uint32_t sample_time;//IO的采樣周期
}typdef_adc_ch_parameter;

好,現(xiàn)在我們來對(duì)ADC配置進(jìn)行分段解析。

1、ADC的時(shí)鐘頻率配置和ADC時(shí)鐘使能:

C
/*配置ADC時(shí)鐘頻率*/
rcu_adc_clock_config(ADC->adc_psc);
/*使能ADC時(shí)鐘*/
rcu_periph_clock_enable(ADC->rcu_adc);

GD32F303的ADC的工作時(shí)鐘頻率不能超過40MHz,而ADC是掛載在APB2總線上的,APB2總線最高頻率可以達(dá)到120M,所以需要進(jìn)行分頻處理。

2、配置IO口

C
/*配置ADC相關(guān)IO口,先使能時(shí)鐘,再將IO口設(shè)置為模擬輸入*/
for(i=0 ;ich_count; i++)
{
if(ADC_CH[i].adc_channel < ADC_CHANNEL_16)
{
rcu_periph_clock_enable(ADC_CH[i].rcu_port);
gpio_init(ADC_CH[i].port, GPIO_MODE_AIN, ADC_CH[i].gpio_speed, ADC_CH[i].pin);
}
else
{
adc_tempsensor_vrefint_enable();
}
}

被用作ADC采樣的IO口需要被設(shè)置為Analog模式,因?yàn)锳DC_CH0~ADC_CH15是和外部IO關(guān)聯(lián)的,而ADC_CH16和ADC_CH17是內(nèi)部通道,所以只有在通道號(hào)小于ADC_CHANNEL_16時(shí)才需要配置IO口,而大于等于ADC_CHANNEL_16時(shí)需要使能ADC內(nèi)部通道。

3、配置ADC規(guī)則組工作模式

C
/*配置ADC工作模式,如獨(dú)立模式,規(guī)則并行模式等*/
adc_mode_config(ADC->adc_mode);

ADC的模式有獨(dú)立模式、規(guī)則并行、注入并行、快速交叉等9種,其中用到比較多的是獨(dú)立模式、規(guī)則并行和注入并行,現(xiàn)對(duì)這三種做簡(jiǎn)單介紹。

獨(dú)立模式:三個(gè)ADC相互之間無影響,每個(gè)ADC單獨(dú)工作;

規(guī)則并行:ADC0和ADC1可工作規(guī)則并行模式下,當(dāng)ADC0規(guī)則組被觸發(fā)開始轉(zhuǎn)換時(shí),ADC1注入組也會(huì)自動(dòng)開始轉(zhuǎn)換(此時(shí)ADC1的觸發(fā)源一定要選擇軟件觸發(fā)),轉(zhuǎn)換結(jié)果會(huì)分別放在ADC0_RDATA和ADC1_RDATA中,其中ADC0_RDATA的上半字也會(huì)保存ADC1的轉(zhuǎn)換結(jié)果,這樣設(shè)計(jì)是為了方便DMA去進(jìn)行兩個(gè)同步ADC結(jié)果的同時(shí)搬運(yùn)。

基于16個(gè)通道的規(guī)則并行模式如下圖所示:

wKgaomZlDm-AHDRvAABXFHlYGoo914.png

注意:
1.不要在兩路ADC上轉(zhuǎn)換相同的通道(兩路ADC在同一通道轉(zhuǎn)換時(shí)采樣時(shí)間不可重疊)。
2.在并行模式下,ADC0和ADC1并行采樣的兩個(gè)通道的需要設(shè)置為準(zhǔn)確的相同采樣時(shí)間。

注入并行:ADC0和ADC1可工作注入并行模式下,當(dāng)ADC0注入組被觸發(fā)開始轉(zhuǎn)換時(shí),ADC1注入組也會(huì)自動(dòng)開始轉(zhuǎn)換(此時(shí)ADC1的觸發(fā)源一定要選擇軟件觸發(fā)),和規(guī)則組不同的是,通道轉(zhuǎn)換結(jié)果會(huì)放在各自的ADC_IDATAx寄存器中 。

基于4個(gè)通道的注入并行模式如下圖所示:

wKgZomZlDoyAevaFAABhhXjE_io072.png

4、配置掃描和連續(xù)模式

C
/*配置規(guī)則組的掃描模式和連續(xù)轉(zhuǎn)換模式*/
adc_special_function_config(ADC->adc_port, ADC_SCAN_MODE, ADC->adc_scan_function);
if(ADC->adc_channel_group == ADC_REGULAR_CHANNEL)
{
adc_special_function_config(ADC->adc_port, ADC_CONTINUOUS_MODE, ADC->adc_continuous_function);
}

掃描模式:當(dāng)一個(gè)規(guī)則組或注入組規(guī)定了1個(gè)以上的通道轉(zhuǎn)換時(shí),需要開啟掃描模式,此時(shí)規(guī)則組或注入組會(huì)根據(jù)設(shè)定好的轉(zhuǎn)換順序?qū)νǖ酪粋€(gè)一個(gè)進(jìn)行轉(zhuǎn)換;如果關(guān)閉掃描模式,那么規(guī)則組和注入組只會(huì)轉(zhuǎn)換RSQ0和ISQ0規(guī)定的通道。

連續(xù)模式:該模式只適用于規(guī)則組,開啟該模式時(shí),當(dāng)規(guī)則組轉(zhuǎn)換完成后,會(huì)自動(dòng)開始新一輪的轉(zhuǎn)換。

下圖為掃描轉(zhuǎn)換模式,且連續(xù)轉(zhuǎn)換模式失能的轉(zhuǎn)換情況:

wKgaomZlDq6Abs3BAACTF4wdzSE608.png

下圖為掃描轉(zhuǎn)換模式,連續(xù)轉(zhuǎn)換模式使能的轉(zhuǎn)換情況:

wKgZomZlDrmAPHFEAABDWqliGf4382.png

5、設(shè)置數(shù)據(jù)對(duì)齊

C
/*選擇數(shù)據(jù)右對(duì)齊*/
adc_data_alignment_config(ADC->adc_port, ADC_DATAALIGN_RIGHT);

ADC的轉(zhuǎn)換結(jié)果可以選擇左對(duì)齊或右對(duì)齊,以12位結(jié)果為例,左右對(duì)齊如下:

wKgaomZlDtWAad4TAADJlxwVeLg647.png

6、配置轉(zhuǎn)換個(gè)數(shù)、轉(zhuǎn)換順序及通道采樣周期

C
/*配置轉(zhuǎn)換通道數(shù)*/
adc_channel_length_config(ADC->adc_port, ADC->adc_channel_group, ADC->ch_count);
/*配置轉(zhuǎn)換順序*/
if(ADC->adc_channel_group == ADC_REGULAR_CHANNEL)
{
for(i = 0;i< ADC->ch_count;i++)
{
adc_regular_channel_config(ADC->adc_port, i, ADC_CH[i].adc_channel,ADC_CH[i].sample_time);
}
}
else if(ADC->adc_channel_group == ADC_INSERTED_CHANNEL)
{
for(i = 0;i< ADC->ch_count;i++)
{
adc_inserted_channel_config(ADC->adc_port, i, ADC_CH[i].adc_channel,ADC_CH[i].sample_time);
}
}

這段程序是配置規(guī)則組和注入組的轉(zhuǎn)換長(zhǎng)度、轉(zhuǎn)換順序及通道采樣周期。轉(zhuǎn)換長(zhǎng)度和順序前面講過,不再贅述,這里簡(jiǎn)單介紹下采樣周期。

采樣周期通過adc_regular_channel_config和adc_inserted_channel_config函數(shù)的最后一個(gè)形參設(shè)置,相應(yīng)的寄存器是ADC_SAMPT0和ADC_SAMPT1。

wKgZomZlDvKAfujaAABlUuz-r7c087.pngwKgZomZlDviATA25AAChqbeEtHw570.png

GD32F303是SAR ADC(逐次逼近型ADC),內(nèi)部有采樣電容,采樣過程為先將內(nèi)部采樣電容和外部采樣引腳相連,通過對(duì)內(nèi)部采樣電容的充放電讓采樣電容和外部采樣引腳電壓相等,然后關(guān)閉內(nèi)外部電路通道,內(nèi)部再通過逐次逼近比較得到電壓的數(shù)字值。逐次比較的過程需要固定的1.5個(gè)采樣周期,而采樣電容充放電過程是可以設(shè)置的,即這里介紹的采樣周期。

采樣周期分8個(gè)檔位可選,如一個(gè)通道選擇12.5周期,則轉(zhuǎn)換過程需要的總周期數(shù)為12.5+1.5 = 14,如果設(shè)置ADC的時(shí)鐘(前面提到,ADC時(shí)鐘是通過APB2總線經(jīng)過分頻所得)為30M,那么該通道轉(zhuǎn)換所需要的時(shí)間為14/30M = 0.467us。

那么如何選擇合適的采樣周期,這個(gè)和內(nèi)部采樣電容的充放電時(shí)間有關(guān),如果充放電時(shí)間不夠,采樣電容電壓不能和外部采樣引腳電壓一致,則得不到準(zhǔn)確的采樣值,如充放電時(shí)間過長(zhǎng),則浪費(fèi)CPU資源。我們可以根據(jù)采樣引腳對(duì)內(nèi)輸入阻抗值大小來選擇合適的采樣周期,阻抗值和采樣周期對(duì)應(yīng)表可以通過GD32F303 Datasheet ADC電氣參數(shù)章節(jié)獲得:

wKgaomZlDweAMhs9AADXF_40lwI813.png

舉個(gè)例子,實(shí)際采樣引腳對(duì)內(nèi)阻抗為20kΩ,根據(jù)上表需要選擇的采樣周期為55.5。

7、選擇ADC規(guī)則組和注入組的觸發(fā)源以及使能外部觸發(fā)

C
/*選擇觸發(fā)源及使能外部觸發(fā)模式*/
adc_external_trigger_source_config(ADC->adc_port, ADC->adc_channel_group, ADC->trigger_source);
adc_external_trigger_config(ADC->adc_port, ADC->adc_channel_group, ENABLE);

8、選擇是否需要DMA

C
/*選擇是否需要使用DMA*/
if(ADC->DMA_mode == ENABLE)
{
adc_dma_mode_enable(ADC->adc_port);
}

只有規(guī)則組才能使用DMA,在規(guī)則組設(shè)置了多通道采樣即掃描模式打開時(shí),是一定要用DMA的,否則沒辦法及時(shí)將轉(zhuǎn)換完成的通道數(shù)據(jù)取走,其他的情況下DMA是否使用根據(jù)實(shí)際應(yīng)用決定。

9、ADC的使能和自校準(zhǔn)

C
/*ADC的使能和自校準(zhǔn),ADC使能后需要經(jīng)過一定的ADC_CLK后才能校準(zhǔn),本示例中直接使用1ms延時(shí)*/
adc_enable(ADC->adc_port);
delay_ms(1);
adc_calibration_enable(ADC->adc_port);

ADC的使能比較簡(jiǎn)單,使能后ADC才能工作,這里再?gòu)?qiáng)調(diào)下,使能ADC不代表就開始了ADC轉(zhuǎn)換,而是ADC等到觸發(fā)信號(hào)才會(huì)轉(zhuǎn)換,關(guān)于觸發(fā)條件,請(qǐng)讀者看前面觸發(fā)源介紹。

ADC 帶有一個(gè)前置校準(zhǔn)功能。在校準(zhǔn)期間,ADC計(jì)算一個(gè)校準(zhǔn)系數(shù),這個(gè)系數(shù)是應(yīng)用于ADC內(nèi)部的,它直到ADC下次掉電才無效。在校準(zhǔn)期間,應(yīng)用不能使用ADC,它必須等到校準(zhǔn)完成。在A/D轉(zhuǎn)換前應(yīng)執(zhí)行校準(zhǔn)操作。通過軟件設(shè)置CLB=1來對(duì)校準(zhǔn)進(jìn)行初始化,在校準(zhǔn)期間CLB位會(huì)一直保持1,直到校準(zhǔn)完成,該位由硬件清0。

ADC使能后校準(zhǔn)前比較要等待至少14個(gè)ADC時(shí)鐘周期,本實(shí)驗(yàn)中就直接使用1ms延時(shí)了,是完全足夠的。

關(guān)于校準(zhǔn):一般建議ADC enable之后進(jìn)行一次校準(zhǔn),但需要保證校準(zhǔn)器件,ADC參考電壓一定要很穩(wěn)定,否則可能校準(zhǔn)到一個(gè)錯(cuò)誤的情況,這樣后續(xù)的ADC轉(zhuǎn)換反而不準(zhǔn)確了,所以在一些特定情況下,校準(zhǔn)也可以不加。

11.4.2輪訓(xùn)方式獲取采樣值函數(shù)

ADC初始化好后,就可以進(jìn)行采樣了,本實(shí)驗(yàn)是通過輪訓(xùn)方式進(jìn)行ADC采樣,下面是輪訓(xùn)方式獲取采樣值函數(shù)。

C
uint16_t driver_adc_transform_polling(typdef_adc_ch_general *ADC,typdef_adc_ch_parameter *ADC_CH)
{
/*規(guī)則組采樣*/
if(ADC->adc_channel_group == ADC_REGULAR_CHANNEL)
{
/*設(shè)置規(guī)則組需要采樣的通道*/
adc_regular_channel_config(ADC->adc_port, 0, ADC_CH->adc_channel, ADC_CH->sample_time);
/*軟件觸發(fā)規(guī)則組轉(zhuǎn)換*/
adc_software_trigger_enable(ADC->adc_port, ADC_REGULAR_CHANNEL);
/*等待EOC置起*/
while(RESET == adc_flag_get(ADC->adc_port,ADC_FLAG_EOC));
/*清除EOC標(biāo)志位*/
adc_flag_clear(ADC->adc_port,ADC_FLAG_EOC);
/*將規(guī)則組轉(zhuǎn)換結(jié)果作為返回值*/
return ADC_RDATA(ADC->adc_port);

}
/*注入組采樣*/
else if(ADC->adc_channel_group == ADC_INSERTED_CHANNEL)
{
/*設(shè)置注入組需要采樣的通道*/
adc_inserted_channel_config(ADC->adc_port, 0, ADC_CH->adc_channel, ADC_CH->sample_time);
/*軟件觸發(fā)注入組轉(zhuǎn)換*/
adc_software_trigger_enable(ADC->adc_port, ADC_INSERTED_CHANNEL);
/*等待EOIC置起 */
while(RESET == adc_flag_get(ADC->adc_port,ADC_FLAG_EOIC));
/*清除EOIC標(biāo)志位*/
adc_flag_clear(ADC->adc_port,ADC_FLAG_EOIC);
/*將注入組轉(zhuǎn)換結(jié)果作為返回值*/
return ADC_IDATA0(ADC->adc_port);
}
return 0;
}

讀者可以讀以上代碼的注釋來分析這個(gè)函數(shù),強(qiáng)調(diào)下,判斷規(guī)則組轉(zhuǎn)換完成用EOC標(biāo)志位,注入組用EOIC。另外這個(gè)函數(shù)返回值是16位,但如果使用了規(guī)則并行或注入并行的話,該函數(shù)還需要稍作調(diào)整,讀者可以思考下該如何修改?

11.4.3Power_detect ADC設(shè)置所需要的參數(shù)及IO口結(jié)構(gòu)體定義

在bsp_adc.c中,對(duì)Power_detect_ADC設(shè)置所需要的參數(shù)及IO擴(kuò)結(jié)構(gòu)體進(jìn)行了定義:

C
typdef_adc_ch_general Power_detect_ADC= {
.rcu_adc = RCU_ADC2,//ADC2的時(shí)鐘
.adc_psc = RCU_CKADC_CKAPB2_DIV6,//ADC2設(shè)置為APB2 6分頻
.adc_port = ADC2,//ADC口為ADC2
.adc_mode = ADC_MODE_FREE,//ADC模式為獨(dú)立模式
.adc_channel_group = ADC_REGULAR_CHANNEL,//使用規(guī)則組
.adc_scan_function = DISABLE,//關(guān)閉掃描模式
.adc_continuous_function = DISABLE,//關(guān)閉循環(huán)模式
.ch_count = 1,//轉(zhuǎn)換長(zhǎng)度為1
.dma_parameter = {0},//不使用DMA
.trigger_source = ADC0_1_2_EXTTRIG_REGULAR_NONE,//ADC觸發(fā)源選擇為軟件觸發(fā)
.DMA_mode = DISABLE//不使用DMA
};
//ADC通道參數(shù)配置,包括IO口,和對(duì)應(yīng)通道以及采樣周期
typdef_adc_ch_parameter Power_detect_ch_parameter=
{
.rcu_port = RCU_GPIOF,//GPIOF時(shí)鐘
.port = GPIOF,//GPIO port
.pin = GPIO_PIN_6,//PF6
.gpio_speed = GPIO_OSPEED_10MHZ,//PF6速度設(shè)置為10MHz
.adc_channel = ADC_CHANNEL_4,//PF6是ADC2的通道4
.sample_time = ADC_SAMPLETIME_55POINT5//設(shè)置采樣周期為55.5
};

11.4.4Power_detect ADC初始化和讀Power_detect的具體實(shí)現(xiàn)函數(shù)

在bsp_adc.c中定義了Power_detect ADC初始化和讀Power_detect的具體實(shí)現(xiàn)函數(shù):

C
uint16_t Power_detect_data = 0;
void bsp_Power_detect_ADC_config()
{
driver_adc_config(&Power_detect_ADC,&Power_detect_ch_parameter);
}
void bsp_Power_detect_data_get()
{
Power_detect_data = driver_adc_transform_polling(&Power_detect_ADC,&Power_detect_ch_parameter);
}

11.4.5main函數(shù)實(shí)現(xiàn)

C
int main(void)
{
driver_init();//延時(shí)函數(shù)初始化
bsp_uart_init(&BOARD_UART);//BOARD_UART串口初始化
bsp_Power_detect_ADC_config();//Power_detect ADC配置
while (1)
{
delay_ms(1000);//延時(shí)1s
bsp_Power_detect_data_get();//獲取Power_detect數(shù)據(jù)
printf(" the Power_detect data is %d \r\n", Power_detect_data);//打印Power_detect數(shù)據(jù)
printf(" the Power voltage is %.2f V \r\n", (float)Power_detect_data/4096*3.3f*2);//輸出供電電壓值
}
}

本例程main函數(shù)首先進(jìn)行了延時(shí)函數(shù)初始化,為了演示實(shí)驗(yàn)結(jié)果,這里初始化了BOARD_UART串口,關(guān)于串口的使用,請(qǐng)讀者參考串口章節(jié),然后是Power_detect ADC配置。在主循環(huán)中實(shí)現(xiàn)每秒鐘進(jìn)行一次Power_detect的ADC采樣,并將轉(zhuǎn)換結(jié)果打印出來。

11.5實(shí)驗(yàn)結(jié)果

使用USB-TypeC線,連接電腦和板上USB to UART口后,配置好串口調(diào)試助手,即可看到Power_detect打印數(shù)據(jù)了。

wKgaomZlEF2AEmzEABJQDjpDbLg902.pngwKgZomZlEGeALd19AAAWDNF96R4411.png

教程GD32 MCU方案商聚沃科技原創(chuàng)發(fā)布,了解更多GD32 MCU教程,關(guān)注聚沃科技官網(wǎng)

聲明:本文內(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)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6062

    文章

    44915

    瀏覽量

    646698
  • adc
    adc
    +關(guān)注

    關(guān)注

    99

    文章

    6635

    瀏覽量

    548210
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5499

    瀏覽量

    102131
  • GD32
    +關(guān)注

    關(guān)注

    7

    文章

    418

    瀏覽量

    25140
收藏 人收藏

    評(píng)論

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

    GD32F303】星空介紹

    一、開發(fā)板介紹星空GD開發(fā)板是由旗點(diǎn)科技推出的一款GD32開發(fā)板,板載
    發(fā)表于 09-11 17:55

    【星空GD32F303開發(fā)板試用體驗(yàn)】開箱+環(huán)境搭建

    開發(fā)板。感謝旗點(diǎn)科技創(chuàng)始人 連志安提供資料及視頻 。SF速運(yùn)包含開發(fā)板電源適配器(5v2A).我準(zhǔn)備采用適配器供電,需將電源切換開關(guān)置于右側(cè)(VDD5V 側(cè))看下資源,使用此 星空
    發(fā)表于 10-18 14:15

    【星空GD32F303開發(fā)板試用體驗(yàn)】開箱+環(huán)境搭建

    GD32F303開發(fā)板。感謝旗點(diǎn)科技創(chuàng)始人 連志安提供資料及視頻 。順風(fēng)速運(yùn)包含開發(fā)板電源適配器(5v2A).我準(zhǔn)備采用適配器供電,需將
    發(fā)表于 11-02 15:36

    【星空GD32F303開發(fā)板試用體驗(yàn)】+板卡概覽

    本帖最后由 cooldog123pp 于 2021-11-6 21:07 編輯 星空GD開發(fā)板是由旗點(diǎn)科技推出的一款GD32開發(fā)板
    發(fā)表于 11-06 21:05

    星空GD32F303開發(fā)板的相關(guān)資料下載

    一、開發(fā)板介紹星空GD開發(fā)板是由旗點(diǎn)科技推出的一款GD32開發(fā)板,板載
    發(fā)表于 12-10 08:27

    STM32CUBEMX開發(fā)GD32F303(10)----雙ADC輪詢模式掃描多個(gè)通道

    本章STM32CUBEMX配置STM32F103,并且在GD32F303中進(jìn)行開發(fā),同時(shí)通過GD32303C_START開發(fā)板內(nèi)進(jìn)行驗(yàn)證。需
    的頭像 發(fā)表于 11-29 17:38 ?2304次閱讀
    STM32CUBEMX<b class='flag-5'>開發(fā)</b><b class='flag-5'>GD32F303</b>(10)----雙<b class='flag-5'>ADC</b>輪詢模式掃描多個(gè)<b class='flag-5'>通道</b>

    STM32CUBEMX開發(fā)GD32F303(11)----ADC在DMA模式下掃描多個(gè)通道

    本章STM32CUBEMX配置STM32F103,并且在GD32F303中進(jìn)行開發(fā),同時(shí)通過GD32303C_START開發(fā)板內(nèi)進(jìn)行驗(yàn)證。
    的頭像 發(fā)表于 11-30 10:59 ?3169次閱讀
    STM32CUBEMX<b class='flag-5'>開發(fā)</b><b class='flag-5'>GD32F303</b>(11)----<b class='flag-5'>ADC</b>在DMA模式下掃描多個(gè)<b class='flag-5'>通道</b>

    STM32CUBEMX開發(fā)GD32F303(14)----IIC之配置OLED

    本章STM32CUBEMX配置STM32F103,并且在GD32F303中進(jìn)行開發(fā),同時(shí)通過開發(fā)板內(nèi)進(jìn)行驗(yàn)證。
    的頭像 發(fā)表于 07-26 13:52 ?2595次閱讀
    STM32CUBEMX<b class='flag-5'>開發(fā)</b><b class='flag-5'>GD32F303</b>(14)----IIC之配置OLED

    GD32F303固件庫(kù)開發(fā)

    的可以加群申請(qǐng):615061293 。 GD32F303固件庫(kù)開發(fā)(1)----前期準(zhǔn)備與燒錄 使用GDLINK、jlink、串口下載程序到GD芯片。 [https://blog.csdn.net
    的頭像 發(fā)表于 07-27 09:27 ?1616次閱讀
    <b class='flag-5'>GD32F303</b>固件庫(kù)<b class='flag-5'>開發(fā)</b>

    GD32F470紫藤開發(fā)板使用手冊(cè)】第八講 ADC-規(guī)則組多通道采樣實(shí)驗(yàn)

    通過本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容: ?ADC的簡(jiǎn)介 ?GD32F470 ADC工作原理 ?DMA原理 ?規(guī)則組多通道循環(huán)采樣
    的頭像 發(fā)表于 05-12 10:00 ?1313次閱讀
    【<b class='flag-5'>GD32F</b>470紫藤<b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】第八講 <b class='flag-5'>ADC-</b>規(guī)則組多<b class='flag-5'>通道</b>采樣<b class='flag-5'>實(shí)驗(yàn)</b>

    GD32F303紅楓開發(fā)板使用手冊(cè)】第五講 FMC-片內(nèi)Flash擦寫讀實(shí)驗(yàn)

    MC即Flash控制器,其提供了片上Flash操作所需要的所有功能,在GD32F303系列MCU中,F(xiàn)lash前256K字節(jié)空間內(nèi),?CPU執(zhí)行指令零等待,具有相同主頻下最快的代碼執(zhí)行效率。FMC也
    的頭像 發(fā)表于 06-02 10:05 ?1287次閱讀
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>紅楓</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】第五講 FMC-片內(nèi)Flash擦寫讀<b class='flag-5'>實(shí)驗(yàn)</b>

    GD32F303紅楓開發(fā)板使用手冊(cè)第十二講 ADC-雙軸按鍵搖桿多通道循環(huán)采樣實(shí)驗(yàn)

    實(shí)驗(yàn)是通過ADC規(guī)則組多通道循環(huán)采樣方式實(shí)現(xiàn)雙軸按鍵搖桿傳感器x和y軸電壓值的讀取,通過本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容: ?雙軸按鍵搖桿傳感器工作
    的頭像 發(fā)表于 06-11 09:40 ?1034次閱讀
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>紅楓</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】<b class='flag-5'>第十</b>二講   <b class='flag-5'>ADC-</b>雙軸按鍵搖桿多<b class='flag-5'>通道</b>循環(huán)采樣<b class='flag-5'>實(shí)驗(yàn)</b>

    GD32F303紅楓開發(fā)板使用手冊(cè)第十三講 ADC-內(nèi)部溫度傳感器和參考電壓采樣實(shí)驗(yàn)

    實(shí)驗(yàn)是通過ADC注入組采樣內(nèi)部溫度傳感器和參考電壓,通過本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容: ?內(nèi)部溫度傳感器和參考電壓簡(jiǎn)介 ?
    的頭像 發(fā)表于 06-12 09:47 ?1261次閱讀
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>紅楓</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】<b class='flag-5'>第十</b>三講 <b class='flag-5'>ADC-</b>內(nèi)部溫度傳感器和參考<b class='flag-5'>電壓</b>采樣<b class='flag-5'>實(shí)驗(yàn)</b>

    GD32F303紅楓開發(fā)板使用手冊(cè)第十六講 USART-DMA串口收發(fā)實(shí)驗(yàn)

    在前面ADC章節(jié)中,我們介紹了DMA的工作原理,這里就不多做介紹。從GD32F303用戶手冊(cè)中可以查到,各串口的TX和RX分別對(duì)應(yīng)DMA的不同通道,比如USART0的TX對(duì)應(yīng)DMA0的
    的頭像 發(fā)表于 06-15 09:54 ?1725次閱讀
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>紅楓</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】<b class='flag-5'>第十</b>六講 USART-DMA串口收發(fā)<b class='flag-5'>實(shí)驗(yàn)</b>

    GD32F303紅楓開發(fā)板使用手冊(cè)】第二十講 SPI-SPI NAND FLASH讀寫實(shí)驗(yàn)

    通過本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容: ?SPI通信協(xié)議,參考19.2.1東方紅開發(fā)板使用手冊(cè) ?GD32F303 SPI操作方式,參考19.2.2東方紅
    的頭像 發(fā)表于 06-20 09:50 ?1630次閱讀
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>紅楓</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】第二十講 SPI-SPI NAND FLASH讀寫<b class='flag-5'>實(shí)驗(yàn)</b>