初级会员

- 积分
- 55
- 金钱
- 55
- 注册时间
- 2021-9-8
- 在线时间
- 7 小时
|
ADC.c中
ADC_HandleTypeDef ADC1_Handler;//ADC3õê¼»ˉ¾ä±ú
ADC_ChannelConfTypeDef ADC1_ChanConf;//í¨μàμľä±ú
DMA_HandleTypeDef ADC1TxDMA_Handler; //DMA¾ä±ú
//ADC_MultiModeTypeDef ADC1_ModeTypeDef;
u16 adc_buf[15];
//3õê¼»ˉADC
//ch: ADC_channels
//í¨μàÖμ 0~16è¡Öμ·¶Î§Îa£oADC_CHANNEL_0~ADC_CHANNEL_16
//sum£o¼¸¸öDòáD£¨í¨μࣩ
void MY_ADC_Init(u8 sum)
{
// ADC1_ModeTypeDef.Mode=ADC_MODE_INDEPENDENT;
// ADC1_ModeTypeDef.TwoSamplingDelay=ADC_TWOSAMPLINGDELAY_5CYCLES;
// ADC1_ModeTypeDef.DMAAccessMode=ADC_DMAACCESSMODE_DISABLED;
//
// HAL_ADCEx_MultiModeConfigChannel(&ADC1_Handler,&ADC1_ModeTypeDef);
__HAL_RCC_DMA2_CLK_ENABLE(); //ê1ÄüDMA2μÄê±Öó
//Tx DMAÅäÖÃ
ADC1TxDMA_Handler.Instance=DMA2_Stream0; //êy¾Yá÷Ñ¡Ôñ
ADC1TxDMA_Handler.Init.Channel=DMA_CHANNEL_0; //í¨μàÑ¡Ôñ
ADC1TxDMA_Handler.Init.Direction=DMA_PERIPH_TO_MEMORY; //íaéèμ½′æ′¢Æ÷
ADC1TxDMA_Handler.Init.PeriphInc=DMA_PINC_DISABLE; //íaéè·ÇÔöá¿Ä£ê½
ADC1TxDMA_Handler.Init.MemInc=DMA_MINC_ENABLE; //′æ′¢Æ÷Ôöá¿Ä£ê½
ADC1TxDMA_Handler.Init.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD; //íaéèêy¾Y3¤¶è:°ë×Ö16λ
ADC1TxDMA_Handler.Init.MemDataAlignment=DMA_MDATAALIGN_HALFWORD; //′æ′¢Æ÷êy¾Y3¤¶è:8λ
ADC1TxDMA_Handler.Init.Mode=DMA_NORMAL; //íaéèá÷¿ØÄ£ê½(Õy3£Ä£ê½)
ADC1TxDMA_Handler.Init.Priority=DMA_PRIORITY_MEDIUM; //ÖDμèóÅÏ輶
ADC1TxDMA_Handler.Init.FIFOMode=DMA_FIFOMODE_DISABLE;
ADC1TxDMA_Handler.Init.FIFOThreshold=DMA_FIFO_THRESHOLD_HALFFULL ;
ADC1TxDMA_Handler.Init.MemBurst=DMA_MBURST_SINGLE; //′æ′¢Æ÷í»·¢μ¥′Î′«êä
ADC1TxDMA_Handler.Init.PeriphBurst=DMA_PBURST_SINGLE; //íaéèí»·¢μ¥′Î′«êä
HAL_DMA_DeInit(&ADC1TxDMA_Handler);
HAL_DMA_Init(&ADC1TxDMA_Handler);
__HAL_LINKDMA(&ADC1_Handler,DMA_Handle,ADC1TxDMA_Handler); //½«DMAóëUSART1áaÏμÆeà′(·¢ËíDMA)
/* NVIC configuration for DMA transfer complete interrupt */
HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 1, 0); //??????????
HAL_NVIC_EnableIRQ(DMA2_Stream0_IRQn); //??DMA?????
ADC1_Handler.Instance=ADC1;
ADC1_Handler.Init.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV4; //4·ÖÆ죬ADCCLK=PCLK2/4=108/4=27MHZ
ADC1_Handler.Init.Resolution=ADC_RESOLUTION_12B; //12λÄ£ê½
ADC1_Handler.Init.DataAlign=ADC_DATAALIGN_RIGHT; //óò¶ÔÆë
ADC1_Handler.Init.ScanConvMode=ENABLE; //é¨ÃèÄ£ê½
ADC1_Handler.Init.EOCSelection=ADC_EOC_SINGLE_CONV; //1رÕEOCÖD¶Ï
ADC1_Handler.Init.ContinuousConvMode=ENABLE; //á¬Dø×a»»
ADC1_Handler.Init.NbrOfConversion=sum; //2¸ö×a»»Ôú1æÔòDòáDÖD ¼¸¸öêǼ¸
ADC1_Handler.Init.DiscontinuousConvMode=DISABLE; //½ûÖ12»á¬Dø2éÑùÄ£ê½
ADC1_Handler.Init.NbrOfDiscConversion=0; //2»á¬Dø2éÑùí¨μàêyÎa0
ADC1_Handler.Init.ExternalTrigConv=ADC_SOFTWARE_START; //èí¼t′¥·¢
ADC1_Handler.Init.ExternalTrigConvEdge=ADC_EXTERNALTRIGCONVEDGE_NONE;//ê1óÃèí¼t′¥·¢
ADC1_Handler.Init.DMAContinuousRequests=ENABLE; //1رÕDMAÇëÇó
HAL_ADC_Init(&ADC1_Handler); //3õê¼»ˉ
ADC1_ChanConf.Channel=ADC_CHANNEL_0; //í¨μà
ADC1_ChanConf.Rank=1; //2¸öDòáD ¼¸¸öêǼ¸
ADC1_ChanConf.SamplingTime=ADC_SAMPLETIME_480CYCLES; //2éÑùê±¼ä
ADC1_ChanConf.Offset=0;
HAL_ADC_ConfigChannel(&ADC1_Handler,&ADC1_ChanConf); //í¨μàÅäÖÃ
ADC1_ChanConf.Channel=ADC_CHANNEL_5; //í¨μà
ADC1_ChanConf.Rank=2; //2¸öDòáD ¼¸¸öêǼ¸
ADC1_ChanConf.SamplingTime=ADC_SAMPLETIME_480CYCLES; //2éÑùê±¼ä
ADC1_ChanConf.Offset=0;
HAL_ADC_ConfigChannel(&ADC1_Handler,&ADC1_ChanConf); //í¨μàÅäÖÃ
ADC1_ChanConf.Channel=ADC_CHANNEL_TEMPSENSOR; //í¨μà
ADC1_ChanConf.Rank=3; //2¸öDòáD ¼¸¸öêǼ¸
ADC1_ChanConf.SamplingTime=ADC_SAMPLETIME_480CYCLES; //2éÑùê±¼ä
ADC1_ChanConf.Offset=0;
HAL_ADC_ConfigChannel(&ADC1_Handler,&ADC1_ChanConf); //í¨μàÅäÖÃ
HAL_ADC_Start_DMA(&ADC1_Handler,(uint32_t*)adc_buf,15); //¿aÆôADC ¾ä±ú£¬′æ′¢Æ÷μÄμØÖ·£¬3¤¶è
// HAL_ADC_PollForConversion(&ADC1_Handler,10); //ÂÖÑˉ×a»» μè′y×a»»íê3é
}
main中
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "lcd.h"
#include "sdram.h"
#include "adc.h"
#include "dma.h"
/************************************************
ALIENTEK °¢2¨ÂTSTM32F7¿a·¢°å êμÑé21
Äú2¿Î¶è′«¸DÆ÷êμÑé-HAL¿aoˉêy°æ
¼¼êõÖ§3Ö£owww.openedv.com
ìÔ±|μêÆì£ohttp://eboard.taobao.com
1Øע΢DÅ1«Öúƽì¨Î¢DÅoÅ£o"ÕyμãÔ-×ó"£¬Ãa·Ñ»ñè¡STM32×êáÏ¡£
1ãÖYêDDÇòíμç×ó¿Æ¼¼óDÏT1«Ë¾
×÷ÕߣoÕyμãÔ-×ó @ALIENTEK
************************************************/
//extern ADC_HandleTypeDef ADC1_Handler;//ADC¾ä±ú
extern u16 adc_buf[15];
float com[3];
float adc_bufmoni[3]= {0};
int main(void)
{
u16 adcx;
short temp;
Cache_Enable(); //′ò¿aL1-Cache
HAL_Init(); //3õê¼»ˉHAL¿a
Stm32_Clock_Init(432,25,2,9); //éèÖÃê±Öó,216Mhz
delay_init(216); //Ñóê±3õê¼»ˉ
uart_init(115200); //′®¿ú3õê¼»ˉ
LED_Init(); //3õê¼»ˉLED
KEY_Init(); //3õê¼»ˉ°′¼ü
SDRAM_Init(); //3õê¼»ˉSDRAM
LCD_Init(); //LCD3õê¼»ˉ
MY_ADC_Init(3); //3õê¼»ˉADC1í¨μà5//sum£o¼¸¸öDòáD£¨í¨μࣩ
// HAL_ADC_Start_DMA(&ADC1_Handler,(uint32_t*)adc_buf,15); //¿aÆôADC ¾ä±ú£¬′æ′¢Æ÷μÄμØÖ·£¬3¤¶è
MYDMA_Config(DMA2_Stream0,DMA_CHANNEL_0);
POINT_COLOR=RED;
LCD_ShowString(30,190,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(30,210,200,16,16,"2016/7/12");
POINT_COLOR=BLUE;//éèÖÃ×ÖìåÎaà¶é«
LCD_ShowString(30,230,200,16,16,"ADC1_CH5_VAL:");
LCD_ShowString(30,250,200,16,16,"ADC1_CH5_VOL:0.000V"); //ÏèÔú1춨λÖÃÏÔê¾D¡êyμã
POINT_COLOR=RED;
LCD_ShowString(30,50,200,16,16,"Apollo STM32F4/F7");
LCD_ShowString(30,70,200,16,16,"Temperature TEST");
LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(30,110,200,16,16,"2015/12/27");
POINT_COLOR=BLUE;//éèÖÃ×ÖìåÎaà¶é«
LCD_ShowString(30,140,200,16,16,"TEMPERATE: 00.00C");//ÏèÔú1춨λÖÃÏÔê¾D¡êyμã
// HAL_ADC_Start(&ADC1_Handler); //¿aÆôADC
while(1)
{
adc_bufmoni[0] = (float)adc_buf[0]/4096*(float)3.3;
adc_bufmoni[1] = (float)adc_buf[1]/4096*(float)3.3;
adc_bufmoni[2] = (float)adc_buf[2]*(3.3/4096); //μçÑ1Öμ
// adc_bufmoni[2] = (adc_bufmoni[2]-0.76)/0.0025 + 25; //×a»»ÎaζèÖμ
// adc_bufmoni[2]=adc_bufmoni[2]*=100; //à©′ó100±¶.
adcx = adc_bufmoni[0];
LCD_ShowxNum(134,190,adcx,1,16,0);
adc_bufmoni[0]-=adcx;
adc_bufmoni[0]*=1000;
LCD_ShowxNum(150,190,adc_bufmoni[0],3,16,0X80);
adcx = adc_bufmoni[1];
LCD_ShowxNum(134,210,adcx,1,16,0);
adc_bufmoni[1]-=adcx;
adc_bufmoni[1]*=1000;
LCD_ShowxNum(150,210,adc_bufmoni[1],3,16,0X80);
// adcx=Get_Adc_Average(ADC_CHANNEL_5,1,10);//»ñè¡í¨μà5μÄ×a»»Ö죬¼¸¸öDòáD£¨í¨μࣩ£¬20′Îè¡Æ½¾ù
// LCD_ShowxNum(134,230,adcx,4,16,0); //ÏÔê¾ADCC2éÑùoóμÄÔ-ê¼Öμ
// com[0]=(float)adcx*(3.3/4096); //»ñ衼ÆËãoóμÄ′øD¡êyμÄêμ¼êμçÑ1Ö죬±èèç3.1111
// adcx=com[0]; //¸3ÖμÕûêy2¿·Ö¸øadcx±äá¿£¬òòÎaadcxÎau16ÕûDÎ
// LCD_ShowxNum(134,250,adcx,1,16,0); //ÏÔê¾μçÑ1ÖμμÄÕûêy2¿·Ö£¬3.1111μÄ»°£¬Õaàï¾íêÇÏÔê¾3
// com[0]-=adcx; //°ÑòѾ-ÏÔê¾μÄÕûêy2¿·Öè¥μô£¬áôÏÂD¡êy2¿·Ö£¬±èèç3.1111-3=0.1111
// com[0]*=1000; //D¡êy2¿·Ö3ËòÔ1000£¬àyèç£o0.1111¾í×a»»Îa111.1£¬Ïàμ±óú±£áôèyλD¡êy¡£
// LCD_ShowxNum(150,250,com[0],3,16,0X80); //ÏÔê¾D¡êy2¿·Ö£¨Ç°Ãæ×a»»ÎaáËÕûDÎÏÔê¾£©£¬ÕaàïÏÔê¾μľíêÇ111.
// adcx=Get_Adc_Average(ADC_CHANNEL_0,1,10);//»ñè¡í¨μà5μÄ×a»»Ö죬¼¸¸öDòáD£¨í¨μࣩ£¬20′Îè¡Æ½¾ù
// LCD_ShowxNum(134,280,adcx,4,16,0); //ÏÔê¾ADCC2éÑùoóμÄÔ-ê¼Öμ
// com[1]=(float)adcx*(3.3/4096); //»ñ衼ÆËãoóμÄ′øD¡êyμÄêμ¼êμçÑ1Ö죬±èèç3.1111
// adcx=com[1]; //¸3ÖμÕûêy2¿·Ö¸øadcx±äá¿£¬òòÎaadcxÎau16ÕûDÎ
// LCD_ShowxNum(134,300,adcx,1,16,0); //ÏÔê¾μçÑ1ÖμμÄÕûêy2¿·Ö£¬3.1111μÄ»°£¬Õaàï¾íêÇÏÔê¾3
// com[1]-=adcx; //°ÑòѾ-ÏÔê¾μÄÕûêy2¿·Öè¥μô£¬áôÏÂD¡êy2¿·Ö£¬±èèç3.1111-3=0.1111
// com[1]*=1000; //D¡êy2¿·Ö3ËòÔ1000£¬àyèç£o0.1111¾í×a»»Îa111.1£¬Ïàμ±óú±£áôèyλD¡êy¡£
// LCD_ShowxNum(150,300,com[1],3,16,0X80); //ÏÔê¾D¡êy2¿·Ö£¨Ç°Ãæ×a»»ÎaáËÕûDÎÏÔê¾£©£¬ÕaàïÏÔê¾μľíêÇ111.
//
// temp=Get_Temprate(1); //μÃμ½Î¶èÖμ //sum£o¼¸¸öDòáD£¨í¨μࣩ
if(temp<0)
{
temp=-temp;
LCD_ShowString(30+10*8,140,16,16,16,"-"); //ÏÔ꾸ooÅ
}else LCD_ShowString(30+10*8,140,16,16,16," "); //ÎT·ûoÅ
LCD_ShowxNum(30+11*8,140,temp/100,2,16,0); //ÏÔê¾Õûêy2¿·Ö
LCD_ShowxNum(30+14*8,140,temp%100,2,16,0); //ÏÔê¾D¡êy2¿·Ö
// LED0_Toggle;
// delay_ms(250);
}
}
|
|