Zurück (C) Christof Ermer, Regensburg
Gästebuch 
(public. sonst besser Email)  ChristofErmer@gmail.com



01.07.2019

STM32
 

Jetzt wird es höchste zeit, daß ich meine Merkzettel hier sammle.

Boad an der Uni

STM32L010RB
Mein Speicherplatz
D:\Users\Christof\CloudStation\STM32_Desk

D:\Ac6\SystemWorkbench

Da liegen Beispiele:  C:\Users\Christof\AppData\Roaming\Ac6\SW4STM32\firmwares\STM32Cube_FW_L0_V1.11.2\Projects


Eclipse:
F3 Navigiert zur Klasse oder Methode unter dem Cursor
F4 Zeigt die Klassenhierarchie zur Klasse unter dem Cursor an

https://www.st.com/en/evaluation-tools/stm32-nucleo-boards.html

http://www.openstm32.org/HomePage

Atollic STM Compiler umsonst  ?

Eclipse Compiler Einstellung: 

NICHT GEFUNDEN

C:\Program Files (x86)\GNU Tools ARM Embedded\8 2018-q4-major

ALLES QUATSCH


Lösung:

System workbench installeren von ST

SO GEHTS

  http://www.openstm32.org/System%2BWorkbench%2Bfor%2BSTM32

http://www.openstm32.org/Downloading%2Bthe%2BSystem%2BWorkbench%2Bfor%2BSTM32%2Binstaller

und noch CubeMX  https://www.st.com/en/development-tools/stm32cubeide.html

Youtubes:
https://www.youtube.com/watch?v=cfb1awS_JTw

 

Einführung WEBSIDES
http://stefanfrings.de/stm32/stm32l0.html
und

https://jaxenter.de/microcontroller-iot-stm32-59802  

Eclipse im Microntroller.net

https://www.mikrocontroller.net/articles/STM32_Eclipse_Installation#Downloads


  

Workbench start














Nützliche Eclipse Kurzbefehle

28. SEPTEMBER 2011 |  ECLIPSE |  SONSTIGES |  PHP |  SNIPPLETS  0 KOMMENTARE
BY LUKAS BLATTER

Es gibt verschiedene Tools um PHP zu entwickeln. Mein bevorzugtes Tool ist Eclipse. Hier stelle ich ein paar Kurzbefehle vor, welche die Arbeit mit Eclipse beschleunigen:

Ctrl+Shift+L
Mit diesem Befehl werden alle Kurzbefehle aufgelistet

Ctrl+K
Zur nächsten gleichen Zeichenfolge springen.

Ctrl+Shift+K
Zur vorher gehenden gleichen Zeichenfolge springen

Ctrl+Q
Zur letzen bearbeiteten Stelle springen

Alt+Pfeil Links / Pfeil rechts
Springt zur Stelle an der man vorher gearbeitet hat. Dies ist sehr nützlich wenn an verschiedenen Stellen im Script gearbeitet wird.

Alt+Pfeil hoch / Pfeil runter
Aktuelle Zeile nach oben oder nach unten verschieben

Ctrl+Alt+Pfeil hoch / Pfeil runter
Kopiert die aktuelle Zeile/n nach oben oder unten

Shift+Alt+A
Spaltenmodus aktivieren. Damit lässt sich über mehrere Zeilen hinweg ein bestimmter Bereich gleichzeitig bearbeiten.

Ctrl+D
Aktuelle Zeile oder markierte Zeilen löschen

Ctrl+Shift+7 bzw. Ctrl+Shift+C
Zeile aus- oder einkommentieren

Ctrl+Shift+/
Fügt Block-Kommentar Zeichen um den selektierten Bereich ein.

Ctrl+M
Editorfenster maximieren

Ctrl+L
Zu Zeile springen (Zeilennummer eingeben)

Ctrl+Shift+R
Open Resource Dialog öffnen. Schneller als mit diesem findet man keine Datei im Projekt.

Ctrl+Shift+T
Klassen, Funktionen, Variablen, Macros, Namespaces und vieles mehr anspringen.

Alt+Space
Autocomplete, den begonnenen Text vervollständigen.

Ctrl+Shift+F
Autoformatierung des Quellcodes.

Ctrl+E
Zeigt die Liste der offenen Tabs an. Dadurch kann via Tastatur zu einem anderen Tab gesprungen werden.

Ctrl+O
Zeigt alle Funktionen des aktuellen Tabs sowie markiert die Funktion in welcher sich der Pointer gerade befindet.

Ctrl+Shift+Y
Markierter Text in Kleinbuchstaben umwandeln.

Ctrl+Shift+X
Markierter Text in Grossbuchstaben umwandeln. 

Alt+Shift+R
aktive Datei umbenennen

Shift+Enter und Ctrl+Shift+Enter
Shift+Enter fügt eine leere Zeile unterhalb des Cursors ein. Der Unterschied zum normalen Verhalten ist, dass man hier nicht am Ende einer Zeile (Linie) sein muss, um eine neue Zeile einzufügen.
Ctrl+Shift+Enter macht das gleiche, der Cursor bleibt jedoch oben stehen.

Ctrl+F6
Einfach zwischen den geöffneten Dateien hin und her switchen

Weitere Listen mit Kurzbefehlen sind hier zu finden:
http://eclipse-tools.sourceforge.net/shortcuts.html
http://eclipse.dzone.com/news/effective-eclipse-shortcut-key


STRG + S Speichern
STRG + Z Aktion rückgängig machen
STRG + Bild hoch/Bild runter Zwischen Tabs wechseln
STRG + W Tab schließen
STRG + Pfeiltasten (Links, Rechts) Cursor Wörterweise verschieben
STRG + Pfeiltasten (Hoch, Runter) Scrollen, ohne das der Cursor mit scrollt
STRG + SHIFT + R Schnelles öffnen eines Item
STRG + L In beliebige Zeile springen
STRG + O Schnelles öffnen einer Methode
STRG + SHIFT + Pfeiltasten (Hoch, Runter) Zur Nachbarmethoden springen
STRG + SHIFT + G Alle Referenzen zur ausgewählten Methode im gesamten Projekt suchen
STRG + Q Rücksprung zur Stelle an dem der Cursor zuletzt eine Stelle verändert hat
ALT + SHIFT + X +J Starten des Programmteils
STRG + . Sprung zum nächsten Fehler
ALT + Pfeiltasten (Hoch, Runter) Verschieben einer kompletten Zeile nach oben/unten
STRG + ALT + Pfeiltasten (Hoch, Runter) Vervielfältigung einer bestimmten Zeile
STRG + D Löscht aktuelle Zeile in der sich der Cursor befindet
STRG + 7 Schnelles auskommentieren
F3 Sprung zur Deklaration der ausgewählten Variable/Methode/Klasse
STRG + SHIFT + F Automatische Formatierung
ALT + SHIFT + M Lagert markierten Programm-Code in einer neuen Methode aus
STRG + SHIFT + L Anzeigen aller Shortcuts




static GPIO_InitTypeDef  GPIO_InitStruct;
static void SystemClock_Config(void);
int main(void)
{
 HAL_Init();

  /* Configure the system clock to 2 MHz */
  SystemClock_Config();
 
  /* -1- Enable GPIO Clock (to be able to program the configuration registers) */
  LED2_GPIO_CLK_ENABLE();

  /* -2- Configure IO in output push-pull mode to drive external LEDs */
  GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull  = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;

  GPIO_InitStruct.Pin = LED2_PIN;
  HAL_GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStruct);

  /* -3- Toggle IO in an infinite loop */
  while (1)
  {
    HAL_GPIO_TogglePin(LED2_GPIO_PORT, LED2_PIN);
    /* Insert delay 100 ms */
    HAL_Delay(100);
  }
}

void SystemClock_Config(void)
{
   
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
 
  /* Enable MSI Oscillator */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI;
  RCC_OscInitStruct.MSIState = RCC_MSI_ON;
  RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_5;
  RCC_OscInitStruct.MSICalibrationValue=0x00;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct)!= HAL_OK)
  {
    /* Initialization Error */
    while(1);
  }
 
  /* Select MSI as system clock source and configure the HCLK, PCLK1 and PCLK2
     clocks dividers */
  RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSI;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; 
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; 
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0)!= HAL_OK)
  {
    /* Initialization Error */
    while(1);
  }
  /* Enable Power Control clock */
  __HAL_RCC_PWR_CLK_ENABLE();
 
  /* The voltage scaling allows optimizing the power consumption when the device is
     clocked below the maximum system frequency, to update the voltage scaling value
     regarding system frequency refer to product datasheet.  */
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3);
 
}

#ifdef  USE_FULL_ASSERT

/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t *file, uint32_t line)
{
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  /* Infinite loop */
  while (1)
  {
  }
}
#endif




  #define ADC_CONVERTED_DATA_BUFFER_SIZE   ((uint32_t)  32)   /* Size of array aADCxConvertedData[] */
ADC_HandleTypeDef             AdcHandle;
ADC_ChannelConfTypeDef        sConfig;
static uint16_t   aADCxConvertedData[ADC_CONVERTED_DATA_BUFFER_SIZE];

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void Error_Handler(void);

int main(void)
{
HAL_Init();
 BSP_LED_Init(LED2);
 AdcHandle.Instance          = ADCx;
  if (HAL_ADC_DeInit(&AdcHandle) != HAL_OK)
  {
    /* ADC de-initialization Error */
    Error_Handler();
  }

  AdcHandle.Init.ClockPrescaler        = ADC_CLOCK_SYNC_PCLK_DIV2;      /* Synchronous clock mode, input ADC clock with prscaler 2 */

  AdcHandle.Init.Resolution            = ADC_RESOLUTION_12B;            /* 12-bit resolution for converted data */
  AdcHandle.Init.DataAlign             = ADC_DATAALIGN_RIGHT;           /* Right-alignment for converted data */
  AdcHandle.Init.ScanConvMode          = ADC_SCAN_DIRECTION_FORWARD;    /* Sequencer disabled (ADC conversion on only 1 channel: channel set on rank 1) */
  AdcHandle.Init.EOCSelection          = ADC_EOC_SINGLE_CONV;           /* EOC flag picked-up to indicate conversion end */
  AdcHandle.Init.LowPowerAutoPowerOff  = DISABLE;
  AdcHandle.Init.LowPowerFrequencyMode = DISABLE;
  AdcHandle.Init.LowPowerAutoWait      = DISABLE;                       /* Auto-delayed conversion feature disabled */
  AdcHandle.Init.ContinuousConvMode    = ENABLE;                        /* Continuous mode enabled (automatic conversion restart after each conversion) */
  AdcHandle.Init.DiscontinuousConvMode = DISABLE;                       /* Parameter discarded because sequencer is disabled */
  AdcHandle.Init.ExternalTrigConv      = ADC_SOFTWARE_START;            /* Software start to trig the 1st conversion manually, without external event */
  AdcHandle.Init.ExternalTrigConvEdge  = ADC_EXTERNALTRIGCONVEDGE_NONE; /* Parameter discarded because software trigger chosen */
  AdcHandle.Init.DMAContinuousRequests = ENABLE;                        /* ADC DMA continuous request to match with DMA circular mode */
  AdcHandle.Init.Overrun               = ADC_OVR_DATA_OVERWRITTEN;      /* DR register is overwritten with the last conversion result in case of overrun */
  AdcHandle.Init.OversamplingMode      = DISABLE;                       /* No oversampling */
  AdcHandle.Init.SamplingTime          = ADC_SAMPLETIME_7CYCLES_5;

  /* Initialize ADC peripheral according to the passed parameters */
  if (HAL_ADC_Init(&AdcHandle) != HAL_OK)
  {
    Error_Handler();
  }
 
 
  /* ### - 2 - Start calibration ############################################ */
  if (HAL_ADCEx_Calibration_Start(&AdcHandle, ADC_SINGLE_ENDED) !=  HAL_OK)
  {
    Error_Handler();
  }
 
  /* ### - 3 - Channel configuration ######################################## */
  sConfig.Channel      = ADCx_CHANNEL;               /* Channel to be converted */
  sConfig.Rank         = ADC_RANK_CHANNEL_NUMBER;
  if (HAL_ADC_ConfigChannel(&AdcHandle, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }
 
  /* ### - 4 - Start conversion in DMA mode ################################# */
  if (HAL_ADC_Start_DMA(&AdcHandle,
                        (uint32_t *)aADCxConvertedData,
                        ADC_CONVERTED_DATA_BUFFER_SIZE
                       ) != HAL_OK)
  {
    Error_Handler();
  }
 
  /* Infinite Loop */
  while (1)
  {
  }
}