【CW32L052测评】 段码LCD显示ADC采样电压值
[复制链接]
这篇来学习下CW32L052芯片ADC电压采样,将采样的电压值显示在LCD上。
一、硬件电路
和ADC有关的硬件部分外围电路有模拟电源引脚AVDD和AVSS。以及模拟信号输入的引脚。
开发板上AVDD电源连接电路,连接到电源。
有关ADC输入引脚,手册中的定义
二、程序部分
2.1、fun_adc.c
#include "main.h"
void init_adc(void)
{
ADC_InitTypeDef ADC_InitStruct;
__RCC_ADC_CLK_ENABLE();
ADC_InitStruct.ADC_AccEn = DISABLE;
ADC_InitStruct.ADC_Align = ADC_AlignRight;
ADC_InitStruct.ADC_ClkDiv = ADC_Clk_Div2; // ADCCLK=16MHz
ADC_InitStruct.ADC_InBufEn = DISABLE;
ADC_InitStruct.ADC_OpMode = ADC_SingleChOneMode;
ADC_InitStruct.ADC_SampleTime = ADC_SampTime5Clk;
ADC_InitStruct.ADC_TsEn = DISABLE;
ADC_InitStruct.ADC_VrefSel = ADC_Vref_VDDA;
ADC_Init(&ADC_InitStruct);
ADC_Enable();
}
uint16_t adc_readval(uint8_t ch)
{
CW_ADC->CR1_f.CHMUX = ch;
ADC_SoftwareStartConvCmd(ENABLE);
while(CW_ADC->START_f.START);
return CW_ADC->RESULT0;
}
2.2、fun_adc.h
#ifndef __FUN_ADC_H
#define __FUN_ADC_H
#include "base_types.h"
void init_adc(void);
uint16_t adc_readval(uint8_t ch);
#endif
2.3、mian.c
int32_t main(void)
{
uint8_t dp[8];
uint8_t i=0;
uint16_t tp=0;
uint32_t dp1=0;
uint32_t dp_temp=0;
GPIO_InitTypeDef GPIO_InitStruct = {0};
rcc_config();
init_uart();
init_led();
init_adc();
init_spi_flash();
InitTick( 48000000 ); //初始化SysTick
LCD_Configuration();
SPI_FLASH_Test();
dp[0]=disp[0];
dp[1]=disp[0];
dp[2]=disp[0];
dp[3]=disp[0];
dp[4]=disp[0];
dp[5]=disp[0];
dp[6]=disp[0];
dp[7]=disp[0];
while (1)
{
float adv=0.0;
tp=(adc_readval(1)*33)/4096;
dp[4]=disp[tp/1000];
dp[3]=disp[((tp%1000)/100)];
dp[2]=disp_p[((tp%1000)%100)/10];
dp[1]=disp[((tp%1000)%100)%10];
dp[0]=0x4c;
led2_tog();
SysTickDelay(100);
lcd_disp(dp);
adv=tp*0.1;
printf("ADC value = %1.1f \r\n",adv );
}
}
三、程序运行
下载程序后,运行开发板,调节采样电压电位器串口输出
运行视频
adc
|