stm32l476 АЦП не готов - PullRequest
       20

stm32l476 АЦП не готов

0 голосов
/ 24 февраля 2019

Я пытаюсь подключить один из АЦП к плате STM32L476 Nucleo.Я думаю, что у меня все настроено нормально, но я должен пропустить шаг.Я знаю, что это можно сделать с помощью HAL API и CubeMX, но я предпочитаю доступ на уровне регистра при поднятии новой платы.Вот мой код - я думаю, что он достаточно прокомментирован, чтобы его можно было понять.Я удалил оставшуюся часть кода, чтобы он был простым.

Проблема, которую я не понимаю, состоит в том, что когда код запускает цикл while - АЦП не готов - это ADC1-> ISR [0] не установлено - и не установлено.Я подтвердил, что биты установлены там, где я думаю, что они должны использовать keil.

Может кто-нибудь определить, чего не хватает?

#include <stm32l4xx.h>
#include <stdio.h>

#ifdef __cplusplus
extern "C"
#endif

int main(void)
{

    uint32_t adcResult = 0;

    /* Configure the clocks - using MSI as SYSCLK @16MHz */
    RCC->CR             &=  0xFFFFFF07;     //Clear ~MSIRANGE bits and MSIRGSEL bit
    RCC->CR             |=  0x00000089;     //Set MSI to 16MHz and MSIRGSEL bit
    char *dataPtr = NULL;

    //init ADC1
    ADC1->CR     &= 0xDFFFFFFF;      //Take ADC out of deep power down - i break at this point to allow enough time - doesn't help
    ADC1->CR     |= 0x10000000;    //Enable ADC1 votage regulator
    RCC->AHB2ENR |= 0x00002001;    //Enable the ADC clock, and GPIOA clk
    GPIOA->ASCR  |= 0x00000001;    //Connect analog switch to GPIOA[0]
    GPIOA->MODER |= 0x00000003;    //Set A0 for analog input mode
    ADC1->ISR    |= 0x00000001;    //Clear the ADRDY bit in the ADCx_ISR register by writing ‘1’.
    ADC1->SQR1   |= 0x00000040;    //Set for a sequence of 1 conversion on CH0


    while (1)
    {
            ADC1->CR |= 0x00000004;       //Convst
            while(!(ADC1->ISR & 0x4));
            adcResult = ADC1->DR;
            sprintf(dataPtr, "%d", adcResult);
    }
}

1 Ответ

0 голосов
/ 02 марта 2019

Я решил это - наконец.Если кто-то попадет в то же место.Я установил SYSCLK в качестве источника тактового сигнала АЦП, но это нужно настроить в RCC-> CCIPR [29:28].

Это мелочи ...

...