Sinus ausgeben beim STM32F10x Board

Gast #2389932
Lesenswert?

Hallo alle Zusammen,

ich bräuchte eure Hilfe.
Ich will bei dem STM32F10X-128K-Eval Board über den BNC Connector einen 
Sinus auszugeben. Das Programm für den Sinus hab ich schon geschrieben, 
nur mir ist nicht ganz klar,wie diese Werte an den BNC Connector 
ausgeben kann? Ich weiss das der BNC an PC1 hängt, aber um die Werte für 
den Sinus auszugeben muss ich ja den ganzen Port C benutzen.

Ich weiss jetzt nicht wie ich die Sinus Werte aus meiner Tabelle am BNC 
Connector ausgeben kann??


Mfg
Paul
Gast #2390195
Lesenswert?

Mach dir doch bitte vorher gedanken wie du dein Wunschsignal erzeugen 
willst. Folgende "einfache" Möglichkeiten (unabhängig vom Board-Layout) 
hast du:

Ausgabe über PWM, anschließend Filter

Ausgabe über ADC (evt. auch Filtern)

Ausgabe über gesamten port, anschließend Seriel-AD Wandler oder sowas

Ich habe ca. 1 min gebraucht um im Userguide/Datenblatt nachzuschauen 
welches dieser Möglichkeiten bei dir in Frage kommt (30 sek davon für 
den pdf-Download) und es ist eine der genannten.


Die Sinuserzeugung die du bereits vorgenommen hast musst du eventuell 
ein bischen anpassen, da ich denke das du das entsprechende 
HardwareModul noch nicht in aktiviert/initialisiert hast.

Gruß

Maddin
Gast #2394340
Lesenswert?

ich habe jetzt das Programm fertig geschrieben, ich leg meine 
Sinustabelle im Speicher ab, greif per DMA zu und schicke es über den 
DAC.

Mein problem ist jetzt, ich erhalte ke Signal an PA4 oder PA5?????

Hier mein Code:
#include "stm32f10x_lib.h"


#define DAC_DHR12RD_Address      ((u32)0x40007420)


uc16 Sine12bit[32] = {2047, 2447, 2831, 3185, 3498, 3750, 3939, 4056, 
4095, 4056,
                      3939, 3750, 3495, 3185, 2831, 2447, 2047, 1647, 
1263, 909,
                      599, 344, 155, 38, 0, 38, 155, 344, 599, 909, 
1263, 1647};

u32 DualSine12bit[32];
u8 Idx = 0;



int main(void)
{
  /*********************************************************************** 
************************************************************************ 
*******************/

  GPIO_InitTypeDef GPIO_InitStructure;
  TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
  DAC_InitTypeDef DAC_InitStruct;
  DMA_InitTypeDef DMA_InitStruct;

  RCC_DeInit();
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, 
ENABLE);
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);

  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_4 | GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

  for (Idx= 0; Idx<32; Idx++)
    {
      DualSine12bit[Idx] = (Sine12bit[Idx] << 16) + (Sine12bit[Idx]);
    }

  TIM_TimeBaseStruct.TIM_Prescaler = 0x0;
  TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseStruct.TIM_Period = 0x19;
  TIM_TimeBaseStruct.TIM_ClockDivision = 0x0;
  TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStruct);

  TIM_SelectOutputTrigger(TIM8, TIM_TRGOSource_Update);

  DAC_InitStruct.DAC_Trigger = DAC_Trigger_T8_TRGO;
  DAC_InitStruct.DAC_WaveGeneration = DAC_WaveGeneration_None;
  DAC_InitStruct.DAC_OutputBuffer = DAC_OutputBuffer_Disable;
  DAC_Init(DAC_Channel_1, &DAC_InitStruct);
  DAC_Init(DAC_Channel_2, &DAC_InitStruct);

  DMA_DeInit(DMA2_Channel4);
  DMA_InitStruct.DMA_PeripheralBaseAddr = DAC_DHR12RD_Address;
  DMA_InitStruct.DMA_MemoryBaseAddr = (u32)&DualSine12bit;
  DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralDST;
  DMA_InitStruct.DMA_BufferSize = 32;
  DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;
  DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
  DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
  DMA_InitStruct.DMA_Mode = DMA_Mode_Circular;
  DMA_InitStruct.DMA_Priority = DMA_Priority_High;
  DMA_InitStruct.DMA_M2M = DMA_M2M_Disable;
  DMA_Init(DMA2_Channel4, &DMA_InitStruct);

    DMA_Cmd(DMA2_Channel4, ENABLE);

    DAC_Cmd(DAC_Channel_1, ENABLE);
    DAC_Cmd(DAC_Channel_2, ENABLE);

    DAC_DMACmd(DAC_Channel_2, ENABLE);

    TIM_Cmd(TIM8, ENABLE);
}
(Firma: EleLa - www.elela.de) #2394539
Lesenswert?

Das ist dann wohl dumm gelaufen...
Erst ab STM32F103xC (256 KBFlash) ist der drin. Ich hab daran auch nicht 
gedacht, denn die bis 128 KB Flash nehme ich schon lange nicht mehr.
Leider gibt es meist die Demo-Boards nur mit dem kleinen.

Raus holen mit dem Messer und einen größeren drauf löten (Pins am 
Gehäuse abschneiden bis das schwarze Quadrat raus fällt).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren