diff Discovery/Src/ostc.c @ 38:5f11787b4f42

include in ostc4 repository
author heinrichsweikamp
date Sat, 28 Apr 2018 11:52:34 +0200
parents
children 923c4566a2a1
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Discovery/Src/ostc.c	Sat Apr 28 11:52:34 2018 +0200
@@ -0,0 +1,421 @@
+///////////////////////////////////////////////////////////////////////////////
+/// -*- coding: UTF-8 -*-
+///
+/// \file   Discovery/Src/ostc.c
+/// \brief  Hardware specific configuration
+/// \author Heinrichs Weikamp gmbh
+/// \date   05-Dec-2014
+///
+/// \details
+///
+/// $Id$
+///////////////////////////////////////////////////////////////////////////////
+/// \par Copyright (c) 2014-2018 Heinrichs Weikamp gmbh
+///
+///     This program is free software: you can redistribute it and/or modify
+///     it under the terms of the GNU General Public License as published by
+///     the Free Software Foundation, either version 3 of the License, or
+///     (at your option) any later version.
+///
+///     This program is distributed in the hope that it will be useful,
+///     but WITHOUT ANY WARRANTY; without even the implied warranty of
+///     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+///     GNU General Public License for more details.
+///
+///     You should have received a copy of the GNU General Public License
+///     along with this program.  If not, see <http://www.gnu.org/licenses/>.
+//////////////////////////////////////////////////////////////////////////////
+
+/* Includes ------------------------------------------------------------------*/
+#include "ostc.h"
+#include "stm32f4xx_hal.h"
+
+#ifndef BOOTLOADER_STANDALONE
+#include "tCCR.h"
+#endif
+
+/* Exported variables --------------------------------------------------------*/
+SPI_HandleTypeDef hspiDisplay;
+SPI_HandleTypeDef cpu2DmaSpi;
+
+
+UART_HandleTypeDef UartHandle;
+UART_HandleTypeDef UartPiezoTxHandle;
+UART_HandleTypeDef UartIR_HUD_Handle;
+
+__IO ITStatus UartReady = RESET;
+__IO ITStatus UartReadyHUD = RESET;
+
+/* Private types -------------------------------------------------------------*/
+
+/* Private variables ---------------------------------------------------------*/
+
+/* Private variables with external access via get_xxx() function -------------*/
+
+/* Private function prototypes -----------------------------------------------*/
+
+/* Exported functions --------------------------------------------------------*/
+
+/** SPI init function
+    * called from HAL
+    */
+void MX_SPI_Init(void)
+{
+    hspiDisplay.Instance = SPI5;
+    hspiDisplay.Init.Mode = SPI_MODE_MASTER;
+    hspiDisplay.Init.Direction = SPI_DIRECTION_2LINES;
+    hspiDisplay.Init.DataSize = SPI_DATASIZE_8BIT;
+    hspiDisplay.Init.CLKPolarity = SPI_POLARITY_LOW;
+    hspiDisplay.Init.CLKPhase = SPI_PHASE_1EDGE;
+    hspiDisplay.Init.NSS = SPI_NSS_SOFT;
+    hspiDisplay.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;//SPI_BAUDRATEPRESCALER_4;//SPI_BAUDRATEPRESCALER_256;
+    hspiDisplay.Init.FirstBit = SPI_FIRSTBIT_MSB;
+    hspiDisplay.Init.TIMode = SPI_TIMODE_DISABLED;
+    hspiDisplay.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
+    HAL_SPI_Init(&hspiDisplay);
+
+    cpu2DmaSpi.Instance                 = SPI1;
+    cpu2DmaSpi.Init.Mode                = SPI_MODE_MASTER;
+    cpu2DmaSpi.Init.Direction           = SPI_DIRECTION_2LINES;
+    cpu2DmaSpi.Init.DataSize            = SPI_DATASIZE_8BIT;
+    cpu2DmaSpi.Init.CLKPolarity         = SPI_POLARITY_LOW;
+    cpu2DmaSpi.Init.CLKPhase            = SPI_PHASE_1EDGE;
+    cpu2DmaSpi.Init.NSS                 = SPI_NSS_SOFT;//SPI_NSS_HARD_OUTPUT;//SPI_NSS_SOFT;
+    cpu2DmaSpi.Init.BaudRatePrescaler   = SPI_BAUDRATEPRESCALER_128;
+    cpu2DmaSpi.Init.FirstBit            = SPI_FIRSTBIT_MSB;
+    cpu2DmaSpi.Init.TIMode              = SPI_TIMODE_DISABLED;
+    cpu2DmaSpi.Init.CRCCalculation 		= SPI_CRCCALCULATION_DISABLED;
+    cpu2DmaSpi.Init.CRCPolynomial 		= 7;
+
+    HAL_SPI_Init(&cpu2DmaSpi);
+}
+
+
+void MX_GPIO_Backlight_max_static_only_Init(void)
+{
+    GPIO_InitTypeDef GPIO_InitStruct;
+    TIM_BACKLIGHT_GPIO_ENABLE();
+
+    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;//GPIO_PULLUP; /* should be normally high */
+    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
+
+    GPIO_InitStruct.Pin = TIM_BACKLIGHT_PIN;
+    HAL_GPIO_Init(TIM_BACKLIGHT_GPIO_PORT, &GPIO_InitStruct);
+
+    HAL_GPIO_WritePin(TIM_BACKLIGHT_GPIO_PORT,TIM_BACKLIGHT_PIN,GPIO_PIN_SET);
+}
+
+
+void MX_GPIO_One_Button_only_Init(void)
+{
+    GPIO_InitTypeDef GPIO_InitStruct;
+    BUTTON_NEXT_GPIO_ENABLE();
+
+    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;//GPIO_PULLUP; /* should be normally high */
+    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
+
+    GPIO_InitStruct.Pin = BUTTON_NEXT_PIN;
+    HAL_GPIO_Init(BUTTON_NEXT_GPIO_PORT, &GPIO_InitStruct);
+}
+
+
+GPIO_PinState MX_GPIO_Read_The_One_Button(void)
+{
+    return HAL_GPIO_ReadPin(BUTTON_NEXT_GPIO_PORT, BUTTON_NEXT_PIN);
+}
+
+void MX_GPIO_Init(void)
+{
+    GPIO_InitTypeDef GPIO_InitStruct;
+
+    DISPLAY_CSB_GPIO_ENABLE();
+    DISPLAY_RESETB_GPIO_ENABLE();
+    EXTFLASH_CSB_GPIO_ENABLE();
+    SMALLCPU_CSB_GPIO_ENABLE();
+    OSCILLOSCOPE_GPIO_ENABLE();
+    OSCILLOSCOPE2_GPIO_ENABLE();
+
+    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+    GPIO_InitStruct.Pull = GPIO_PULLUP;
+    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
+
+    GPIO_InitStruct.Pin = DISPLAY_CSB_PIN;
+    HAL_GPIO_Init(DISPLAY_CSB_GPIO_PORT, &GPIO_InitStruct);
+
+    GPIO_InitStruct.Pin = DISPLAY_RESETB_PIN;
+    HAL_GPIO_Init(DISPLAY_RESETB_GPIO_PORT, &GPIO_InitStruct);
+
+    GPIO_InitStruct.Pin = EXTFLASH_CSB_PIN;
+    HAL_GPIO_Init(EXTFLASH_CSB_GPIO_PORT, &GPIO_InitStruct);
+
+    GPIO_InitStruct.Pin = OSCILLOSCOPE_PIN;
+    HAL_GPIO_Init(OSCILLOSCOPE_GPIO_PORT, &GPIO_InitStruct);
+
+    GPIO_InitStruct.Pin = OSCILLOSCOPE2_PIN;
+    HAL_GPIO_Init(OSCILLOSCOPE2_GPIO_PORT, &GPIO_InitStruct);
+
+#ifdef DISPLAY_BACKLIGHT_PIN
+    DISPLAY_BACKLIGHT_GPIO_ENABLE();
+    GPIO_InitStruct.Pin = DISPLAY_BACKLIGHT_PIN;
+    HAL_GPIO_Init(DISPLAY_BACKLIGHT_GPIO_PORT, &GPIO_InitStruct);
+    HAL_GPIO_WritePin(DISPLAY_BACKLIGHT_GPIO_PORT,DISPLAY_BACKLIGHT_PIN,GPIO_PIN_SET);
+#endif
+
+#ifdef SMALLCPU_CSB_PIN
+    SMALLCPU_CSB_GPIO_ENABLE();
+    GPIO_InitStruct.Pin = SMALLCPU_CSB_PIN;
+    HAL_GPIO_Init(SMALLCPU_CSB_GPIO_PORT, &GPIO_InitStruct);
+    HAL_GPIO_WritePin(SMALLCPU_CSB_GPIO_PORT,SMALLCPU_CSB_PIN,GPIO_PIN_SET);
+#endif
+
+#ifdef SMALLCPU_BOOT0_PIN
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    SMALLCPU_BOOT0_GPIO_ENABLE();
+    GPIO_InitStruct.Pin = SMALLCPU_BOOT0_PIN;
+    HAL_GPIO_Init(SMALLCPU_BOOT0_GPIO_PORT, &GPIO_InitStruct);
+    HAL_GPIO_WritePin(SMALLCPU_BOOT0_GPIO_PORT,SMALLCPU_BOOT0_PIN,GPIO_PIN_RESET);
+    GPIO_InitStruct.Pull = GPIO_PULLUP;
+#endif
+
+#ifdef IR_HUD_ENABLE_PIN
+    IR_HUD_ENABLE_GPIO_ENABLE();
+    GPIO_InitStruct.Pin = IR_HUD_ENABLE_PIN;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    HAL_GPIO_Init(IR_HUD_ENABLE_GPIO_PORT, &GPIO_InitStruct);
+    HAL_GPIO_WritePin(IR_HUD_ENABLE_GPIO_PORT,IR_HUD_ENABLE_PIN,GPIO_PIN_SET);
+    GPIO_InitStruct.Pull = GPIO_PULLUP;
+#endif
+
+#ifdef BLE_NENABLE_PIN
+    BLE_NENABLE_GPIO_ENABLE();
+    MX_Bluetooth_PowerOff();
+#endif
+
+#ifdef TESTPIN
+    GPIO_InitStruct.Pull = GPIO_PULLUP;
+    TEST_GPIO_ENABLE();
+    GPIO_InitStruct.Pin = TEST_PIN;
+    HAL_GPIO_Init(TEST_GPIO_PORT, &GPIO_InitStruct);
+    HAL_GPIO_WritePin(TEST_GPIO_PORT,TEST_PIN,GPIO_PIN_SET);
+    GPIO_InitStruct.Pull = GPIO_PULLUP;
+#endif
+}
+
+
+void MX_TestPin_High(void)
+{
+#ifdef TESTPIN
+    HAL_GPIO_WritePin(TEST_GPIO_PORT,TEST_PIN,GPIO_PIN_SET);
+#endif
+}
+
+
+void MX_TestPin_Low(void)
+{
+#ifdef TESTPIN
+    HAL_GPIO_WritePin(TEST_GPIO_PORT,TEST_PIN,GPIO_PIN_RESET);
+#endif
+}
+
+void MX_Bluetooth_PowerOn(void)
+{
+    GPIO_InitTypeDef GPIO_InitStruct;
+    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
+    GPIO_InitStruct.Pin = BLE_NENABLE_PIN;
+    HAL_GPIO_Init(BLE_NENABLE_GPIO_PORT, &GPIO_InitStruct);
+    HAL_GPIO_WritePin(BLE_NENABLE_GPIO_PORT,BLE_NENABLE_PIN,GPIO_PIN_RESET);
+}
+
+
+void MX_Bluetooth_PowerOff(void)
+{
+    GPIO_InitTypeDef GPIO_InitStruct;
+    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+    GPIO_InitStruct.Pin = BLE_NENABLE_PIN;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    HAL_GPIO_Init(BLE_NENABLE_GPIO_PORT, &GPIO_InitStruct);
+}
+
+
+void MX_SmallCPU_Reset_To_Boot(void)
+{
+#ifdef SMALLCPU_NRESET_PIN
+    GPIO_InitTypeDef GPIO_InitStruct;
+
+    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
+
+    SMALLCPU_NRESET_GPIO_ENABLE();
+    GPIO_InitStruct.Pin = SMALLCPU_NRESET_PIN;
+    HAL_GPIO_Init(SMALLCPU_NRESET_GPIO_PORT, &GPIO_InitStruct);
+    HAL_GPIO_WritePin(SMALLCPU_NRESET_GPIO_PORT,SMALLCPU_NRESET_PIN,GPIO_PIN_RESET);
+    HAL_GPIO_WritePin(SMALLCPU_BOOT0_GPIO_PORT,SMALLCPU_BOOT0_PIN,GPIO_PIN_SET);
+    HAL_Delay(2);
+    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+    HAL_GPIO_Init(SMALLCPU_NRESET_GPIO_PORT, &GPIO_InitStruct);
+    HAL_Delay(100);
+    HAL_GPIO_WritePin(SMALLCPU_BOOT0_GPIO_PORT,SMALLCPU_BOOT0_PIN,GPIO_PIN_RESET);
+#endif
+}
+
+
+void MX_SmallCPU_NO_Reset_Helper(void)
+{
+#ifdef SMALLCPU_NRESET_PIN
+    GPIO_InitTypeDef GPIO_InitStruct;
+
+    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
+
+    SMALLCPU_NRESET_GPIO_ENABLE();
+    HAL_GPIO_Init(SMALLCPU_NRESET_GPIO_PORT, &GPIO_InitStruct);
+    HAL_GPIO_WritePin(SMALLCPU_NRESET_GPIO_PORT,SMALLCPU_NRESET_PIN,GPIO_PIN_SET);
+//	HAL_Delay(100);
+//  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+//  HAL_GPIO_Init(SMALLCPU_NRESET_GPIO_PORT, &GPIO_InitStruct);
+#endif
+}
+
+
+void MX_SmallCPU_Reset_To_Standard(void)
+{
+#ifdef SMALLCPU_NRESET_PIN
+    GPIO_InitTypeDef GPIO_InitStruct;
+
+    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
+
+    SMALLCPU_NRESET_GPIO_ENABLE();
+    GPIO_InitStruct.Pin = SMALLCPU_NRESET_PIN;
+    HAL_GPIO_Init(SMALLCPU_NRESET_GPIO_PORT, &GPIO_InitStruct);
+    HAL_GPIO_WritePin(SMALLCPU_NRESET_GPIO_PORT,SMALLCPU_NRESET_PIN,GPIO_PIN_RESET);
+    HAL_GPIO_WritePin(SMALLCPU_BOOT0_GPIO_PORT,SMALLCPU_BOOT0_PIN,GPIO_PIN_RESET);
+    HAL_Delay(2);
+    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+    HAL_GPIO_Init(SMALLCPU_NRESET_GPIO_PORT, &GPIO_InitStruct);
+#endif
+}
+
+
+uint8_t MX_UART_ButtonAdjust(uint8_t *array)
+{
+#ifdef USART_PIEZO
+    uint8_t answer[4];
+    HAL_UART_Transmit(&UartPiezoTxHandle,array,4,1000);
+    HAL_UART_Receive(&UartPiezoTxHandle,answer,4,2000);
+    if(	(answer[0] == array[0])
+        &&(answer[1] == array[1])
+        &&(answer[2] == array[2])
+        &&(answer[3] == array[3]))
+    return 1;
+#endif
+    return 0;
+}
+
+
+void MX_UART_Init(void)
+{
+  /*##-1- Configure the UART peripheral ######################################*/
+  /* Put the USART peripheral in the Asynchronous mode (UART Mode) */
+  /* UART1 configured as follow:
+      - Word Length = 8 Bits
+      - Stop Bit = One Stop bit
+      - Parity = None
+      - BaudRate = 9600 baud
+      - Hardware flow control disabled (RTS and CTS signals) */
+
+#ifdef USARTx_CTS_PIN
+    UartHandle.Init.HwFlowCtl  = UART_HWCONTROL_RTS_CTS;
+#else
+    UartHandle.Init.HwFlowCtl  = UART_HWCONTROL_NONE;
+#endif
+    UartHandle.Instance        = USARTx;
+    UartHandle.Init.BaudRate   = 115200;
+    UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
+    UartHandle.Init.StopBits   = UART_STOPBITS_1;
+    UartHandle.Init.Parity     = UART_PARITY_NONE;
+    UartHandle.Init.Mode       = UART_MODE_TX_RX;
+    HAL_UART_Init(&UartHandle);
+
+#ifdef USART_PIEZO
+    UartPiezoTxHandle.Instance        = USART_PIEZO;
+    UartPiezoTxHandle.Init.BaudRate   = 1200;
+    UartPiezoTxHandle.Init.WordLength = UART_WORDLENGTH_8B;
+    UartPiezoTxHandle.Init.StopBits   = UART_STOPBITS_1;
+    UartPiezoTxHandle.Init.Parity     = UART_PARITY_NONE;
+    UartPiezoTxHandle.Init.HwFlowCtl  = UART_HWCONTROL_NONE;
+    UartPiezoTxHandle.Init.Mode       = UART_MODE_TX_RX;
+
+    HAL_UART_Init(&UartPiezoTxHandle);
+#endif
+
+#ifdef USART_IR_HUD
+    UartIR_HUD_Handle.Instance        = USART_IR_HUD;
+    UartIR_HUD_Handle.Init.BaudRate   = 2400;
+    UartIR_HUD_Handle.Init.WordLength = UART_WORDLENGTH_8B;
+    UartIR_HUD_Handle.Init.StopBits   = UART_STOPBITS_1;
+    UartIR_HUD_Handle.Init.Parity     = UART_PARITY_NONE;
+    UartIR_HUD_Handle.Init.HwFlowCtl  = UART_HWCONTROL_NONE;
+    UartIR_HUD_Handle.Init.Mode       = UART_MODE_TX_RX;
+
+    HAL_UART_Init(&UartIR_HUD_Handle);
+#endif
+}
+
+void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
+{
+    if(huart == &UartHandle)
+        UartReady = SET;
+}
+
+
+
+//void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
+void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
+{
+    if(huart == &UartHandle)
+        UartReady = SET;
+    else
+    if(huart == &UartIR_HUD_Handle)
+    {
+        UartReadyHUD = SET;
+    }
+}
+
+void MX_tell_reset_logik_alles_ok(void)
+{
+#ifdef RESET_LOGIC_ALLES_OK_PIN
+    GPIO_InitTypeDef GPIO_InitStruct;
+
+    RESET_LOGIC_ALLES_OK_GPIO_ENABLE();
+
+    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
+    GPIO_InitStruct.Pin = RESET_LOGIC_ALLES_OK_PIN;
+    HAL_GPIO_Init(RESET_LOGIC_ALLES_OK_GPIO_PORT, &GPIO_InitStruct);
+
+    HAL_GPIO_WritePin(RESET_LOGIC_ALLES_OK_GPIO_PORT,RESET_LOGIC_ALLES_OK_PIN,GPIO_PIN_RESET);
+    HAL_Delay(1);
+    HAL_GPIO_WritePin(RESET_LOGIC_ALLES_OK_GPIO_PORT,RESET_LOGIC_ALLES_OK_PIN,GPIO_PIN_SET);
+
+    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+    HAL_GPIO_Init(RESET_LOGIC_ALLES_OK_GPIO_PORT, &GPIO_InitStruct);
+#endif
+}
+
+
+#ifndef BOOTLOADER_STANDALONE
+void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
+{
+    if(huart == &UartIR_HUD_Handle)
+        tCCR_restart();
+}
+#endif