stm32f103c8t6
Поставил цель запустить преобразование ацп1 от сравнения 1 канала 1 таймера и потом передавать через DMA. Есть опыт запуска от 3 таймера по TIM3_TRGO на SPL.
Думаю заодно будут исходник для начинающих
Пока хочу запустить без DMA. Поделился исходником NewWriter,но возник вопрос не будет ли управление выводом PA8 от сравнения 1 канала 1 таймера ? Мне просто нужен запуск от таймера ацп,а вывод оставлю свободным.
#include "adc.h" void adc_init(void) { // АЦП у нас 1 канал,он на PA0 , запуск от внешнего тригера TRM1 1 канала RCC->AHBENR|=RCC_AHBENR_DMA1EN; RCC->APB2ENR|=RCC_APB2ENR_AFIOEN|RCC_APB2ENR_IOPAEN|RCC_APB2ENR_ADC1EN|RCC_APB2ENR_TIM1EN; // тактирование ацп RCC->CFGR&=~(RCC_CFGR_ADCPRE); RCC->CFGR|=RCC_CFGR_ADCPRE_1; // аналоговый вход GPIOA->CRL&= ~(GPIO_CRL_MODE0); GPIOA->CRL&= ~(GPIO_CRL_CNF0); // настройка ацп: ADC1->SMPR2 |= ADC_SMPR2_SMP0_2 ; // AN0: 41.5 мкс ADC1->CR2 |= ADC_CR2_ADON; // включаем /* регулярная группа */ ADC1->SQR3 = 1; // 1 канал в первую группу // Калибровка ацп ADC1->CR2 |= ADC_CR2_CAL; // запуск калибровки while (ADC1->CR2 & ADC_CR2_CAL); // ожидаем конца калибровки ADC1->CR2 |=ADC_CR2_EXTTRIG; // запуск от сравнения по TIM1_CC1 ADC1->CR2 &=~(ADC_CR2_EXTSEL); // 000 это по TIM1_CC1 // дма передача //ADC1->CR2 |=ADC_CR2_DMA; // прерывание от ацп1 ADC1->SR&=~ADC_SR_EOC; // очищаем флаг преобразования ADC1->CR1|=ADC_CR1_EOCIE; // включаем прерывание NVIC_SetPriority(ADC1_2_IRQn,0); NVIC_EnableIRQ(ADC1_2_IRQn); //////////////////////////////////////////////////////////////// // Настраиваем таймер 1 для ацп1 /////////////////////////////////////////////////////////////// TIM1->PSC = (SystemCoreClock/1000)-1; // 1 ms TIM1->ARR = 2000; // 2 секунды период TIM1->CCR1 = 700; // через 0.7 начать преобразование TIM1->CCMR1 |= TIM_CCMR1_OC1M; // Ch1: PWM mode2 TIM1->CCER |= TIM_CCER_CC1E; //<! Ch1 out enable TIM1->BDTR |= TIM_BDTR_MOE; //<! main out enable (!!!) TIM1->CR1 |= TIM_CR1_CEN; // TIM1 enable /* ---- АЦП запущен, с AN1 измеряется ---- */ }
ацп работает от таймера. А вот почему на выходе PA8 нет,может порт не настроен,буду смотреть дальше.
Отредактировано CERGEI (2017-04-08 04:35:46)