From 62a9a434c80428b55017dc897c29702fce1c9fe2 Mon Sep 17 00:00:00 2001 From: philsson Date: Tue, 13 Sep 2016 13:41:03 +0200 Subject: [PATCH] ADC implementation fairly working --- UAV-ControlSystem/Debug/UAV-ControlSystem.bin | Bin 5896 -> 8212 bytes UAV-ControlSystem/Debug/makefile | 1 + UAV-ControlSystem/Debug/objects.list | 1 + UAV-ControlSystem/Debug/output.map | 1473 +++++++++++++---- UAV-ControlSystem/Debug/sources.mk | 1 + UAV-ControlSystem/inc/drivers/adc.h | 54 + UAV-ControlSystem/src/drivers/adc.c | 77 + UAV-ControlSystem/src/main.c | 35 +- .../.settings/language.settings.xml | 4 +- 9 files changed, 1312 insertions(+), 334 deletions(-) create mode 100644 UAV-ControlSystem/inc/drivers/adc.h create mode 100644 UAV-ControlSystem/src/drivers/adc.c diff --git a/UAV-ControlSystem/Debug/UAV-ControlSystem.bin b/UAV-ControlSystem/Debug/UAV-ControlSystem.bin index 9dcbc308b5d8cbbc1b94398233257580b9bae588..181dbbcd9ad9adc31d02842916536933a190c892 100644 GIT binary patch delta 2999 zcmZuze{3699e?-EvE#FY6FUsYR~pB+im{tQq)K6(SK-*~+S)_y5*GI7r4YjLFZH4Rm;TR#_Wjxzw$0{M59;5#7&$J`b%Eg5 zWcr~nUV2SN{SzJ(XQ1-c^HRwxo7QGpR9Vsl)|$G4pk zFhb&Oj)~24X7|XoMO9Sc;5erd^-0 z17q@WyZ&vPc{i3F;ocR*2%i5GJ&DIog^nZRla??x0RPl(EeeNQg$3}!k%k20WTPJr zU$(L4%f)nGPA0-(Z#JUedGBc!I&d}QMd}rpe;J-9;i134D>!FUNqop77{?lPQhWrT z`-m=x6=AxKo;M$lGe4>(lZnQlh}0;^QV&6X$FZk2uK*!b&o`Mp?20^r z3Ytf%&qbtWKsxP8S#`}I)eEvbSnCB#XBRN22u0EH9b53j{{8|5MH&Mc7juM|4&mj1{<; zNhLMRY;u-oks9C@W{fzGS36RIa=K>M|7w|ftd=BOckM4cu#*G_`gZL4TNc(@ZTidx1DZD zxZJNk2v&{|rpPVAb}Fws$#pR4OW>w>?{-E^-GEEFn3wnAJb)52H}tU@*zdrii@j7` zq5$;CE@Cf{LlY<@Awj*Wa;uGe`b?6{l8Ckm8Q+&2?I@LlZtHL{giKz3Jz44jI&``D zEW|huZ-Xvjw1-gXAq;c~8G;jb_>`op-h2Y0@A_h?tJoChDY@>N>xJwknsSM507i!Q z4Nd#2?6R=hS3Q{hG?Wt*qd3E(Is(!|TpER$2uUiFA*ih3Y=q+w;P@U$hpK})xkLs# z4T8BVk3QBS+-}uQqYHn4cPG4WSZRe38f49xm0G)5oy(qstCZc;;Te7H#9D3^G9^zU znH*P;wWn#4fRtq~OqrC}##5~77sFV}IGZlWNV%XkW`p!1Hh>1ru{W;MHC_akn}A?D zn@gv`!UV4tb{eq8%0BGI5@1W6;|!9T-bcqEdZ^aEVn5CPGi;5a@wV|yrH#dD7|^-HrI@HE(?r`bBcG<)#muAX6Cnl>-pyQW_wTg~(LDk(<1M*QRi_k^$3 zzKESgb6u{RONreT%)U1q-&B{tH;ck!;XWzT-34`@g4VNF-|(4f2t;=eK)dCAuA5%m z;25;s({v#p1cX8xeajEGp7WphdBZo6_czzDF^YvaYT^&4OeNm?dV_D5cem#HBtiHb z{knHl$j~2qKdXpZ>p6Bds@e5P8*TTyUo6k_SK%tL>le4Kdw(xVUu&$+_d{F$N`rn^ zIw(EiE~gswRp}MUFdgX!COs8+Qu>R#{F6yv4NOYEahDfOdMEIp^b>daBa;pXPe}!L z`HV@w5geDEfaL>l(G;8wJ|-!!lwdh((tiijL92e>W>;Bt)25FOyZ{?l+>PJbbY~y| z8^3fnUb3k*@SkC;e!w`)#0Fy;) z3lDx(z<-qK?2wkY1>Z&Nsk#3+7x^8AFSEWkp*-RDPK^F}Xxz&_pK3Dw@6fOC-(~u< Y@Fcz-qkju)o*fXpIJL619x03e1AX~iA^-pY delta 677 zcmZWmUr19?7(eIiZq2JXy?2{yvz(jY(poFQ!l!Am)JggfQKU2(#Em_)r&trgB4Sh! z^7)ifq3_LYSs_Fa(I1FFGN_R7snJ7mTh`s~z1!_vy1mqa?|kR?`@ZjdKlsgsGr=%I z#QV;KtUHp#zQb+ zYr_*TZQH#q6-x=4lr6lnJv6cYYASBs)TFj5T;q4KHUrjIA{lffXDR%mz%R!@ zgC;$vgf8T%0!N%TD3LaZ3kqyFeUykB#2E$HmTz`V`Ye}YQ^IKhcXMm{U!P=XaCI@7 z^g@O{SC?0lmSqxAgtzYgQsw{*;14GM@Ma)7FMKa*(xMDkTvus#k6dWnaRQV39GrDW ze6OhidaN6nMEM+{)|wwBk5XgMS~I+H2Q9i!>l_fzZSs + + + +void adc_configure() +{ + __GPIOC_CLK_ENABLE(); + __ADC1_CLK_ENABLE(); +} + +void adc_pin_config(ADC_HandleTypeDef * g_AdcHandle, uint32_t adc_channel) +{ + //ADC_HandleTypeDef g_AdcHandle; + GPIO_InitTypeDef gpioInit; + + // TODO!!!! + if (adc_channel == ADC_CHANNEL_12) gpioInit.Pin = GPIO_PIN_2; + else gpioInit.Pin = GPIO_PIN_1; + + + gpioInit.Mode = GPIO_MODE_ANALOG; + gpioInit.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOC,&gpioInit); + + HAL_NVIC_SetPriority(ADC_IRQn, 0,0); + HAL_NVIC_EnableIRQ(ADC_IRQn); + + ADC_ChannelConfTypeDef adcChannel; + + + g_AdcHandle->Instance = ADC1; + g_AdcHandle->Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV2; + g_AdcHandle->Init.Resolution = ADC_RESOLUTION12b; + g_AdcHandle->Init.ScanConvMode = DISABLE; + g_AdcHandle->Init.ContinuousConvMode = ENABLE; + g_AdcHandle->Init.DiscontinuousConvMode = DISABLE; + g_AdcHandle->Init.NbrOfDiscConversion = 0; + g_AdcHandle->Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONV_T1_CC1; + g_AdcHandle->Init.DataAlign = ADC_DATAALIGN_RIGHT; + g_AdcHandle->Init.NbrOfConversion = 1; + g_AdcHandle->Init.DMAContinuousRequests = ENABLE; + g_AdcHandle->Init.EOCSelection = DISABLE; + + HAL_ADC_Init(g_AdcHandle); + + adcChannel.Channel = adc_channel; // ex ADC_CHANNEL_12 + adcChannel.Rank = 1; + adcChannel.SamplingTime = ADC_SAMPLETIME_480CYCLES; + adcChannel.Offset = 0; + + if (HAL_ADC_ConfigChannel(g_AdcHandle, &adcChannel) != HAL_OK) + { + asm("bkpt 255"); + } + + HAL_ADC_Start(g_AdcHandle); + +} + +uint32_t adc_read_int(ADC_HandleTypeDef * g_AdcHandle) +{ + uint32_t value = 0; + if (HAL_ADC_PollForConversion(g_AdcHandle, 100) == HAL_OK) + { + value = HAL_ADC_GetValue(g_AdcHandle); + } + return value; +} + + + diff --git a/UAV-ControlSystem/src/main.c b/UAV-ControlSystem/src/main.c index 6e47a81..5d7c84f 100644 --- a/UAV-ControlSystem/src/main.c +++ b/UAV-ControlSystem/src/main.c @@ -9,14 +9,23 @@ */ +#include #include "stm32f4xx.h" /* Private function prototypes -----------------------------------------------*/ static void SystemClock_Config(void); static void Error_Handler(void); +ADC_HandleTypeDef adc_testinput_handle; // For example battery voltage +ADC_HandleTypeDef adc_test2input_handle; +uint32_t g_ADCValue; +uint32_t g_ADC2; +int g_MeasurementNumber; + + int main(void) { + // Comment? HAL_Init(); int i = 1; @@ -25,6 +34,11 @@ int main(void) /* Configure the system clock to 100 MHz */ SystemClock_Config(); + adc_configure(); + //adc_pin_config(&adc_testinput_handle,ADC_CHANNEL_12); + adc_pin_config(&adc_testinput_handle,ADC_CHANNEL_11); + + /*##-1- Enable GPIOA Clock (to be able to program the configuration registers) */ __HAL_RCC_GPIOA_CLK_ENABLE(); @@ -50,6 +64,13 @@ int main(void) i++; /* Insert a 100ms delay */ HAL_Delay(100); + + + // ADC part + //g_ADCValue = adc_read_int(&adc_testinput_handle); + HAL_Delay(10); + g_ADC2 = adc_read_int(&adc_test2input_handle); + g_MeasurementNumber++; } for(;;); @@ -117,23 +138,9 @@ static void SystemClock_Config(void) } } -void ConfigureADC() -{ - GPIO_InitTypeDef gpioInit; - __GPIOC_CLK_ENABLE(); - __ADC1_CLK_ENABLE(); - - gpioInit.Pin = GPIO_PIN_1; - gpioInit.Mode = GPIO_MODE_ANALOG; - gpioInit.Pull = GPIO_NOPULL; - HAL_GPIO_Init(GPIOC,&gpioInit); - - HAL_NVIC_SetPriority(ADC_IRQn,0,0); - HAL_NVIC_EnableIRQ(ADC_IRQn); -} /** * @brief This function is executed in case of error occurrence. diff --git a/revolution_hal_lib/.settings/language.settings.xml b/revolution_hal_lib/.settings/language.settings.xml index 04c131c..4c82907 100644 --- a/revolution_hal_lib/.settings/language.settings.xml +++ b/revolution_hal_lib/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - +