86-DigIn-DMA-Library (STM32F4)

mit dieser Library können 8 oder 16 GPIOs von einem Port zur Eingabe benutzt werden.
Die gemessenen Werte werden in einem Puffer gespeichert.

Es wird ein Timer, ein DMA und ein GPIO-Port dafür benötigt. Ich habe im Beispiel Timer1 Port-E und DMA2 (Channel=6, Stream=5) benutzt. Es geht aber auch jede andere Kombination.

Im H-File kann eingestellt werden ob 8 Kanäle oder 16 benutzt werden sollen. Und wenn 8 Kanäle dann ob auf den Bits 0 bis 7 oder auf den Bits 8 bis 15.
(Ich habe 8Bit am Port-E Bit8 bis 15 benutzt weil die am Discovery-Board frei sind)

Im H-File muss (bzw. kann) auch die Größe vom Puffer und die Clock-Frq vom Timer eingestellt werden. Daraus ergibt sich dann wie lange eine “Messung” dauert.

Es gibt eine Funktion zum starten der Messung und eine Funktion zum prüfen ob die Messung fertig ist. Wenn sie fertig ist, können die Digital-Werte entweder als Bitwert oder als Portwert vom Puffer ausgelesen werden.

Voraussetzungen :

1
2
Benutzte Module der CooCox-IDE : GPIO, TIM, DMA, MISC
Benutzte Librarys : keine

Enumerationen :

1
2
3
4
typedef enum {
  DIN_DMA_READY =0,  // ready zum auslesen
  DIN_DMA_RUNNING    // busy
}DIN_DMA_STATUS_t;

Funktionen :

1
2
3
4
5
void UB_DIN_DMA_Init(void);                                      // init der Library
void UB_DIN_DMA_Start(void);                                     // Messung starten
DIN_DMA_STATUS_t UB_DIN_DMA_Check(void);                         // check ob Messung fertig ist
uint8_t UB_DIN_DMA_ReadKanal(uint8_t kanal, uint32_t position);  // einen Pin auslesen
uint16_t UB_DIN_DMA_ReadAll(uint32_t position);                  // kompletter Port auslesen

Beispiel :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//--------------------------------------------------------------
// File     : main.c
// Datum    : 07.06.2014
// Version  : 1.0
// Autor    : UB
// EMail    : mc-4u(@)t-online.de
// Web      : www.mikrocontroller-4u.de
// CPU      : STM32F4
// IDE      : CooCox CoIDE 1.7.4
// GCC      : 4.7 2012q4
// Module   : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Demo der Digital-IN (DMA) Library
// Hinweis  : Diese zwei Files muessen auf 8MHz stehen
//              "cmsis_boot/stm32f4xx.h"
//              "cmsis_boot/system_stm32f4xx.c"
//--------------------------------------------------------------
 
#include "main.h"
#include "stm32_ub_din_dma.h"
 
int main(void)
{
  uint8_t bit_pe3;
  uint16_t byte_port_e;
 
  SystemInit(); // Quarz Einstellungen aktivieren
 
  // init der Library
  // (8bit Digital Input PE8 bis PE15)
  UB_DIN_DMA_Init();
 
  // starten der Messung per DMA
  UB_DIN_DMA_Start();
 
  // warten bis Messung vorbei ist
  while(UB_DIN_DMA_Check()==DIN_DMA_RUNNING);
 
  // ein bit auslesen (position = 0)
  bit_pe3=UB_DIN_DMA_ReadKanal(3,0);
 
  // 8bit auslesen (position = 10)
  byte_port_e=UB_DIN_DMA_ReadAll(10);
 
  while(1)
  {
 
  }
}

Hier die Library zum Download :

ub_stm32f4_din_dma_v100

Hier der komplette CooCox-Projektordner zum Download :

Demo_86_DIN_DMA


Wie hat Dir dieser Artikel gefallen?

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (Noch keine Bewertungen)
Loading...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.