refactor: update adc dma example

This commit is contained in:
IOsetting 2023-01-10 00:24:03 +08:00
parent 7fcfcdbb2f
commit c920de408e
2 changed files with 9 additions and 20 deletions

View File

@ -25,6 +25,7 @@
#include "py32f0xx_bsp_printf.h"
/* Private define ------------------------------------------------------------*/
#define BUF_SIZE 1024
/* Private variables ---------------------------------------------------------*/
/* Private user code ---------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
@ -38,7 +39,7 @@ ADC_ChannelConfTypeDef sConfig;
TIM_HandleTypeDef TimHandle;
TIM_OC_InitTypeDef OCConfig;
TIM_MasterConfigTypeDef sMasterConfig;
uint32_t gADCxConvertedData = 1;
uint32_t gADCxConvertedData[BUF_SIZE];
/* Private user code ---------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
@ -57,8 +58,8 @@ int main(void)
{
if (__HAL_DMA_GET_FLAG(DMA1, DMA_ISR_TCIF1))
{
printf("ADC: %ld %ld %ld\r\n", *gADCxConvertedData, *(gADCxConvertedData + 1), *(gADCxConvertedData + 2));
__HAL_DMA_CLEAR_FLAG(DMA1, DMA_IFCR_CTCIF1);
printf("ADC: %ld \r\n", gADCxConvertedData);
}
}
}
@ -77,7 +78,7 @@ static void APP_AdcConfig(void)
AdcHandle.Instance = ADC1;
AdcHandle.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV1; /* ADC clock */
AdcHandle.Init.Resolution = ADC_RESOLUTION_12B; /* Resolution can be 6bit, 8bit, 10bit, 12bit */
AdcHandle.Init.Resolution = ADC_RESOLUTION_12B; /* Valid resolution is around 8 bit */
AdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT; /* Right alignment */
AdcHandle.Init.ScanConvMode = ADC_SCAN_DIRECTION_BACKWARD;
AdcHandle.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
@ -101,7 +102,7 @@ static void APP_AdcConfig(void)
APP_ErrorHandler();
}
if (HAL_ADC_Start_DMA(&AdcHandle, &gADCxConvertedData, 1) != HAL_OK)
if (HAL_ADC_Start_DMA(&AdcHandle, gADCxConvertedData, BUF_SIZE) != HAL_OK)
{
APP_ErrorHandler();
}

View File

@ -29,7 +29,6 @@
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
static DMA_HandleTypeDef HdmaCh1;
extern uint32_t aADCxConvertedData;
/* Private function prototypes -----------------------------------------------*/
/* External functions --------------------------------------------------------*/
@ -56,27 +55,16 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc)
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/*
* DMA1_MAP:
* 00000:ADC 00001:SPI1_TX 00010:SPI1_RX 00011:Reserved
* 00100:Reserved 00101:USART1_TX 00110:USART1_RX 00111:USART2_TX
* 01000:USART2_RX 01001:I2C_TX 01010:I2C_RX 01011:TIM1_CH1
* 01100:TIM1_CH2 01101:TIM1_CH3 01110:TIM1_CH4 01111:TIM1_COM
* 10000:TIM1_UP 10001:TIM1_TRIG 10010:TIM3_CH1 10011:TIM3_CH3
* 10100:TIM3_CH4 10101:TIM3_TRG 10110:TIM3_UP 10111:Reserved
* 11000:TIM16_CH1 11001:TIM16_UP 11010:TIM17_CH1 11011:TIM17_UP
* Others:Reserved
*/
HAL_SYSCFG_DMA_Req(0); /* DMA1_MAP Set to ADC */
HAL_SYSCFG_DMA_Req(DMA_CHANNEL_MAP_ADC); /* DMA1_MAP Set to ADC */
HdmaCh1.Instance = DMA1_Channel1;
HdmaCh1.Init.Direction = DMA_PERIPH_TO_MEMORY;
HdmaCh1.Init.PeriphInc = DMA_PINC_DISABLE;
HdmaCh1.Init.MemInc = DMA_MINC_DISABLE;
HdmaCh1.Init.MemInc = DMA_MINC_ENABLE;
HdmaCh1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
HdmaCh1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
HdmaCh1.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
HdmaCh1.Init.Mode = DMA_CIRCULAR;
HdmaCh1.Init.Priority = DMA_PRIORITY_VERY_HIGH;
HdmaCh1.Init.Priority = DMA_PRIORITY_HIGH;
HAL_DMA_DeInit(&HdmaCh1);
HAL_DMA_Init(&HdmaCh1);