Changeset - d651f75c8fbc
[Not reviewed]
ph
0 3 2
matthewreed - 8 years ago 2017-10-05 18:41:17

Added ability to read ph meter from analog input
5 files changed with 90 insertions and 1 deletions:
0 comments (0 inline, 0 general)
Inc/ph.h
Show inline comments
 
new file 100644
 
#ifndef _PH_H_
 
#define _PH_H_
 
 
#include "stm32f0xx_hal.h"
 
#include <stdbool.h>
 
#include <led.h>
 
#include <protocol.h>
 
#include <config.h>
 
 
void init(void);
 
float get_ph(void);
 
 
#endif /*_GPIO_H_ */
Inc/stm32f0xx_hal_conf.h
Show inline comments
 
@@ -28,49 +28,49 @@
 
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
  *
 
  ******************************************************************************
 
  */ 
 
 
/* Define to prevent recursive inclusion -------------------------------------*/
 
#ifndef __STM32F0xx_HAL_CONF_H
 
#define __STM32F0xx_HAL_CONF_H
 
 
#ifdef __cplusplus
 
 extern "C" {
 
#endif
 
 
#include "main.h"
 
/* Exported types ------------------------------------------------------------*/
 
/* Exported constants --------------------------------------------------------*/
 
 
/* ########################## Module Selection ############################## */
 
/**
 
  * @brief This is the list of modules to be used in the HAL driver 
 
  */
 
#define HAL_MODULE_ENABLED  
 
/*#define HAL_ADC_MODULE_ENABLED   */
 
#define HAL_ADC_MODULE_ENABLED
 
/*#define HAL_CRYP_MODULE_ENABLED   */
 
#define HAL_CAN_MODULE_ENABLED
 
/*#define HAL_CEC_MODULE_ENABLED   */
 
/*#define HAL_COMP_MODULE_ENABLED   */
 
/*#define HAL_CRC_MODULE_ENABLED   */
 
/*#define HAL_CRYP_MODULE_ENABLED   */
 
/*#define HAL_TSC_MODULE_ENABLED   */
 
/*#define HAL_DAC_MODULE_ENABLED   */
 
/*#define HAL_I2S_MODULE_ENABLED   */
 
/*#define HAL_IWDG_MODULE_ENABLED   */
 
/*#define HAL_LCD_MODULE_ENABLED   */
 
/*#define HAL_LPTIM_MODULE_ENABLED   */
 
/*#define HAL_RNG_MODULE_ENABLED   */
 
/*#define HAL_RTC_MODULE_ENABLED   */
 
/*#define HAL_SPI_MODULE_ENABLED   */
 
#define HAL_TIM_MODULE_ENABLED
 
/*#define HAL_UART_MODULE_ENABLED   */
 
/*#define HAL_USART_MODULE_ENABLED   */
 
/*#define HAL_IRDA_MODULE_ENABLED   */
 
/*#define HAL_SMARTCARD_MODULE_ENABLED   */
 
/*#define HAL_SMBUS_MODULE_ENABLED   */
 
/*#define HAL_WWDG_MODULE_ENABLED   */
 
/*#define HAL_PCD_MODULE_ENABLED   */
 
#define HAL_CORTEX_MODULE_ENABLED
Makefile
Show inline comments
 
@@ -48,48 +48,49 @@ BUILD_DIR = build
 
######################################
 
# C sources
 
C_SOURCES =  \
 
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c \
 
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.c \
 
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.c \
 
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c \
 
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c \
 
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c \
 
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.c \
 
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c \
 
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.c \
 
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.c \
 
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c \
 
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.c \
 
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c \
 
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.c \
 
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.c \
 
Src/gpio.c \
 
Src/main.c \
 
Src/stm32f0xx_hal_msp.c \
 
Src/stm32f0xx_it.c \
 
Src/system_stm32f0xx.c \
 
Src/system.c \
 
Src/ph.c \
 
hydrobot-sharedlibs/src/can_buffer.c \
 
hydrobot-sharedlibs/src/can.c \
 
hydrobot-sharedlibs/src/flash.c \
 
hydrobot-sharedlibs/src/led.c \
 
hydrobot-sharedlibs/src/protocol.c
 
 
# ASM sources
 
ASM_SOURCES =  \
 
startup_stm32f042x6.s
 
 
 
######################################
 
# firmware library
 
######################################
 
PERIFLIB_SOURCES = 
 
 
 
#######################################
 
# binaries
 
#######################################
 
BINPATH = 
 
PREFIX = arm-none-eabi-
 
CC = $(PREFIX)gcc
 
AS = $(PREFIX)gcc -x assembler-with-cpp
Src/main.c
Show inline comments
 
#include "stm32f0xx_hal.h"
 
#include "can.h"
 
#include "gpio.h"
 
#include "system.h"
 
#include "led.h"
 
#include "protocol.h"
 
#include "ph.h"
 
 
 
int main(void)
 
{
 
 
    HAL_Init();
 
    system_init();
 
    gpio_init();
 
 
    protocol_init(PROTOMODULE);
 
 
    led_init();
 
    led_blink(LED_STATUS, 2000);
 
    led_blink_once(LED_CAN, 2000);
 
    led_set(LED_ERROR, 0);
 
 
    uint32_t loop_timer_1ms = 0;
 
    uint32_t loop_timer_10ms = 0;
 
    uint32_t loop_timer_200ms = 0;
 
    uint32_t loop_timer_1s = 0;
 
    uint32_t loop_timer_2s = 0;
 
    uint32_t loop_timer_data = 0;
 
 
    while (1)
 
@@ -43,48 +44,50 @@ int main(void)
 
        {
 
 
            loop_timer_10ms = HAL_GetTick();
 
        }
 
 
        if (HAL_GetTick() - loop_timer_200ms >= 200)
 
        {
 
 
            loop_timer_200ms = HAL_GetTick();
 
        }
 
 
        if (HAL_GetTick() - loop_timer_1s >= 1000)
 
        {
 
 
            loop_timer_1s = HAL_GetTick();
 
        }
 
        if (HAL_GetTick() - loop_timer_2s >= 2000)
 
        {
 
 
            loop_timer_2s = HAL_GetTick();
 
        }
 
        if (HAL_GetTick() - loop_timer_data >= (protocol_get_settings()->val.data_rate))
 
        {
 
 
            protocol_send_data(NONE, 0, get_ph());
 
 
            loop_timer_data = HAL_GetTick();
 
        }
 
    }
 
 
}
 
 
bool protocol_set_output(protocol_message_t* message)
 
{
 
    bool result = false;
 
 
    return result;
 
}
 
 
bool protocol_get_data(protocol_message_t* message)
 
{
 
    bool result = false;
 
 
    return result;
 
}
 
 
bool protocol_config(protocol_message_t* message)
 
{
 
    bool result = false;
 
    protocol_data_key_t data = (protocol_data_key_t)(uint16_t)message->data.float_data;
Src/ph.c
Show inline comments
 
new file 100644
 
#include "ph.h"
 
 
ADC_HandleTypeDef hadc;
 
DMA_HandleTypeDef hdma_adc;
 
 
uint32_t adc_reading;
 
 
 
void init(void)
 
{
 
    __HAL_RCC_ADC1_CLK_ENABLE();
 
    __HAL_RCC_DMA1_CLK_ENABLE();
 
 
    GPIO_InitTypeDef GPIO_InitStruct;
 
 
    GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_7;
 
    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
 
    GPIO_InitStruct.Pull = GPIO_NOPULL;
 
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
 
    GPIO_InitStruct.Pin = GPIO_PIN_0;
 
    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
 
    GPIO_InitStruct.Pull = GPIO_NOPULL;
 
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 
 
    ADC_ChannelConfTypeDef sConfig;
 
 
    hadc.Instance = ADC1;
 
    hadc.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
 
    hadc.Init.Resolution = ADC_RESOLUTION_12B;
 
    hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
 
    hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD;
 
    hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
 
    hadc.Init.LowPowerAutoWait = DISABLE;
 
    hadc.Init.LowPowerAutoPowerOff = DISABLE;
 
    hadc.Init.ContinuousConvMode = ENABLE;
 
    hadc.Init.DiscontinuousConvMode = DISABLE;
 
    hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
 
    hadc.Init.DMAContinuousRequests = ENABLE;
 
    hadc.Init.Overrun = ADC_OVR_DATA_PRESERVED;
 
    HAL_ADC_Init(&hadc);
 
 
 
    // Configure DMA
 
    hdma_adc.Instance = DMA1_Channel1;
 
    hdma_adc.Init.Direction = DMA_PERIPH_TO_MEMORY;
 
    hdma_adc.Init.PeriphInc = DMA_PINC_DISABLE;
 
    hdma_adc.Init.MemInc = DMA_MINC_ENABLE;
 
    hdma_adc.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
 
    hdma_adc.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
 
    hdma_adc.Init.Mode = DMA_CIRCULAR;
 
    hdma_adc.Init.Priority = DMA_PRIORITY_LOW;
 
    HAL_DMA_Init(&hdma_adc);
 
 
    __HAL_LINKDMA(&hadc, DMA_Handle, hdma_adc);
 
 
    sConfig.Channel = ADC_CHANNEL_0;
 
    sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;
 
    sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
 
    HAL_ADC_ConfigChannel(&hadc, &sConfig);
 
 
    HAL_ADC_Start_DMA(&hadc, &adc_reading, 1);
 
}
 
 
float get_ph(void)
 
{
 
    float ph = 0;
 
 
    ph = (float) adc_reading;
 
 
    return ph;
 
}
0 comments (0 inline, 0 general)