本文介绍了灵动 Mini-F5375-OB 开发板实现AD转换并通过串口通信输出测量结果。
硬件连接:利用PA0、PA1读取电位器分压后的电压,并通过开发板的PC10、PC11作为UART3输出,串口输出通过USB转TTL接口板连接电脑。
AD初始化代码:
void ADC_Configure(void)
{
ADC_InitTypeDef ADC_InitStruct;
DMA_InitTypeDef DMA_InitStruct;
GPIO_InitTypeDef GPIO_InitStruct;
NVIC_InitTypeDef NVIC_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
ADC_CalibrationConfig(ADC1, 0x1FE);
ADC_StructInit(&ADC_InitStruct);
ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStruct.ADC_Prescaler = ADC_Prescaler_16;
ADC_InitStruct.ADC_Mode = ADC_Mode_Continue;
ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
ADC_Init(ADC1, &ADC_InitStruct);
ADC_DMACmd(ADC1, ENABLE);
ADC_SampleTimeConfig(ADC1, ADC_Channel_0, ADC_SampleTime_240_5);
ADC_SampleTimeConfig(ADC1, ADC_Channel_1, ADC_SampleTime_240_5);
ADC_AnyChannelNumCfg(ADC1, 1);
ADC_AnyChannelSelect(ADC1, ADC_AnyChannel_0, ADC_Channel_0);
ADC_AnyChannelSelect(ADC1, ADC_AnyChannel_1, ADC_Channel_1);
ADC_AnyChannelCmd(ADC1, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
/* PA4(ROT1) PA5(POT2) */
GPIO_StructInit(&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStruct);
ADC_Cmd(ADC1, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
DMA_DeInit(DMA1_Channel1);
DMA_StructInit(&DMA_InitStruct);
DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t)&(ADC1->ADDATA);
DMA_InitStruct.DMA_MemoryBaseAddr = (uint32_t)&ADC_Buffer;
DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStruct.DMA_BufferSize = 20;
DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
DMA_InitStruct.DMA_Mode = DMA_Mode_Circular;
DMA_InitStruct.DMA_Priority = DMA_Priority_High;
DMA_InitStruct.DMA_M2M = DMA_M2M_Disable;
DMA_InitStruct.DMA_Auto_Reload = DMA_Auto_Reload_Disable;
DMA_Init(DMA1_Channel1, &DMA_InitStruct);
DMA_ClearFlag(DMA1_FLAG_TC1);
DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);
NVIC_InitStruct.NVIC_IRQChannel = DMA1_CH1_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);
DMA_Cmd(DMA1_Channel1, ENABLE);
}
串口初始化代码:
void PLATFORM_InitConsole(uint32_t Baudrate)
{
GPIO_InitTypeDef GPIO_InitStruct;
USART_InitTypeDef USART_InitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
USART_StructInit(&USART_InitStruct);
USART_InitStruct.USART_BaudRate = Baudrate;
USART_InitStruct.USART_StopBits = USART_StopBits_1;
USART_InitStruct.USART_Parity = USART_Parity_No;
USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART3, &USART_InitStruct);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_7); //PC11/UART3_RX PC10/UART3_TX
GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_7); //PC11/UART3_RX PC10/UART3_TX
GPIO_StructInit(&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOC, &GPIO_InitStruct);
USART_Cmd(USART3, ENABLE);
}
功能函数代码:
void ADC_AnyChannel_ContinuousScan_DMA_Interrupt_Sample(void)
{
uint8_t i = 0, j = 0;
uint32_t RVxSum = 0;
float RVxAverage[2], RVxVoltage[2];
printf("\r\nTest %s", __FUNCTION__);
ADC_Configure();
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while (1)
{
if (0 != ADC_DMA_InterruptFlag)
{
ADC_DMA_InterruptFlag = 0;
for (i = 0; i < 2; i++)
{
RVxSum = 0;
for (j = 0; j < 10; j++)
{
RVxSum += ADC_Buffer[i + j * 2];
}
RVxAverage[i] = (float)RVxSum / (float)10.0;
}
printf("\r\n");
for (i = 0; i < 2; i++)
{
RVxVoltage[i] = RVxAverage[i] * (float)3.3 / (float)4096.0;
printf("POT%d Voltage = %0.2f\t", i + 1, RVxVoltage[i]);
}
}
}
}
输出显示:采用SSCOM V5.13.1进行显示,串口设置为波特率115200,8位数据位,1位停止位。无校验和流控制。
总结:
本文介绍了灵动 Mini-F5375-OB 开发板AD转换功能、DMA功能以及串口通讯的初始化和使用,熟悉了LIB库的使用方法。