請問CH32F103R8T6的DMA和DAC問題

之前使用的是stm32,單位采購替換了貴公司的CH32F103R8T6,使用HAL庫配置DAC_CH2和DMA circle模式,如何正確修改?

原來的程序如下:


主函數(shù)中語句

HAL_DAC_Start_DMA(&hdac,DAC_CHANNEL_2,DAC1_Value,1,DAC_ALIGN_12B_R);


dac.c中語句

void MX_DAC_Init(void)

{

? DAC_ChannelConfTypeDef sConfig = {0};

? hdac.Instance = DAC;

? if (HAL_DAC_Init(&hdac) != HAL_OK)

? {

? ? Error_Handler();

? }

? sConfig.DAC_Trigger = DAC_TRIGGER_NONE;

? sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_DISABLE;

? if (HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_2) != HAL_OK)

? {

? ? Error_Handler();

? }

}


void HAL_DAC_MspInit(DAC_HandleTypeDef* dacHandle)

{


? GPIO_InitTypeDef GPIO_InitStruct = {0};

? if(dacHandle->Instance==DAC)

? {

? ? __HAL_RCC_DAC_CLK_ENABLE();

? ? __HAL_RCC_GPIOA_CLK_ENABLE();


? ? GPIO_InitStruct.Pin = DAC_Pin;

? ? GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;

? ? HAL_GPIO_Init(DAC_GPIO_Port, &GPIO_InitStruct);


? ? hdma_dac_ch2.Instance = DMA2_Channel4;

? ? hdma_dac_ch2.Init.Direction = DMA_MEMORY_TO_PERIPH;

? ? hdma_dac_ch2.Init.PeriphInc = DMA_PINC_DISABLE;

? ? hdma_dac_ch2.Init.MemInc = DMA_MINC_ENABLE;

? ? hdma_dac_ch2.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;

? ? hdma_dac_ch2.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;

? ? hdma_dac_ch2.Init.Mode = DMA_CIRCULAR;

? ? hdma_dac_ch2.Init.Priority = DMA_PRIORITY_LOW;

? ? if (HAL_DMA_Init(&hdma_dac_ch2) != HAL_OK)

? ? {

? ? ? Error_Handler();

? ? }


? ? __HAL_LINKDMA(dacHandle,DMA_Handle2,hdma_dac_ch2);

? }

}


嘗試將DMA2_Channel4修改為DMA1_Channel4,無輸出;不使用DMA可以正常輸出

您好,關(guān)于DAC和DMA的問題,主要區(qū)別在于CH32F103只有一個(gè)DMA,其中DAC-CH2輸出對應(yīng)PA5引腳,對應(yīng)DMA通道為DMA1通道4,在使用DMA的時(shí)候,注意要使能DMA時(shí)鐘,在你附的代碼中沒有看到DMA時(shí)鐘的使能,你可以檢查一下代碼中是否有遺漏。后續(xù)若有問題,可將問題發(fā)我郵箱(lzs@wch.cn)聯(lián)系。



void MX_DMA_Init(void)

{


? /* DMA controller clock enable */

? __HAL_RCC_DMA1_CLK_ENABLE();

//? __HAL_RCC_DMA2_CLK_ENABLE();


? /* DMA interrupt init */

? /* DMA1_Channel1_IRQn interrupt configuration */

//? HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0);

//? HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);

//? /* DMA1_Channel2_IRQn interrupt configuration */

//? HAL_NVIC_SetPriority(DMA1_Channel2_IRQn, 0, 0);

//? HAL_NVIC_EnableIRQ(DMA1_Channel2_IRQn);

//? /* DMA1_Channel3_IRQn interrupt configuration */

//? HAL_NVIC_SetPriority(DMA1_Channel3_IRQn, 0, 0);

//? HAL_NVIC_EnableIRQ(DMA1_Channel3_IRQn);

//? /* DMA1_Channel6_IRQn interrupt configuration */

//? HAL_NVIC_SetPriority(DMA1_Channel6_IRQn, 0, 0);

//? HAL_NVIC_EnableIRQ(DMA1_Channel6_IRQn);

//? /* DMA2_Channel4_5_IRQn interrupt configuration */

//? HAL_NVIC_SetPriority(DMA2_Channel4_5_IRQn, 0, 0);

//? HAL_NVIC_EnableIRQ(DMA2_Channel4_5_IRQn);


}


DMA時(shí)鐘使能了


HAL_DAC_Start_DMA(&hdac,DAC_CHANNEL_2,DAC1_Value,1,DAC_ALIGN_12B_R);函數(shù)內(nèi)不知道需要修改哪些語句,通過郵件發(fā)送過去了,能幫我看一下嗎


您好,郵件已回復(fù),請注意查收


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频