Skip to content
Snippets Groups Projects
Commit 94747be0 authored by Sergi Hernandez's avatar Sergi Hernandez
Browse files

Migrated the adc module to the HAL formware.

parent c90828d6
No related branches found
No related tags found
No related merge requests found
...@@ -10,6 +10,7 @@ TARGET_FILES+=src/ram.c ...@@ -10,6 +10,7 @@ TARGET_FILES+=src/ram.c
TARGET_FILES+=src/time.c TARGET_FILES+=src/time.c
TARGET_FILES+=src/eeprom.c TARGET_FILES+=src/eeprom.c
TARGET_FILES+=src/comm.c TARGET_FILES+=src/comm.c
TARGET_FILES+=src/adc_dma.c
TARGET_FILES+=src/dynamixel_slave_uart_dma.c TARGET_FILES+=src/dynamixel_slave_uart_dma.c
TARGET_FILES+=src/stm32f1xx_hal_msp.c TARGET_FILES+=src/stm32f1xx_hal_msp.c
TARGET_PROCESSOR=STM32F103RE TARGET_PROCESSOR=STM32F103RE
...@@ -54,6 +55,7 @@ MAIN_OUT_LSS = $(BUILD_PATH)/$(PROJECT_NAME).lss ...@@ -54,6 +55,7 @@ MAIN_OUT_LSS = $(BUILD_PATH)/$(PROJECT_NAME).lss
TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal_gpio.c TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal_gpio.c
TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal_cortex.c TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal_cortex.c
TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal_rcc.c TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal_rcc.c
TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal_rcc_ex.c
TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal_pwr.c TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal_pwr.c
TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal_tim.c TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal_tim.c
TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal_tim_ex.c TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal_tim_ex.c
...@@ -61,6 +63,8 @@ TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal_dma.c ...@@ -61,6 +63,8 @@ TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal_dma.c
TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal_uart.c TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal_uart.c
TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal_flash.c TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal_flash.c
TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal_flash_ex.c TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal_flash_ex.c
TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal_adc.c
TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal_adc_ex.c
TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal.c TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal.c
DARWIN_OBJS_TMP = $(notdir $(TARGET_FILES:.c=.o)) DARWIN_OBJS_TMP = $(notdir $(TARGET_FILES:.c=.o))
......
#ifndef _ADC_DMA_H #ifndef _ADC_DMA_H
#define _ADC_DMA_H #define _ADC_DMA_H
#include "stm32f1xx_hal_conf.h" #include "stm32f1xx_hal.h"
void adc_init(void); void adc_init(void);
......
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
* @brief This is the list of modules to be used in the HAL driver * @brief This is the list of modules to be used in the HAL driver
*/ */
#define HAL_MODULE_ENABLED #define HAL_MODULE_ENABLED
//#define HAL_ADC_MODULE_ENABLED #define HAL_ADC_MODULE_ENABLED
//#define HAL_CAN_MODULE_ENABLED //#define HAL_CAN_MODULE_ENABLED
//#define HAL_CEC_MODULE_ENABLED //#define HAL_CEC_MODULE_ENABLED
#define HAL_CORTEX_MODULE_ENABLED #define HAL_CORTEX_MODULE_ENABLED
......
#include "adc_dma.h" #include "adc_dma.h"
#include "ram.h" #include "ram.h"
#include "gpio.h"
#define ADC1_CH1 ADC_Channel_0 #define ADC1_CH1 ADC_CHANNEL_0
#define ADC1_CH2 ADC_Channel_1 #define ADC1_CH2 ADC_CHANNEL_1
#define ADC1_CH3 ADC_Channel_2 #define ADC1_CH3 ADC_CHANNEL_2
#define ADC1_CH4 ADC_Channel_3 #define ADC1_CH4 ADC_CHANNEL_3
#define ADC1_CH5 ADC_Channel_4 #define ADC1_CH5 ADC_CHANNEL_4
#define ADC1_CH6 ADC_Channel_5 #define ADC1_CH6 ADC_CHANNEL_5
#define ADC1_CH7 ADC_Channel_6 #define ADC1_CH7 ADC_CHANNEL_6
#define ADC1_CH8 ADC_Channel_7 #define ADC1_CH8 ADC_CHANNEL_7
#define ADC2_CH1 ADC_Channel_8 #define ADC2_CH1 ADC_CHANNEL_8
#define ADC2_CH2 ADC_Channel_9 #define ADC2_CH2 ADC_CHANNEL_9
#define ADC2_CH3 ADC_Channel_10 #define ADC2_CH3 ADC_CHANNEL_10
#define ADC2_CH4 ADC_Channel_11 #define ADC2_CH4 ADC_CHANNEL_11
#define ADC2_CH5 ADC_Channel_12 #define ADC2_CH5 ADC_CHANNEL_12
#define ADC2_CH6 ADC_Channel_13 #define ADC2_CH6 ADC_CHANNEL_13
#define ADC2_CH7 ADC_Channel_14 #define ADC2_CH7 ADC_CHANNEL_14
#define ADC2_CH8 ADC_Channel_15 #define ADC2_CH8 ADC_CHANNEL_15
#define ADC1_CH1_PIN GPIO_Pin_0 #define ADC1_CH1_PIN GPIO_PIN_0
#define ADC1_CH1_PORT GPIOA #define ADC1_CH1_PORT GPIOA
#define ADC1_CH1_PORT_CLK RCC_APB2Periph_GPIOA #define ADC1_CH1_ENABLE_PORT_CLK __HAL_RCC_GPIOA_CLK_ENABLE()
#define ADC1_CH2_PIN GPIO_Pin_1 #define ADC1_CH2_PIN GPIO_PIN_1
#define ADC1_CH2_PORT GPIOA #define ADC1_CH2_PORT GPIOA
#define ADC1_CH2_PORT_CLK RCC_APB2Periph_GPIOA #define ADC1_CH2_ENABLE_PORT_CLK __HAL_RCC_GPIOA_CLK_ENABLE()
#define ADC1_CH3_PIN GPIO_Pin_2 #define ADC1_CH3_PIN GPIO_PIN_2
#define ADC1_CH3_PORT GPIOA #define ADC1_CH3_PORT GPIOA
#define ADC1_CH3_PORT_CLK RCC_APB2Periph_GPIOA #define ADC1_CH3_ENABLE_PORT_CLK __HAL_RCC_GPIOA_CLK_ENABLE()
#define ADC1_CH4_PIN GPIO_Pin_3 #define ADC1_CH4_PIN GPIO_PIN_3
#define ADC1_CH4_PORT GPIOA #define ADC1_CH4_PORT GPIOA
#define ADC1_CH4_PORT_CLK RCC_APB2Periph_GPIOA #define ADC1_CH4_ENABLE_PORT_CLK __HAL_RCC_GPIOA_CLK_ENABLE()
#define ADC1_CH5_PIN GPIO_Pin_4 #define ADC1_CH5_PIN GPIO_PIN_4
#define ADC1_CH5_PORT GPIOA #define ADC1_CH5_PORT GPIOA
#define ADC1_CH5_PORT_CLK RCC_APB2Periph_GPIOA #define ADC1_CH5_ENABLE_PORT_CLK __HAL_RCC_GPIOA_CLK_ENABLE()
#define ADC1_CH6_PIN GPIO_Pin_5 #define ADC1_CH6_PIN GPIO_PIN_5
#define ADC1_CH6_PORT GPIOA #define ADC1_CH6_PORT GPIOA
#define ADC1_CH6_PORT_CLK RCC_APB2Periph_GPIOA #define ADC1_CH6_ENABLE_PORT_CLK __HAL_RCC_GPIOA_CLK_ENABLE()
#define ADC1_CH7_PIN GPIO_Pin_6 #define ADC1_CH7_PIN GPIO_PIN_6
#define ADC1_CH7_PORT GPIOA #define ADC1_CH7_PORT GPIOA
#define ADC1_CH7_PORT_CLK RCC_APB2Periph_GPIOA #define ADC1_CH7_ENABLE_PORT_CLK __HAL_RCC_GPIOA_CLK_ENABLE()
#define ADC1_CH8_PIN GPIO_Pin_7 #define ADC1_CH8_PIN GPIO_PIN_7
#define ADC1_CH8_PORT GPIOA #define ADC1_CH8_PORT GPIOA
#define ADC1_CH8_PORT_CLK RCC_APB2Periph_GPIOA #define ADC1_CH8_ENABLE_PORT_CLK __HAL_RCC_GPIOA_CLK_ENABLE()
#define ADC2_CH1_PIN GPIO_Pin_0 #define ADC1_ENABLE_CLK __ADC1_CLK_ENABLE()
#define ADC2_CH1_PORT GPIOB
#define ADC2_CH1_PORT_CLK RCC_APB2Periph_GPIOB #define ADC2_CH1_PIN GPIO_PIN_0
#define ADC2_CH2_PIN GPIO_Pin_1 #define ADC2_CH1_PORT GPIOB
#define ADC2_CH2_PORT GPIOB #define ADC2_CH1_ENABLE_PORT_CLK __HAL_RCC_GPIOB_CLK_ENABLE()
#define ADC2_CH2_PORT_CLK RCC_APB2Periph_GPIOB #define ADC2_CH2_PIN GPIO_PIN_1
#define ADC2_CH3_PIN GPIO_Pin_0 #define ADC2_CH2_PORT GPIOB
#define ADC2_CH3_PORT GPIOC #define ADC2_CH2_ENABLE_PORT_CLK __HAL_RCC_GPIOB_CLK_ENABLE()
#define ADC2_CH3_PORT_CLK RCC_APB2Periph_GPIOC #define ADC2_CH3_PIN GPIO_PIN_0
#define ADC2_CH4_PIN GPIO_Pin_1 #define ADC2_CH3_PORT GPIOC
#define ADC2_CH4_PORT GPIOC #define ADC2_CH3_ENABLE_PORT_CLK __HAL_RCC_GPIOC_CLK_ENABLE()
#define ADC2_CH4_PORT_CLK RCC_APB2Periph_GPIOC #define ADC2_CH4_PIN GPIO_PIN_1
#define ADC2_CH5_PIN GPIO_Pin_2 #define ADC2_CH4_PORT GPIOC
#define ADC2_CH5_PORT GPIOC #define ADC2_CH4_ENABLE_PORT_CLK __HAL_RCC_GPIOC_CLK_ENABLE()
#define ADC2_CH5_PORT_CLK RCC_APB2Periph_GPIOC #define ADC2_CH5_PIN GPIO_PIN_2
#define ADC2_CH6_PIN GPIO_Pin_3 #define ADC2_CH5_PORT GPIOC
#define ADC2_CH6_PORT GPIOC #define ADC2_CH5_ENABLE_PORT_CLK __HAL_RCC_GPIOC_CLK_ENABLE()
#define ADC2_CH6_PORT_CLK RCC_APB2Periph_GPIOC #define ADC2_CH6_PIN GPIO_PIN_3
#define ADC2_CH7_PIN GPIO_Pin_4 #define ADC2_CH6_PORT GPIOC
#define ADC2_CH7_PORT GPIOC #define ADC2_CH6_ENABLE_PORT_CLK __HAL_RCC_GPIOC_CLK_ENABLE()
#define ADC2_CH7_PORT_CLK RCC_APB2Periph_GPIOC #define ADC2_CH7_PIN GPIO_PIN_4
#define ADC2_CH8_PIN GPIO_Pin_5 #define ADC2_CH7_PORT GPIOC
#define ADC2_CH8_PORT GPIOC #define ADC2_CH7_ENABLE_PORT_CLK __HAL_RCC_GPIOC_CLK_ENABLE()
#define ADC2_CH8_PORT_CLK RCC_APB2Periph_GPIOC #define ADC2_CH8_PIN GPIO_PIN_5
#define ADC2_CH8_PORT GPIOC
#define ADC2_CH8_ENABLE_PORT_CLK __HAL_RCC_GPIOC_CLK_ENABLE()
#define ADC2_ENABLE_CLK __ADC2_CLK_ENABLE()
#define ADC_DMA DMA1
#define ADC_ENABLE_DMA_CLK __HAL_RCC_DMA1_CLK_ENABLE()
#define ADC_DMA_CHANNEL DMA1_Channel1 #define ADC_DMA_CHANNEL DMA1_Channel1
#define ADC_DMA_FLAG_GLIF DMA1_FLAG_GL1
#define ADC_DMA_FLAG_TEIF DMA1_FLAG_TE1
#define ADC_DMA_FLAG_HTIF DMA1_FLAG_HT1
#define ADC_DMA_FLAG_TCIF DMA1_FLAG_TC1
#define ADC_DMA_IRQn DMA1_Channel1_IRQn #define ADC_DMA_IRQn DMA1_Channel1_IRQn
#define ADC_DMA_IRQHandler DMA1_Channel1_IRQHandler #define ADC_DMA_IRQHandler DMA1_Channel1_IRQHandler
#define ADC_CCR_ADDRESS ((uint32_t)0x4001244C)
// private variables // private variables
ADC_HandleTypeDef hadc1;
ADC_HandleTypeDef hadc2;
DMA_HandleTypeDef hdma_adc1;
// interrupt handlers // interrupt handlers
// public functions // public functions
void adc_init(void) void adc_init(void)
{ {
ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitTypeDef GPIO_InitStructure; ADC_MultiModeTypeDef multimode;
DMA_InitTypeDef DMA_InitStructure; ADC_ChannelConfTypeDef sConfig;
//==Configure the systems clocks for the ADC and DMA==
//ADCCLK = PCLK2 / 4
RCC_ADCCLKConfig(RCC_PCLK2_Div8);
/* enable clocks */ /* enable clocks */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); ADC1_CH1_ENABLE_PORT_CLK;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); ADC1_CH2_ENABLE_PORT_CLK;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2, ENABLE); ADC1_CH3_ENABLE_PORT_CLK;
RCC_APB2PeriphClockCmd(ADC1_CH1_PORT_CLK | ADC1_CH2_PORT_CLK | ADC1_CH3_PORT_CLK | ADC1_CH4_PORT_CLK | ADC1_CH4_ENABLE_PORT_CLK;
ADC1_CH5_PORT_CLK | ADC1_CH6_PORT_CLK | ADC1_CH7_PORT_CLK | ADC1_CH8_PORT_CLK, ENABLE); ADC1_CH5_ENABLE_PORT_CLK;
RCC_APB2PeriphClockCmd(ADC2_CH1_PORT_CLK | ADC2_CH2_PORT_CLK | ADC2_CH3_PORT_CLK | ADC2_CH4_PORT_CLK | ADC1_CH6_ENABLE_PORT_CLK;
ADC2_CH5_PORT_CLK | ADC2_CH6_PORT_CLK | ADC2_CH7_PORT_CLK | ADC2_CH8_PORT_CLK, ENABLE); ADC1_CH7_ENABLE_PORT_CLK;
ADC1_CH8_ENABLE_PORT_CLK;
ADC2_CH1_ENABLE_PORT_CLK;
ADC2_CH2_ENABLE_PORT_CLK;
ADC2_CH3_ENABLE_PORT_CLK;
ADC2_CH4_ENABLE_PORT_CLK;
ADC2_CH5_ENABLE_PORT_CLK;
ADC2_CH6_ENABLE_PORT_CLK;
ADC2_CH7_ENABLE_PORT_CLK;
ADC2_CH8_ENABLE_PORT_CLK;
ADC_ENABLE_DMA_CLK;
ADC1_ENABLE_CLK;
/* configure ADC1 */
hadc1.Instance = ADC1;
hadc1.Init.ScanConvMode = ENABLE;
hadc1.Init.ContinuousConvMode = ENABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 8;
HAL_ADC_Init(&hadc1);
multimode.Mode = ADC_DUALMODE_REGSIMULT;
HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode);
/* configure ADC1 channels */
sConfig.Channel = ADC1_CH1;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
sConfig.Channel = ADC1_CH2;
sConfig.Rank = 2;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
sConfig.Channel = ADC1_CH3;
sConfig.Rank = 3;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
sConfig.Channel = ADC1_CH4;
sConfig.Rank = 4;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
sConfig.Channel = ADC1_CH5;
sConfig.Rank = 5;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
sConfig.Channel = ADC1_CH6;
sConfig.Rank = 6;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
sConfig.Channel = ADC1_CH7;
sConfig.Rank = 7;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
sConfig.Channel = ADC1_CH8;
sConfig.Rank = 8;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
/* configure GPIO */
GPIO_InitStruct.Pin = ADC1_CH1_PIN|ADC1_CH2_PIN|ADC1_CH3_PIN|ADC1_CH4_PIN|
ADC1_CH5_PIN|ADC1_CH6_PIN|ADC1_CH7_PIN|ADC1_CH8_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
ADC2_ENABLE_CLK;
hadc2.Instance = ADC2;
hadc2.Init.ScanConvMode = ENABLE;
hadc2.Init.ContinuousConvMode = ENABLE;
hadc2.Init.DiscontinuousConvMode = DISABLE;
hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc2.Init.NbrOfConversion = 8;
HAL_ADC_Init(&hadc2);
multimode.Mode = ADC_DUALMODE_REGSIMULT;
HAL_ADCEx_MultiModeConfigChannel(&hadc2, &multimode);
/* configure ADC2 channels */
sConfig.Channel = ADC2_CH1;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
HAL_ADC_ConfigChannel(&hadc2, &sConfig);
sConfig.Channel = ADC2_CH2;
sConfig.Rank = 2;
HAL_ADC_ConfigChannel(&hadc2, &sConfig);
sConfig.Channel = ADC2_CH3;
sConfig.Rank = 3;
HAL_ADC_ConfigChannel(&hadc2, &sConfig);
sConfig.Channel = ADC2_CH4;
sConfig.Rank = 4;
HAL_ADC_ConfigChannel(&hadc2, &sConfig);
sConfig.Channel = ADC2_CH5;
sConfig.Rank = 5;
HAL_ADC_ConfigChannel(&hadc2, &sConfig);
sConfig.Channel = ADC2_CH6;
sConfig.Rank = 6;
HAL_ADC_ConfigChannel(&hadc2, &sConfig);
sConfig.Channel = ADC2_CH7;
sConfig.Rank = 7;
HAL_ADC_ConfigChannel(&hadc2, &sConfig);
sConfig.Channel = ADC2_CH8;
sConfig.Rank = 8;
HAL_ADC_ConfigChannel(&hadc2, &sConfig);
/* configure GPIO */ /* configure GPIO */
GPIO_InitStructure.GPIO_Pin = ADC1_CH1_PIN; GPIO_InitStruct.Pin = ADC2_CH3_PIN|ADC2_CH4_PIN|ADC2_CH5_PIN|ADC2_CH6_PIN|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; ADC2_CH7_PIN|ADC2_CH8_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_Init(ADC1_CH1_PORT, &GPIO_InitStructure); HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_InitStructure.GPIO_Pin = ADC1_CH2_PIN;
GPIO_Init(ADC1_CH2_PORT, &GPIO_InitStructure); GPIO_InitStruct.Pin = ADC2_CH1_PIN|ADC2_CH2_PIN;
GPIO_InitStructure.GPIO_Pin = ADC1_CH3_PIN; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_Init(ADC1_CH3_PORT, &GPIO_InitStructure); HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_InitStructure.GPIO_Pin = ADC1_CH4_PIN;
GPIO_Init(ADC1_CH4_PORT, &GPIO_InitStructure); /* initialize DMA */
GPIO_InitStructure.GPIO_Pin = ADC1_CH5_PIN; hdma_adc1.Instance = ADC_DMA_CHANNEL;
GPIO_Init(ADC1_CH5_PORT, &GPIO_InitStructure); hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
GPIO_InitStructure.GPIO_Pin = ADC1_CH6_PIN; hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
GPIO_Init(ADC1_CH6_PORT, &GPIO_InitStructure); hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
GPIO_InitStructure.GPIO_Pin = ADC1_CH7_PIN; hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
GPIO_Init(ADC1_CH7_PORT, &GPIO_InitStructure); hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
GPIO_InitStructure.GPIO_Pin = ADC1_CH8_PIN; hdma_adc1.Init.Mode = DMA_CIRCULAR;
GPIO_Init(ADC1_CH8_PORT, &GPIO_InitStructure); hdma_adc1.Init.Priority = DMA_PRIORITY_LOW;
GPIO_InitStructure.GPIO_Pin = ADC2_CH1_PIN; HAL_DMA_Init(&hdma_adc1);
GPIO_Init(ADC2_CH1_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = ADC2_CH2_PIN; __HAL_LINKDMA(&hadc1,DMA_Handle,hdma_adc1);
GPIO_Init(ADC2_CH2_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = ADC2_CH3_PIN; /* calibrate ADC1 */
GPIO_Init(ADC2_CH3_PORT, &GPIO_InitStructure); HAL_ADCEx_Calibration_Start(&hadc1);
GPIO_InitStructure.GPIO_Pin = ADC2_CH4_PIN; HAL_ADCEx_Calibration_Start(&hadc2);
GPIO_Init(ADC2_CH4_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = ADC2_CH5_PIN; HAL_ADC_Start(&hadc2);
GPIO_Init(ADC2_CH5_PORT, &GPIO_InitStructure); HAL_ADCEx_MultiModeStart_DMA(&hadc1, (uint32_t *)&ram_data[DARWIN_MIC1_L],16);
GPIO_InitStructure.GPIO_Pin = ADC2_CH6_PIN; gpio_set_led(LED_RX);
GPIO_Init(ADC2_CH6_PORT, &GPIO_InitStructure); // ADC_Enable(&hadc2);
GPIO_InitStructure.GPIO_Pin = ADC2_CH7_PIN; // ADC_Enable(&hadc1);
GPIO_Init(ADC2_CH7_PORT, &GPIO_InitStructure); // __HAL_ADC_CLEAR_FLAG(&hadc1, ADC_FLAG_EOC);
GPIO_InitStructure.GPIO_Pin = ADC2_CH8_PIN; // /* Enable ADC DMA mode of ADC master */
GPIO_Init(ADC2_CH8_PORT, &GPIO_InitStructure); // SET_BIT(hadc1.Instance->CR2, ADC_CR2_DMA);
// /* Start the DMA channel */
/* ADC1 Common Init */ // HAL_DMA_Start_IT(hadc1.DMA_Handle, (uint32_t)&hadc1.Instance->DR, (uint32_t)&ram_data[DARWIN_MIC1_L], 8);
ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult; // SET_BIT(hadc1.Instance->CR2, (ADC_CR2_SWSTART | ADC_CR2_EXTTRIG));
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 8;
ADC_Init(ADC1, &ADC_InitStructure);
/* ADC1 regular channels configuration */
ADC_RegularChannelConfig(ADC1, ADC1_CH1, 1, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1, ADC1_CH2, 2, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1, ADC1_CH3, 3, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1, ADC1_CH4, 4, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1, ADC1_CH5, 5, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1, ADC1_CH6, 6, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1, ADC1_CH7, 7, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1, ADC1_CH8, 8, ADC_SampleTime_239Cycles5);
/* Enable ADC1 DMA */
ADC_DMACmd(ADC1, ENABLE);
/* ADC2 configuration */
ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult;
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 8;
ADC_Init(ADC2, &ADC_InitStructure);
/* ADC1 regular channels 10, 11 configuration */
ADC_RegularChannelConfig(ADC2, ADC2_CH1, 1, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC2, ADC2_CH2, 2, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC2, ADC2_CH3, 3, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC2, ADC2_CH4, 4, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC2, ADC2_CH5, 5, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC2, ADC2_CH6, 6, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC2, ADC2_CH7, 7, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC2, ADC2_CH8, 8, ADC_SampleTime_239Cycles5);
/* Enable ADC2 external trigger conversion */
ADC_ExternalTrigConvCmd(ADC2, ENABLE);
/* Enable ADC1 */
ADC_Cmd(ADC1, ENABLE);
/* Enable ADC1 reset calibration register */
ADC_ResetCalibration(ADC1);
/* Check the end of ADC1 reset calibration register */
while(ADC_GetResetCalibrationStatus(ADC1));
/* Start ADC1 calibration */
ADC_StartCalibration(ADC1);
/* Check the end of ADC1 calibration */
while(ADC_GetCalibrationStatus(ADC1));
/* Enable ADC2 */
ADC_Cmd(ADC2, ENABLE);
/* Enable ADC2 reset calibration register */
ADC_ResetCalibration(ADC2);
/* Check the end of ADC2 reset calibration register */
while(ADC_GetResetCalibrationStatus(ADC2));
/* Start ADC2 calibration */
ADC_StartCalibration(ADC2);
/* Check the end of ADC2 calibration */
while(ADC_GetCalibrationStatus(ADC2));
/* DMA Config */
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ram_data[DARWIN_MIC1_L];
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC_CCR_ADDRESS;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize = 8;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(ADC_DMA_CHANNEL,&DMA_InitStructure);
/* DMA2_Stream0 enable */
DMA_Cmd(ADC_DMA_CHANNEL, ENABLE);
/* Start ADC1 Software Conversion */
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
} }
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "eeprom.h" #include "eeprom.h"
#include "ram.h" #include "ram.h"
#include "comm.h" #include "comm.h"
#include "adc_dma.h"
#include "dynamixel_slave_uart_dma.h" #include "dynamixel_slave_uart_dma.h"
//#include "motion_manager.h" //#include "motion_manager.h"
//#include "action.h" //#include "action.h"
...@@ -13,7 +14,6 @@ ...@@ -13,7 +14,6 @@
//#include "grippers.h" //#include "grippers.h"
//#include "dynamixel_master_uart_dma.h" //#include "dynamixel_master_uart_dma.h"
//#include "imu.h" //#include "imu.h"
//#include "adc_dma.h"
//#include <math.h> //#include <math.h>
void SysTick_Handler(void) void SysTick_Handler(void)
...@@ -38,8 +38,6 @@ int main(void) ...@@ -38,8 +38,6 @@ int main(void)
// grippers_init(); // grippers_init();
// initialize imu // initialize imu
// imu_init(); // imu_init();
// initialize adc
// adc_init();
// dyn_master_enable_power(); // dyn_master_enable_power();
// delay_ms(1000); // delay_ms(1000);
...@@ -55,6 +53,8 @@ int main(void) ...@@ -55,6 +53,8 @@ int main(void)
EE_Init(); EE_Init();
// initialize the Dynamixel RAM memory space // initialize the Dynamixel RAM memory space
ram_init(); ram_init();
// initialize adc
adc_init();
/* initialize the dynamixel slave interface*/ /* initialize the dynamixel slave interface*/
dyn_slave_init(); dyn_slave_init();
EE_ReadVariable(DEVICE_ID_OFFSET,&eeprom_data); EE_ReadVariable(DEVICE_ID_OFFSET,&eeprom_data);
......
#include "dynamixel_slave_uart_dma.h" #include "dynamixel_slave_uart_dma.h"
#include "gpio.h"
#define DYN_SLAVE USART3 #define DYN_SLAVE USART3
#define DYN_SLAVE_ENABLE_CLK __HAL_RCC_USART3_CLK_ENABLE() #define DYN_SLAVE_ENABLE_CLK __HAL_RCC_USART3_CLK_ENABLE()
...@@ -80,7 +79,6 @@ void DYN_SLAVE_IRQHandler(void) ...@@ -80,7 +79,6 @@ void DYN_SLAVE_IRQHandler(void)
} }
break; break;
case 3: dyn_slave_rx_buffer[num_bytes]=data; case 3: dyn_slave_rx_buffer[num_bytes]=data;
gpio_toggle_led(LED_RX);
num_bytes=0; num_bytes=0;
// disable USART RX interrupts // disable USART RX interrupts
__HAL_UART_DISABLE_IT(&UartHandle, UART_IT_RXNE); __HAL_UART_DISABLE_IT(&UartHandle, UART_IT_RXNE);
...@@ -96,7 +94,6 @@ void DYN_SLAVE_IRQHandler(void) ...@@ -96,7 +94,6 @@ void DYN_SLAVE_IRQHandler(void)
{ {
if(__HAL_UART_GET_IT_SOURCE(&UartHandle, UART_IT_TC) !=RESET) if(__HAL_UART_GET_IT_SOURCE(&UartHandle, UART_IT_TC) !=RESET)
{ {
gpio_toggle_led(LED_3);
__HAL_UART_CLEAR_FLAG(&UartHandle,UART_FLAG_TC); __HAL_UART_CLEAR_FLAG(&UartHandle,UART_FLAG_TC);
__HAL_UART_DISABLE_IT(&UartHandle, UART_IT_TC); __HAL_UART_DISABLE_IT(&UartHandle, UART_IT_TC);
dyn_slave_sending_packet=0x00; dyn_slave_sending_packet=0x00;
...@@ -110,15 +107,12 @@ void DYN_SLAVE_DMA_TX_IRQHandler(void) ...@@ -110,15 +107,12 @@ void DYN_SLAVE_DMA_TX_IRQHandler(void)
{ {
if(__HAL_DMA_GET_IT_SOURCE(UartHandle.hdmatx, DMA_IT_TC) != RESET) if(__HAL_DMA_GET_IT_SOURCE(UartHandle.hdmatx, DMA_IT_TC) != RESET)
{ {
gpio_toggle_led(LED_2); /* Disable the half transfer interrupt */
if((UartHandle.hdmatx->Instance->CCR & DMA_CCR_CIRC) == 0) __HAL_DMA_DISABLE_IT(UartHandle.hdmatx, DMA_IT_TC);
{
/* Disable the transfer complete interrupt */
__HAL_DMA_DISABLE_IT(UartHandle.hdmatx, DMA_IT_TC);
}
/* Clear the transfer complete flag */ /* Clear the transfer complete flag */
__HAL_DMA_CLEAR_FLAG(UartHandle.hdmatx, __HAL_DMA_GET_TC_FLAG_INDEX(UartHandle.hdmatx)); __HAL_DMA_CLEAR_FLAG(UartHandle.hdmatx, __HAL_DMA_GET_TC_FLAG_INDEX(UartHandle.hdmatx));
HAL_UART_DMAStop(&UartHandle); CLEAR_BIT(UartHandle.Instance->CR3, (USART_CR3_DMAT | USART_CR3_DMAR));
HAL_DMA_Abort(UartHandle.hdmatx);
__HAL_UART_ENABLE_IT(&UartHandle, UART_IT_TC); __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_TC);
} }
} }
...@@ -126,12 +120,8 @@ void DYN_SLAVE_DMA_TX_IRQHandler(void) ...@@ -126,12 +120,8 @@ void DYN_SLAVE_DMA_TX_IRQHandler(void)
{ {
if(__HAL_DMA_GET_IT_SOURCE(UartHandle.hdmatx, DMA_IT_HT) != RESET) if(__HAL_DMA_GET_IT_SOURCE(UartHandle.hdmatx, DMA_IT_HT) != RESET)
{ {
/* Disable the half transfer interrupt if the DMA mode is not CIRCULAR */ /* Disable the half transfer interrupt */
if((UartHandle.hdmatx->Instance->CCR & DMA_CCR_CIRC) == 0) __HAL_DMA_DISABLE_IT(UartHandle.hdmatx, DMA_IT_HT);
{
/* Disable the half transfer interrupt */
__HAL_DMA_DISABLE_IT(UartHandle.hdmatx, DMA_IT_HT);
}
/* Clear the half transfer complete flag */ /* Clear the half transfer complete flag */
__HAL_DMA_CLEAR_FLAG(UartHandle.hdmatx, __HAL_DMA_GET_HT_FLAG_INDEX(UartHandle.hdmatx)); __HAL_DMA_CLEAR_FLAG(UartHandle.hdmatx, __HAL_DMA_GET_HT_FLAG_INDEX(UartHandle.hdmatx));
} }
...@@ -140,20 +130,16 @@ void DYN_SLAVE_DMA_TX_IRQHandler(void) ...@@ -140,20 +130,16 @@ void DYN_SLAVE_DMA_TX_IRQHandler(void)
void DYN_SLAVE_DMA_RX_IRQHandler(void) void DYN_SLAVE_DMA_RX_IRQHandler(void)
{ {
gpio_toggle_led(LED_4);
if(__HAL_DMA_GET_FLAG(UartHandle.hdmarx,__HAL_DMA_GET_TC_FLAG_INDEX(UartHandle.hdmarx)) != RESET) if(__HAL_DMA_GET_FLAG(UartHandle.hdmarx,__HAL_DMA_GET_TC_FLAG_INDEX(UartHandle.hdmarx)) != RESET)
{ {
if(__HAL_DMA_GET_IT_SOURCE(UartHandle.hdmarx, DMA_IT_TC) != RESET) if(__HAL_DMA_GET_IT_SOURCE(UartHandle.hdmarx, DMA_IT_TC) != RESET)
{ {
gpio_toggle_led(LED_TX); /* Disable the transfer complete interrupt */
if((UartHandle.hdmarx->Instance->CCR & DMA_CCR_CIRC) == 0) __HAL_DMA_DISABLE_IT(UartHandle.hdmarx, DMA_IT_TC);
{
/* Disable the transfer complete interrupt */
__HAL_DMA_DISABLE_IT(UartHandle.hdmarx, DMA_IT_TC);
}
/* Clear the transfer complete flag */ /* Clear the transfer complete flag */
__HAL_DMA_CLEAR_FLAG(UartHandle.hdmarx, __HAL_DMA_GET_TC_FLAG_INDEX(UartHandle.hdmarx)); __HAL_DMA_CLEAR_FLAG(UartHandle.hdmarx, __HAL_DMA_GET_TC_FLAG_INDEX(UartHandle.hdmarx));
HAL_UART_DMAStop(&UartHandle); CLEAR_BIT(UartHandle.Instance->CR3, (USART_CR3_DMAT | USART_CR3_DMAR));
HAL_DMA_Abort(UartHandle.hdmarx);
__HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE); __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE);
dyn_slave_packet_ready=0x01; dyn_slave_packet_ready=0x01;
} }
...@@ -162,12 +148,8 @@ void DYN_SLAVE_DMA_RX_IRQHandler(void) ...@@ -162,12 +148,8 @@ void DYN_SLAVE_DMA_RX_IRQHandler(void)
{ {
if(__HAL_DMA_GET_IT_SOURCE(UartHandle.hdmarx, DMA_IT_HT) != RESET) if(__HAL_DMA_GET_IT_SOURCE(UartHandle.hdmarx, DMA_IT_HT) != RESET)
{ {
/* Disable the half transfer interrupt if the DMA mode is not CIRCULAR */ /* Disable the half transfer interrupt */
if((UartHandle.hdmarx->Instance->CCR & DMA_CCR_CIRC) == 0) __HAL_DMA_DISABLE_IT(UartHandle.hdmarx, DMA_IT_HT);
{
/* Disable the half transfer interrupt */
__HAL_DMA_DISABLE_IT(UartHandle.hdmarx, DMA_IT_HT);
}
/* Clear the half transfer complete flag */ /* Clear the half transfer complete flag */
__HAL_DMA_CLEAR_FLAG(UartHandle.hdmarx, __HAL_DMA_GET_HT_FLAG_INDEX(UartHandle.hdmarx)); __HAL_DMA_CLEAR_FLAG(UartHandle.hdmarx, __HAL_DMA_GET_HT_FLAG_INDEX(UartHandle.hdmarx));
} }
......
...@@ -81,6 +81,7 @@ void HAL_MspInit(void) ...@@ -81,6 +81,7 @@ void HAL_MspInit(void)
*/ */
RCC_OscInitTypeDef RCC_OscInitStruct; RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_PeriphCLKInitTypeDef PeriphClkInit;
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2); HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);
...@@ -98,6 +99,10 @@ void HAL_MspInit(void) ...@@ -98,6 +99,10 @@ void HAL_MspInit(void)
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2); HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);
} }
/** /**
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment