中级会员

主题
帖子
积分32
阅读权限20
注册时间2020-3-26
最后登录1970-1-1
在线时间 小时
|
带电量显示?
n1110和1202屏都是96x68点,原n1110程序有点类似lcd2004,能否改用易购的12864屏
程序是寄存器操作的,看不懂。
TIM2->PSC = 0; //分频器,不分频
TIM2->ARR = 63;//设置自动重装载寄存器周期的值 Tout= ((arr+1)*(psc+1))/Tclk;
TIM2->CR1 = TIM_CR1_ARPE;
TIM2->CR2 = TIM_CR2_MMS_2|TIM_CR2_MMS_1; // TRGO trigger = oc3 = DAC TRIGGER
TIM2->CCR1 = 46;
TIM2->CCR2 = 62;
TIM2->CCR3 = 10;
TIM2->CCR4 = 0;
TIM2->SMCR = 0;
TIM2->CCMR1 = TIM_CCMR1_OC1M | TIM_CCMR1_OC1PE|TIM_CCMR1_OC2M | TIM_CCMR1_OC2PE;
TIM2->CCMR2 = TIM_CCMR2_OC3M | TIM_CCMR2_OC3PE;//|TIM_CCMR2_OC4M | TIM_CCMR2_OC4PE;
TIM2->CCER = TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E ;
TIM2->DIER = TIM_DIER_CC1DE;
TIM2->EGR = 0;
DAC->CR = DAC_CR_TEN1|DAC_CR_TEN2|DAC_CR_TSEL2_2|DAC_CR_TSEL1_2 //tim2_trgo
|DAC_CR_BOFF1|DAC_CR_BOFF2
|DAC_CR_WAVE1_1|DAC_CR_MAMP1_1|DAC_CR_MAMP1_0
|DAC_CR_WAVE2_1|DAC_CR_MAMP2_1|DAC_CR_MAMP2_0
;
DMA1_Channel4->CCR = 0;
DMA1_Channel4->CPAR = (uint32_t)&DAC->DHR12RD; //DMA1 外设地址
DMA1_Channel4->CMAR = (uint32_t) dac_buf; //DMA1,存储器地址
DMA1_Channel4->CNDTR = DAC_N; //DMA1,传输数据量
DMA1_Channel4->CCR = DMA_CCR1_MINC | DMA_CCR1_CIRC | DMA_CCR1_DIR |DMA_CCR1_PL_1|
DMA_MemoryDataSize_Word| DMA_PeripheralDataSize_Word
|DMA_CCR1_HTIE |DMA_CCR1_TCIE ;
DMA1_Channel4->CCR |= DMA_CCR1_EN;
DMA1_Channel1->CCR = 0;
DMA1_Channel1->CPAR = (uint32_t)&ADC1->DR; //DMA1 外设地址
DMA1_Channel1->CMAR = (uint32_t) adc_dma; // 500
DMA1_Channel1->CNDTR = N; //DMA1,传输数据量; N=500
DMA1_Channel1->CCR = DMA_CCR1_MINC | DMA_CCR1_PL_0| DMA_CCR1_CIRC|
DMA_MemoryDataSize_HalfWord| DMA_PeripheralDataSize_HalfWord
|DMA_CCR1_TCIE |DMA_CCR1_HTIE
;
DMA1_Channel1->CCR |= DMA_CCR1_EN;
// TIM2 CH1
DMA1_Channel5->CCR = 0;
DMA1_Channel5->CPAR = (uint32_t)&ADC1->SQR3;
DMA1_Channel5->CMAR = (uint32_t) &ch; //DMA1,存储器地址
DMA1_Channel5->CNDTR = 1; //DMA1,传输数据量
DMA1_Channel5->CCR = DMA_CCR1_CIRC | DMA_CCR1_DIR |DMA_CCR1_PL|
DMA_MemoryDataSize_Word| DMA_PeripheralDataSize_Word ;
DMA1_Channel5->CCR |= DMA_CCR1_EN;
NVIC_EnableIRQ(DMA1_Channel1_IRQn);
NVIC_EnableIRQ(DMA1_Channel4_IRQn);
ADC1->CR1= ADC_CR1_DISCEN;
ADC1->CR2= ADC_CR2_EXTSEL_0 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTTRIG|ADC_CR2_DMA; // tim2 - cc2
ADC1->SMPR2=ADC_SMPR2_SMP7_1|ADC_SMPR2_SMP2_1| ADC_SMPR2_SMP1_1| ADC_SMPR2_SMP0_0;//
DMA1中断是也看不懂:
i =0 ;
while(i++ < N/2 )
{
int dat = adc_dma[j] - SINE_OFFSET; // adc_dma 数组[500];SINE_OFFSET:900
mreal[k] += ((int)sine[j+N/4]*dat);
mimag[k] -= ((int)sine[j]*dat);
j++;
}
if(j >= N ) j = 0;
//***************************************
if( (k == 0) && ( irq_request & IRQ_ADC_SAMPLE) )
{
irq_request &= ~IRQ_ADC_SAMPLE;
mData[0].Re = mreal[0];mData[0].Im = mimag[0];
mData[1].Re = mreal[1];mData[1].Im = mimag[1];
mData[2].Re = mreal[2];mData[2].Im = mimag[2];
irq_status |= IRQ_ADC_SAMPLE;
}
|
|