DMA:
1.使用DAC的時(shí)候,將轉(zhuǎn)化后得到的模擬信號(hào)通過(guò)IO口輸出的時(shí)候,為什么還將IO口配置能輸入模式
PS:stm32手冊(cè)上定義PA4和PA5分別和DAC1通道和DAC2通道相連 ;
DMA1和DMA2使用按個(gè)通道手冊(cè)中也是有規(guī)定的:
波形數(shù)據(jù)從內(nèi)存帶DAC是怎么DMA是怎么傳輸?shù)???/p>
/* 配置DMA2 */
DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR12RD_Address;//外設(shè)數(shù)據(jù)地址
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&DualSine12bit ;//內(nèi)存數(shù)據(jù)地址 DualSine12bit
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;//數(shù)據(jù)傳輸方向內(nèi)存至外設(shè)
DMA_InitStructure.DMA_BufferSize = 32;//緩存大小為32字節(jié)
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外設(shè)數(shù)據(jù)地址固定
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//內(nèi)存數(shù)據(jù)地址自增
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; //外設(shè)數(shù)據(jù)以字為單位
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;//內(nèi)存數(shù)據(jù)以字為單位
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;//循環(huán)模式
DMA_InitStructure.DMA_Priority = DMA_Priority_High;//高DMA通道優(yōu)先級(jí)
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;//非內(nèi)存至內(nèi)存模式
DMA_Init(DMA2_Channel4, &DMA_InitStructure);
當(dāng)傳輸?shù)奈覀償?shù)據(jù)大小為32位 的時(shí)候,發(fā)送給DAC轉(zhuǎn)化,
DMA通道選擇:
外設(shè)請(qǐng)求使用DMA傳輸?shù)臅r(shí)候,關(guān)于DMA通道的選擇其stm32手冊(cè)上都有規(guī)定的,需要我們對(duì)應(yīng)手冊(cè)去查詢(xún)
ADC通道:
函數(shù)ADC_RegularChannelConfig( )。
假設(shè)我們使用了PC0
ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_55Cycles5)可
以配置通道的采樣周期。該函數(shù)有4個(gè)參數(shù),第一個(gè)參數(shù)指使用哪個(gè)ADC,我們選ADC1。第
二個(gè)參數(shù),本次采樣使用的通道,我們選擇ADC_Channel_10。第三個(gè)參數(shù),采樣順序。本
實(shí)驗(yàn)我們只有一個(gè)采樣,直接給它賦值為:1.。第四個(gè)參數(shù),配置采樣周期。
這里PC0管腳是AD的ADC_Channel_10輸入通道,這個(gè)通道并不是隨意的選擇的,在ST
提供的手冊(cè)《【英文】STM32F107VC數(shù)據(jù)手冊(cè)V6.pdf》中,有對(duì)應(yīng)的說(shuō)明:
譯注:(具體見(jiàn)stm32手冊(cè))
表中的引腳名稱(chēng)標(biāo)注中出現(xiàn)的ADC12_INx(x表示4~9或14~15之間的整數(shù)),表示這個(gè)引腳可以是
ADC1_INx或ADC2_INx。例如:ADC12_IN9表示這個(gè)引腳可以配置為ADC1_IN9,也可以配置為
ADC2_IN9。
同樣,表中的引腳名稱(chēng)標(biāo)注中出現(xiàn)的ADC123_INx(x表示0~3或10~13之間的整數(shù)),表示這個(gè)引腳可
以是ADC1_INx或ADC2_INx或ADC3_INx。
串口:
//P:串口接收從io口中傳來(lái)的數(shù)據(jù)
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //P:配置串口傳輸?shù)淖珠L(zhǎng),一個(gè)字符一個(gè)字符的接受