44 lines
1.6 KiB
C
44 lines
1.6 KiB
C
#include <reg_stm32f4xx.h>
|
|
#include <stdint.h>
|
|
|
|
void adc_init(void)
|
|
{
|
|
// Clock configuration
|
|
RCC->APB2ENR |= 0x00000400;
|
|
RCC->APB1ENR |= 0x00000020;
|
|
|
|
// Analog pin configuration
|
|
GPIOF->MODER |= 0x00003000;
|
|
|
|
// ADC configuration
|
|
ADC3->CR1 |= 0x02000000; // Resolution
|
|
// -> 8 Bit,
|
|
// scan mode
|
|
// -> disabled
|
|
ADC3->CR2 |= 0x00000002; // Continous
|
|
// conversion
|
|
// mode ->
|
|
// enabled
|
|
|
|
// Enable ADC conversion
|
|
ADC3->CR2 |= 0x00000001; // ADC3 enable
|
|
|
|
// Select the channel to be read from
|
|
ADC3->SMPR2 |= 0x00006000; // Channel 4 sampling
|
|
// time -> 144 cycles
|
|
ADC3->SQR3 |= 0x00000004; // Channel 4 rank
|
|
// -> 1 (?)
|
|
}
|
|
|
|
uint8_t adc_get_value(void)
|
|
{
|
|
// Start the conversion
|
|
ADC3->CR2 |= 0x40000000;
|
|
|
|
// Wait till conversion is finished
|
|
while (!ADC3->SR & 0x00000002) ;
|
|
|
|
// Return the converted data
|
|
return (uint8_t)ADC3->DR & 0x000000ff;
|
|
}
|