利用ADC1通道7、8,引脚PB0、PB1采集电压,ADC扫描模式,ADC_ConvertedValue[2]是缓冲数组,DMA配置为16位数据宽度,增量模式,寄存器非增量模式,不知道怎么弄的,只有一个数据?
[mw_shl_code=c,true]#include "sys.h"
#include "adc.h"
#include "delay.h"
#include "dma.h"
vu16 ADC_ConvertedValue[2] = {0};
float Voltage,Current;
//??????ADC?????¨??1
void Adc_Init(void)
{
RCC->APB2ENR |=1<<3; //????PORTB???±??
GPIOB->CRL &=0XFFFFFF00; //PB0 PB1 anolog???????¨??8
MYDMA_Config(DMA1_Channel1, (u32)&ADC1->DR, (u32)&ADC_ConvertedValue, 2); //????ADC1 DMA????
RCC->APB2ENR |=1<<9; //ADC1?±??????
RCC->APB2RSTR |=1<<9; //ADC1????
RCC->APB2RSTR &=~(1<<9); //?????á??
RCC->CFGR &=~(3<<14); //·????ò×???????SYSCLK/DIV2=12M ADC?±???è????12M,
RCC->CFGR |=2<<14; //PCLK2 6·????ó×÷??ADC?±????ADC×??ó?±??????????14M,·??ò??????ADC×??·????????
ADC1->CR1 &=0XF0FFFF; //0x0000??ADC?????¤×÷????
ADC1->CR1 |=1<<8; //?¨?è????
ADC1->CR2 |=1<<1; //????×???????
ADC1->CR2 |=1<<8; //DMA????
ADC1->CR2 &=~(7<<17); //???????¨?±?÷1??CC1????
ADC1->CR2 |=7<<17; //?í??????×???SWSTART
ADC1->CR2 |=1<<20; //????????????·?(SWSTART),±???????????????????·?
ADC1->CR2 &=~(1<<11); //??????????
ADC1->SQR1 &=~(0X0F<<20); //?¨???????ò?¨??×????ò???????¨??????:2??×???
ADC1->SQR1 |=0X01<<20; //?¨???????ò?¨??×????ò???????¨??????:2??×???
ADC1->SQR3 |=1<<3;
ADC1->SQR3 |=7<<5;
ADC1->SMPR2 &=~(7<<21); //?è???¨??7?????ù?±?????¨??7???ù?±??1.5????
ADC1->SMPR2 |=5<<21; //?¨??7??55.5????,?á?????ù?±???????á?????·??
ADC1->SMPR2 &=~(7<<24); //?è???¨??8?????ù?±?????¨??8???ù?±??1.5????
ADC1->SMPR2 |=5<<24; //?¨??8??55.5????,?á?????ù?±???????á?????·??
ADC1->CR2 |=1<<0; //????AD×????÷
ADC1->CR2 |=1<<3; //??????????×??????????í???è????????????????????×??????÷±????????ó??????±???????
while(ADC1->CR2&1<<3); //??????×??á??
ADC1->CR2|=1<<2; //????AD??×?
while(ADC1->CR2&1<<2); //??????×??á???????????í???è??????????×?????????×??á???±??????????
ADC1->CR2 |= (u32)0x00500000; //????×??????ò?¨??
}
[/mw_shl_code]
[mw_shl_code=c,true]下面是配置的DMA,ADC中断和DMA中断都没有用到。。。[/mw_shl_code]
[mw_shl_code=c,true]#include "dma.h"
#include "delay.h"
//DMA1???÷?¨??????
//???????????????????¨??,???????ù?????????é????????
//???????÷->???è????/8???????í??/?????÷????????
//DMA_CHx  MA?¨??CHx
//cpar:???è???·
//cmar:?????÷???·
//cndtr:??????????
void MYDMA_Config(DMA_Channel_TypeDef *DMA_CHx, u32 cpar, u32 cmar, u16 cndtr) //DMA1,?¨??1??ADC1?????????÷?±×???cpar??cmar×÷????±ê
{
RCC->AHBENR |= 1<<0; //????DMA1?±??,DMA1??AHB×?????
delay_ms(50); //????DMA?±?????¨
DMA_CHx->CPAR =(u32)cpar; //????DMA1???ó?????è?????÷?????·
DMA_CHx->CMAR =(u32)cmar; //DMA1,?????÷???·????°????¨??±????????·
DMA_CHx->CNDTR =cndtr; //DMA1,??????????
DMA_CHx->CCR =0X00000000; //????
DMA_CHx->CCR &=~(1<<4); //0???????÷??
DMA_CHx->CCR |=1<<5; //???????·??×÷
DMA_CHx->CCR &=~(1<<6); //???è???··?????????
DMA_CHx->CCR |=1<<7; //?????÷????????
DMA_CHx->CCR |=1<<8; //???è?????í????16??
DMA_CHx->CCR |=1<<10; //?????÷?????í??16??
DMA_CHx->CCR |=2<<12; //??????????
DMA_CHx->CCR &=~(1<<14); //·??????÷???????÷????
DMA_CHx->CCR &=~(1<<0); //??±?DMA????
DMA_CHx->CCR |=1<<0; //????DMA????
}
[/mw_shl_code]
|