ARM Embedded - Timer

Antworten
Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

ARM Embedded - Timer

Beitrag von Mathias »

Hat schon jemand mal versucht, einen Timer auf dem STM32 zu nutzen ?

Ich habe mal einen Anfang probiert, aber wie weiter ?

Code: Alles auswählen

const
  TIM_CR1_CEN = 1; //  #define TIM_CR1_CEN   BIT(0)
  RCC_APB1ENR_TIM2EN = 1;
 
procedure Timer1_Interrupt; public Name 'TIM2_interrupt'; interrupt;
begin
  multi;
end;
 
begin
  // Ports einschalten
  RCC.APB2ENR := RCC.APB2ENR or (%111 shl 2);
 
  // Timer
  RCC.APB1ENR := RCC.APB1ENR or RCC_APB1ENR_TIM2EN;
 
  TIM2.PSC := 0;
  TIM2.ARR := $FFFF;
  TIM2.RCR := 0;
 
  TIM2.DIER:=TIM_DIER_UIE;
  TIM2.DIER:=TIM2.DIER or TIM_CR1_CEN;
 
//  TIM2.CR1 := TIM2.CR1 or 1;


Für C++ habe ich ein Beispiel gefunden: https://os.mbed.com/forum/mbed/topic/16 ... ment-38688
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
kupferstecher
Beiträge: 418
Registriert: Do 17. Nov 2016, 11:52

Re: ARM Embedded - Timer

Beitrag von kupferstecher »

Bei dir fehlt noch die aktivierung im NVIC (Nested vector interrupt controller), damit der Interrupt auch ausgelöst wird.

Die Unit im Anhang ist nach der "alten" Nomenklatur, also "Timer2" statt "TIM2", muss geändert werden.
Dateianhänge
utimer2.pas
(2.67 KiB) 161-mal heruntergeladen
stm32F10x_BitDefs.pas
(401.18 KiB) 178-mal heruntergeladen

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: ARM Embedded - Timer

Beitrag von Mathias »

Danke
Bei dir fehlt noch die aktivierung im NVIC (Nested vector interrupt controller), damit der Interrupt auch ausgelöst wird.

Das dachte ich mir fast, nur wusste ich nicht wie ich dies in Pascal lösen sollte.
Dank deiner Unit läuft der Timer.

Hast du die Units selbst geschrieben oder sind die irgendwo öffentlich ?
Vor allem die stm32F10x_BitDefs.pas .
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
kupferstecher
Beiträge: 418
Registriert: Do 17. Nov 2016, 11:52

Re: ARM Embedded - Timer

Beitrag von kupferstecher »

Die stm32F10x_BitDefs.pas hab ich aus dem C-Header von ST übersetzt, welcher bei der SPL ("Standard peripheral library") dabei ist, müsste man irgendwo sammeln/ bereitstellen.

Es gibt einen teilweise Port der SPL, Datei st32f103fw.pas:
http://j-software.dk/stm32f103.php
Teilweise heißt: RCC, GPIO, UART, NVIC, Systick, SPI, I2S, ADC, DMA, EXTI.

DonAlfredo hat vor kurzem auch von einer Bibliothek berichtet, die mbf ("Microcontroller Board Framework"):
https://github.com/michael-ring/mbf/tree/master/Source
Diese unterstützt sogar verschiedene Controllerfamilien und Hersteller, aber wie ich gesehen habe zumindest für den STM32F1 nur die grundlegendsten Sachen.

Ansonsten bedien ich mich des folgenden C-Tutorials, das die SPL verwendet:
http://diller-technologies.de/stm32.html
Sind die relevanten Funktionen in der st32f103fw.pas nicht vorhanden, dann schau ich mir die Registerzugriffe in den C-Sourcen der SPL an.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: ARM Embedded - Timer

Beitrag von Mathias »

Die stm32F10x_BitDefs.pas hab ich aus dem C-Header von ST übersetzt, welcher bei der SPL ("Standard peripheral library") dabei ist, müsste man irgendwo sammeln/ bereitstellen.

Ich habe deine Unit mal veröffentlicht. Da der stm32f103 mehr als nur ein Timer hat, werde ich die Unit noch ein wenig anpassen.

https://github.com/sechshelme/Lazarus-E ... 103C/units

Wen du noch mehr interessante Sachen hast, würde ich dies auch gerne veröffentlichen. :wink:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten