Как запустить данные АЦП через ДМА и управлять ШИМом ?Вот исходник вроде всё правильно но не работает.
void adc1_init(void)
{
RCC->CFGR &=~ RCC_CFGR_ADCPRE;
RCC->APB2ENR|=RCC_APB2ENR_IOPAEN;
GPIOA->CRL&=~GPIO_CRL_CNF1;
GPIOA->CRL&=~ GPIO_CRL_MODE1;
GPIOA->CRL&=~GPIO_CRL_CNF2;
GPIOA->CRL&=~ GPIO_CRL_MODE2;
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
RCC->APB2ENR |= RCC_APB2ENR_ADC2EN;
//RCC->CFGR |= RCC_CFGR_ADCPRE_DIV2;
//подаем тактирование АЦП
ADC1->CR2 |= ADC_CR2_RSTCAL;
while (!(ADC1->CR2 & ADC_CR2_RSTCAL))
{
}
ADC1->CR2 |= ADC_CR2_CAL;
// while (!(ADC1->CR2 & ADC_CR2_CAL));
// {
// }
ADC1->CR2 |=ADC_CR2_CONT;//включить АЦП
ADC1->CR2 |= ADC_CR2_EXTSEL;
// ADC1->CR1|=ADC_CR1_SCAN ;
ADC1->CR2 |= ADC_CR2_EXTTRIG;
// ADC1->CR1&=~ADC_CR1_DUALMOD;
ADC1->SMPR2&=~ ADC_SMPR2_SMP1_0; //1
ADC1->SMPR2&=~ADC_SMPR2_SMP1_1; //1
ADC1->SMPR2 &=~ ADC_SMPR2_SMP1_2; //1
ADC1->SQR3 |= ADC_SQR3_SQ1_0; //1 IN1
ADC1->SQR3 &= ~ ADC_SQR3_SQ1_1; //0
ADC1->SQR3 &= ~ADC_SQR3_SQ1_2; //0
ADC1->SQR3 &=~ ADC_SQR3_SQ1_3; //0
ADC1->SQR3 &= ~ADC_SQR3_SQ1_4;
ADC1->CR2 |= ADC_CR2_ADON;
ADC1->CR2 |= ADC_CR2_SWSTART;
//}
//void adc2_init(void)
//{
//RCC->CFGR &=~ RCC_CFGR_ADCPRE;
//RCC->APB2ENR|=RCC_APB2ENR_IOPAEN;
// GPIOA->CRL&=~GPIO_CRL_CNF2;
// GPIOA->CRL&=~ GPIO_CRL_MODE2;
// RCC->APB2ENR |= RCC_APB2ENR_ADC2EN;
// RCC->CFGR |= RCC_CFGR_ADCPRE_DIV2;
// ADC2->CR2 |= ADC_CR2_RSTCAL;
// while (!(ADC2->CR2 & ADC_CR2_RSTCAL))
// {
// }
// ADC2->CR2 |= ADC_CR2_CAL;
//ADC2->CR2 |=ADC_CR2_CONT;//включить АЦП
//ADC2->CR2 |= ADC_CR2_EXTSEL;
// ADC2->CR2 |= ADC_CR2_EXTTRIG;
//ADC2->SMPR2&=~ ADC_SMPR2_SMP2_0; //1
// ADC2->SMPR2&=~ADC_SMPR2_SMP2_1; //1
// ADC2->SMPR2 &=~ ADC_SMPR2_SMP2_2; //1
// ADC2->SQR3 &=~ ADC_SQR3_SQ1_0; //1 IN1
// ADC2->SQR3 |= ADC_SQR3_SQ1_1; //0
// ADC2->SQR3 &= ~ADC_SQR3_SQ1_2; //0
// ADC2->SQR3 &=~ ADC_SQR3_SQ1_3; //0
// ADC2->SQR3 &= ~ADC_SQR3_SQ1_4;
// ADC2->CR2 |= ADC_CR2_ADON;
}
void init_pwm_timer4(void)
{
RCC->APB2ENR|=RCC_APB2ENR_IOPBEN ;
GPIOB->CRL|=GPIO_CRL_CNF6_1;
GPIOB->CRL&=~GPIO_CRL_CNF6_0;
GPIOB->CRL|= GPIO_CRL_MODE6_1;
GPIOB->CRL|= GPIO_CRL_MODE6_0;
//--настройка второго канала шим-порт7------//
GPIOB->CRL|=GPIO_CRL_CNF7_1;
GPIOB->CRL&=~GPIO_CRL_CNF7_0;
GPIOB->CRL|= GPIO_CRL_MODE7_1;
GPIOB->CRL|= GPIO_CRL_MODE7_0;
RCC->APB2ENR|=RCC_APB2ENR_AFIOEN;
AFIO->MAPR&=~AFIO_MAPR_TIM4_REMAP;
RCC->APB1ENR|= RCC_APB1ENR_TIM4EN ;
TIM4->PSC= 0;
TIM4->ARR= 65535;
TIM4->CCMR1&=~TIM_CCMR1_CC1S;//настройка канала 1 на выход.
TIM4->CCMR1&=~TIM_CCMR1_CC2S;//настройка канала 2 на выход.
TIM4->CR1&=~TIM_CR1_DIR;
TIM4->CCMR1|= TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1;//|TIM_CCMR1_OC1M_0;//;//
TIM4->CCMR1|= TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1;//|TIM_CCMR1_OC2M_0;//
TIM4->CCMR1|=TIM_CCMR1_OC1PE;
TIM4->CCMR1|=TIM_CCMR1_OC2PE;
TIM4->CCER |=TIM_CCER_CC1E;
TIM4->CCER |=TIM_CCER_CC2E;
TIM4->CCER &=~TIM_CCER_CC1P;
TIM4->CCER &=~TIM_CCER_CC2P;
TIM4->CR1|=TIM_CR1_ARPE;
TIM4->EGR|= TIM_EGR_UG;
// TIM4->CCR1=30000;
TIM4->CR1|= TIM_CR1_CEN;
}
void DMA_init(void)
{
RCC->AHBENR|=RCC_AHBENR_DMA1EN;
DMA1_Channel1->CPAR=(uint32_t)&ADC1->DR;
DMA1_Channel1->CMAR=(uint32_t)&TIM4->CCR2;
DMA1_Channel1->CNDTR=1;
DMA1_Channel1->CCR|=DMA_CCR_CIRC;
DMA1_Channel1->CCR&=~DMA_CCR_PINC ;
DMA1_Channel1->CCR&=~DMA_CCR_MINC;
DMA1_Channel1->CCR|=DMA_CCR_PSIZE_0 ;
DMA1_Channel1->CCR|=DMA_CCR_MSIZE_0;
DMA1_Channel1->CCR&=~DMA_CCR_DIR ;
ADC1->CR2|=ADC_CR2_DMA;
}
int main(void)
{
//GPIOAB_init();
GPIOC_init();
IWDT_init();
timer1_init();
timer2_init();
timer3_init();
init_pwm_timer4();
adc1_init();
DMA_init();
stm32f1 cmsis ADC-DMA-PWM
Кто любит RISC в жизни, заходим, не стесняемся.
-
ivan dimir
- Мучитель микросхем
- Сообщения: 440
- Зарегистрирован: Вс дек 29, 2019 08:05:21
- Реклама
Перейти
- Наш сайт
- ↳ Сувенирная лавка Кота
- ↳ О нашем сайте...
- ↳ Опросы, конкурсы...
- ↳ Статьи
- Устройства
- ↳ Аналоговая техника
- ↳ Усилители низкой частоты
- ↳ Радиотехника: приемники, передатчики, антенны
- ↳ АвтоМотоВело
- ↳ Цифровая техника
- ↳ Микроконтроллеры и ПЛИС
- ↳ Интеграция с ПК
- ↳ Умные мысли
- Силовая электроника
- ↳ Сварочное оборудование
- ↳ Питание
- ↳ Управление двигателями
- ↳ Индукционные нагреватели
- ↳ Прочая силовая электроника
- Микроконтроллеры и ПЛИС
- ↳ AVR
- ↳ ARM
- ↳ PIC
- ↳ ПЛИС
- ↳ Периферия
- ↳ Разные вопросы по МК
- ↳ Arduino
- Обучалка
- ↳ Теория
- ↳ Практика
- Технология
- ↳ Изготовление PCB
- ↳ Корпуса
- ↳ Измерения
- Ремонт
- ↳ Не слышно, не видно
- ↳ Не стирает, не готовит
- ↳ Ничего не работает
- ↳ Дохлые потаскунчики
- Посиделки у Кота
- ↳ Травим анекдоты
- ↳ Котоссылки
- ↳ Ищу...
- ↳ МЯЯЯУ!
- ↳ Чистилище
- Базар
- ↳ Куплю
- ↳ Продам
- ↳ Отдам-Обменяю
- ↳ Есть работа
- ↳ Ищу работу
- ↳ Базарные разговорчики