Program odczytuje dwa kanały ADC, używa DMA, wysyła wynik na terminal. Reszta funkcji jest ok, sprawdzałem. Różnicę robi tylko konfig_TXRX(), gdy użyję tej funkcji nic się nie pojawia na terminalu, jak temu zaradzić 🙂 ? W sumie nie sprawia mi to tak dużej różnicy czy te parę linijek będzie w funkji czy nie, ale chcę wiedzieć na przyszłość z czego wynika to, że mi to teraz nie działa 😋
#include <stdio.h>
#include <stdint.h>
#include "stm32f10x.h"
#include "konfig.h"
volatile uint32_t timer_ms = 0;
void SysTick_Handler()
{
if (timer_ms)
timer_ms--;
}
void delay_ms(int time)
{
timer_ms = time;
while (timer_ms);
}
/*
void konfig_TXRX(GPIO_InitTypeDef gpio)
{
//RX LINE
gpio.GPIO_Pin = GPIO_Pin_2;
gpio.GPIO_Mode = GPIO_Mode_AF_PP;
//GPIO_Init(GPIOA, &gpio);
//TX LINE
gpio.GPIO_Pin = GPIO_Pin_3;
gpio.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &gpio);
}*/
int main(void)
{
//deklaracja struktur konfiguracyjnych
GPIO_InitTypeDef gpio;
USART_InitTypeDef uart;
DMA_InitTypeDef dma;
ADC_InitTypeDef adc;
konfig_RCC();
konfig_ADC(&gpio,&adc);
konfig_SysTick();
konfig_USART(&uart);
//konfig_TXRX(&gpio);
konfig_DMA(&dma);
konfig_LED(&gpio);
//RX LINE
gpio.GPIO_Pin = GPIO_Pin_2;
gpio.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &gpio);
//TX LINE
gpio.GPIO_Pin = GPIO_Pin_3;
gpio.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &gpio);
extern uint16_t adc_value[ADC_CHANNELS];
while (1)
{
int i;
for (i = 0; i < ADC_CHANNELS;i++)
printf("ADC%d = %d\n", i, adc_value[i]);
GPIO_SetBits(GPIOA, GPIO_Pin_5);
delay_ms(100);
GPIO_ResetBits(GPIOA, GPIO_Pin_5);
delay_ms(400);
}
}