Вроде все работает, но в ADC1-›DR всегда остается 0. Напряжение подаю с DAC (PA4 ) на вывод PA1 (вроде порт выбрал правильно). DAC точно работает. А вот с ADC возникли проблемы.
Нажмите, чтобы открыть спойлер
#include "stm32f0xx.h"
#include ‹math.h›
int cnt = 12;
char buf[12];
void Init()
{
RCC-›AHBENR |= (RCC_AHBENR_GPIOCEN | RCC_AHBENR_GPIOAEN);
GPIOC-›OSPEEDR |= GPIO_OSPEEDER_OSPEEDR13;
}
//initialization USART4, 9600 baud, 1 stop bit, none parity
void USART4_Init()
{
RCC-›APB1ENR |= RCC_APB1ENR_USART4EN;
GPIOC-›MODER |= (GPIO_MODER_MODER10_1 | GPIO_MODER_MODER11_1);
GPIOC-›OSPEEDR |= (GPIO_OSPEEDR_OSPEEDR10 | GPIO_OSPEEDR_OSPEEDR11);
USART4-›BRR = 8000000 / 9600;
USART4-›CR1 |= (USART_CR1_TE | USART_CR1_RE);
USART4-›CR1 |= USART_CR1_UE;
USART4-›CR1 |= USART_CR1_RXNEIE;
NVIC_EnableIRQ(USART3_4_IRQn);
}
//send one byte
void USART4_Send(char chr)
{
while (!(USART4-›ISR & USART_ISR_TC));
USART4-›TDR = chr;
}
//send more byte
void USART4_Send_Str(char *str)
{
int i = 0;
while (str[i])
USART4_Send(str[i++]);
}
//IRQ handler receiver's
void USART3_6_IRQHandler()
{
if (USART4-›ISR & USART_ISR_RXNE)
{
USART4-›ISR &= ~USART_ISR_RXNE;
USART4_Send(USART4-›RDR);
}
}
//Timer init
void TIM6_Init()
{
RCC-›APB1ENR |= RCC_APB1ENR_TIM6EN;
TIM6-›PSC = 8000;
TIM6-›ARR = 100;
TIM6-›DIER |= TIM_DIER_UIE;
TIM6-›CR1 |= TIM_CR1_CEN;
NVIC_EnableIRQ(TIM6_IRQn);
}
void TIM6_IRQHandler()
{
TIM6-›SR &= ~TIM_SR_UIF;
if (!(GPIOC-›IDR & GPIO_IDR_13))
{
USART4_Send_Str("Pre conv\r\n");
ADC1-›CR |= ADC_CR_ADSTART;
while (!(ADC1-›ISR & ADC_ISR_EOC));
cnt = ADC1-›DR;
//cnt++;
sprintf(buf, "Voltage: %lu \r\n", cnt);
USART4_Send_Str(buf);
USART4_Send_Str("Post conv\r\n");
}
}
void DAC_Init()
{
RCC-›APB1ENR |= RCC_APB1ENR_DACEN;
DAC-›CR |= (DAC_CR_BOFF1 | DAC_CR_EN1);
DAC-›DHR12R1 = (1*4095)/3.3;
DAC-›SWTRIGR |= DAC_SWTRIGR_SWTRIG1;
}
void ADC_Init()
{
GPIOA-›MODER |= GPIO_MODER_MODER1;
RCC-›APB2ENR |= RCC_APB2ENR_ADC1EN;
RCC-›CR2 |= RCC_CR2_HSI14ON;
while ((RCC-›CR2 & RCC_CR2_HSI14RDY) == 0);
ADC1-›CR |= ADC_CR_ADCAL;
while (!(ADC1-›CR & ADC_CR_ADCAL));
ADC1-›SMPR |= (ADC_SMPR1_SMPR_0 | ADC_SMPR1_SMPR_1 | ADC_SMPR1_SMPR_2);
ADC1-›CHSELR = ADC_CHSELR_CHSEL1;
ADC-›CCR |= ADC_CCR_VREFEN;
ADC1-›CR |= ADC_CR_ADEN;
//while ((ADC1-›ISR & ADC_ISR_ADRDY) == 0);
}
int main()
{
Init();
USART4_Init();
TIM6_Init();
DAC_Init();
ADC_Init();
while(1)
{
}
}
Причина видимо в DAC, подключил к его выходу светодиод, а он не светится.
Проблема решена