STM32 har allt - Utom trådlöshet

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
JimmyAndersson
Inlägg: 26547
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Re: STM32 har allt - Utom trådlöshet

Inlägg av JimmyAndersson »

FSMC har jag tänkt sätta mig in i, men har inte blivit av än.
DCMI har jag gjort flera projekt med. Men i C#, Python och assembler. (Språkval beroende på typ av projekt.)
I Python använde jag färdig library. Till de andra gjorde jag allt från grunden, mest för att jag inte hade lust att sätta mig in i färdig kod. (Att använda någon annans kod tar ibland längre tid och är mer förvirrande än att göra från grunden, tycker jag. Beror nog mycket på dokumentationen.)

En pdf som verkar bra:
https://www.st.com/resource/en/applicat ... ronics.pdf
DanielM
Inlägg: 2433
Blev medlem: 5 september 2019, 14:19:58

Re: STM32 har allt - Utom trådlöshet

Inlägg av DanielM »

Jag tänkte köpa en LCD med taffs som jag aldrig har kommit i kontakt med förut. En ILI9341 3.2" versionen med parallell-bus. Jag har bara använt ILI9341 2.8" med SPI + färdigt bibliotek. Det fungerade och gjorde sin sak.
Men här tänker jag använda: https://www.banggood.com/3_2-Inch-ILI93 ... &rmmds=buy

Denna har 16-bit paralllell-bus, D0 -> D15.
Jag börjar med att skapa en slumpmässig konfiguering för LCD med FSMC.
screenshot_1.jpg
När jag gör denna konfiguering så får jag följande pinnar på min STM32:
  • FSMC_NE1 - Chip select
  • FSMC_NWE - Write enable
  • FSMC_NOE - Output enable
  • FSMC_D0->FSMC_D15 - Parallell databus
  • FSMC_A18 - Adress-bussen
Nu hittar jag inte ett sådant diagram för "LCD interface" i databladet. Bara SPRAM, SRAM, ROM

På LCD:n så finns det följande pinnar
screenshot_2.jpg
Här har vi pinnarna
  • CS - Chip select (Kopplas ihop med FSMC_NE1)
  • RS - Data register (Kopplas ihop med FSMC_A18)
  • WR - Write control (Kopplas ihop med FSMC_NWE)
  • RD - Read control (Kopplas ihop med FSMC_NOE)
  • RST - Reset pin (Antar att denna blir en extern pinne där man sätt den hög hela tiden?)
  • DB0->DB15 - Parallell databus (Kopplas ihop med FSMC_D0->FSMC_D15)
Angående "Timing" så måste man titta vad LCD:n klarar av. I detta fall är dom inställda på maximala värden. Alltså standard, eller "default" som det annars heter på engelska.
I STM32 när man ska läsa eller skriva till LCD:n så använder man följande.
HAL_SRAM_Write_16b(&hsram1, pAddress, pSrcBuffer, BufferSize);
HAL_SRAM_Read_16b(&hsram1, pAddress, pDstBuffer, BufferSize);
Mer än så här vet jag inte. Vadå pAddress? Vadå pDestionationBuffer/pSourceBuffer?
Så om jag vill skriva till register 0xA3 så sätter jag då pAddress = 0xA3 och då ändras FSMC_A18 för mig? Varför valde jag just FSMC_A18 och inte FSMC_A17? Det kanske inte skiljer något mellan dom, förutom pin-placeringen på STM32 uC.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Rick81
Inlägg: 755
Blev medlem: 30 december 2005, 13:07:09

Re: STM32 har allt - Utom trådlöshet

Inlägg av Rick81 »

Jag har använt FMSCbussen, men var ett tag sen.

Du har ju kopplat RS till A18 så nog därför den ändras.

Du måste ju ange pAddress för att processorn ska veta till vilken adress den ska skriva/läsa datat. Vilken adress du ska skriva till får du kolla i datablad på LCD.
DanielM
Inlägg: 2433
Blev medlem: 5 september 2019, 14:19:58

Re: STM32 har allt - Utom trådlöshet

Inlägg av DanielM »

Okej!

Så det spelar ingen roll om jag använder A17 eller A18. Det är bara flyttningen av pinnen som sker?
Reset kan man väll koppla till VDD?

En annan fråga!
Vad tyckte ni om mitt val av en 4 MHz extern hög-kristall?
Jag beräknade med dessa formler, där sista formeln så testade jag Gm mot Gmcrit + externa resistansen R. Jag var tvungen att välja F = 4 för annars kunde jag varken uppfylla.

Kod: Markera allt

Gmargin = Gm/Gmcrit % Denna måste vara över 5
Gm > (4*(ESR+R)*(2*pi*F*10^6)^2*(C0*10^(-12) + CL*10^(-12))^2*1000) % Gm måste vara större

Kod: Markera allt

% This follows the document AN2867
ESR = 130; % Crystall resistance
C0 = 7; % Shunt
CL = 12; % Crystall load capacitance
Cs = 5; % Capacitance between the board
F = 4; % Crystall frequency
Gm = 5; % Minimum gain for F4 

% Gmcrit need to be less than 1 for a F4 according to the data sheet
Gmcrit = (4*ESR*(2*pi*F*10^6)^2*(C0*10^(-12) + CL*10^(-12))^2*1000)
% Gmargin need to be over 5 according to 
Gmargin = Gm/Gmcrit
% Find the capacitors for the crystal
X = 2*(CL-Cs)
% External load
R = 1/(2*pi*F*10^6*X*10^(-12))
% Final check with the external load
Gm > (4*(ESR+R)*(2*pi*F*10^6)^2*(C0*10^(-12) + CL*10^(-12))^2*1000)
Rick81
Inlägg: 755
Blev medlem: 30 december 2005, 13:07:09

Re: STM32 har allt - Utom trådlöshet

Inlägg av Rick81 »

Det är ganska komplext sätta upp en FMSC buss då den har MÅNGA inställningar beroende på vad den används till. Om du inte läst datablad noggrant rekommenderar jag dig följa exempelkoden istället för "göra en slumpmässig konfiguration i CubeMX" då det kan bli väldigt svårt debugga när data inte tas emot som det du tror du skickar.

Jag brukar köra intern oscillator i STM32 och sedan ev 32.768 kHz kristall till RTC om jag behöver det. Men visst behöver du väldigt noggrann CPU klocka är ju en kristall givetvis noggrannare.
DanielM
Inlägg: 2433
Blev medlem: 5 september 2019, 14:19:58

Re: STM32 har allt - Utom trådlöshet

Inlägg av DanielM »

Men är inte en FMSC buss bara digitala utgångar som sägs antingen låg eller hög beroende på vad man skriver för register?
Alltså jag kunde lika gärna använda vanliga GPIO's. Typ som han har gjort här.
https://github.com/LonelyWolf/stm32/blo ... /ssd1289.c
Jag skulle kunna skriva om hans bibliotek så det passar FSMC bussen?

Hmm..
Smart idé!
Jag tror jag ska testa utan extern kristall. Bara för att jag aldrig har gjort det förut.
DanielM
Inlägg: 2433
Blev medlem: 5 september 2019, 14:19:58

Re: STM32 har allt - Utom trådlöshet

Inlägg av DanielM »

Detta är ju radio?
Användarvisningsbild
swesysmgr
Inlägg: 14919
Blev medlem: 28 mars 2009, 06:56:43
Ort: Göteborg

Re: STM32 har allt - Utom trådlöshet

Inlägg av swesysmgr »

Ja det är trådlös kommunikation fast inte WLAN.
DanielM
Inlägg: 2433
Blev medlem: 5 september 2019, 14:19:58

Re: STM32 har allt - Utom trådlöshet

Inlägg av DanielM »

Det är WiFi jag vill ha, dvs koppla upp en STM32 på internet. :)
DanielM
Inlägg: 2433
Blev medlem: 5 september 2019, 14:19:58

Re: STM32 har allt - Utom trådlöshet

Inlägg av DanielM »

Okej!

Nu har jag forskat lite kring DCMI. Ni får gärna rätta mig.
Jag har valt denna konfiguering.
screenshot.jpg
När jag valde denna konfiguering så fick jag
  • DCMI_HSYNC
  • DCMI_VSYNC
  • DCMI_PIXCLK
  • DCMI0->DCMI7
Inställningarna betyder följande:
  • Pixel clock polarity (DCMI_PIXCLK): Denna avgör om clockan på CMOS cameran börjar med hög signal eller låg signal
  • Vertical synchronization polarity(DCMI_VSYNC): Har ingen aning vad denna gör, men det är väll också någon signallina som börjar angingen hög eller låg
  • Horizontal synchronization polarity(DCMI_HSYNC): Samma sak här också. Koppla in den bara!
  • Frequency of frame capture: Här får jag välja om jag vill att "logga" alla bilder som skickas till STM32, eller varannan, eller varje 4:e.
  • JPEG mode: JPEG är alltså ett format för att komprimera bilder. Här har jag valt att jag vill använda JPEG för att komprimera bilden som jag får av kameran. Detta gör så att jag behöver använda mindre minne.
Ett bra sätt är att använda DMA där man kan spara alla bilder för varje frame.
Här väljer jag circular för att om jag ska fylla på en array med DMA, så vill jag börja på index 0 för varje påfyllning.
screenshot_1.jpg
Tack varje STM32CubeIDE så genereras denna C-kod. Denna kod startar upp begynnelsen av att ta emot signaler från CMOS cameran och fylla på i DMA.

Kod: Markera allt

static void MX_DCMI_Init(void)
{

  /* USER CODE BEGIN DCMI_Init 0 */

  /* USER CODE END DCMI_Init 0 */

  /* USER CODE BEGIN DCMI_Init 1 */

  /* USER CODE END DCMI_Init 1 */
  hdcmi.Instance = DCMI;
  hdcmi.Init.SynchroMode = DCMI_SYNCHRO_HARDWARE;
  hdcmi.Init.PCKPolarity = DCMI_PCKPOLARITY_FALLING;
  hdcmi.Init.VSPolarity = DCMI_VSPOLARITY_LOW;
  hdcmi.Init.HSPolarity = DCMI_HSPOLARITY_LOW;
  hdcmi.Init.CaptureRate = DCMI_CR_ALL_FRAME;
  hdcmi.Init.ExtendedDataMode = DCMI_EXTEND_DATA_8B;
  hdcmi.Init.JPEGMode = DCMI_JPEG_ENABLE;
  if (HAL_DCMI_Init(&hdcmi) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN DCMI_Init 2 */

  /* USER CODE END DCMI_Init 2 */

}
För att fylla på i DMA, så måste jag aktivera den. Här väljer jag DCMI_MODE_CONTINUOUS för jag vill att STM32 ska fylla på hos arrayen hela tiden.
pData är en array som jag fyller på med. Length är längden på arrayen. Datatypen hos pData ska vara uint32_t, men för en vanlig CMOS kamera så går det att använda uint8_t.

Kod: Markera allt

HAL_DCMI_Start_DMA(&hdcmi, DCMI_MODE_CONTINUOUS, pData, Length);
Det går även att klippa i bilden.

Kod: Markera allt

HAL_DCMI_EnableCrop(&hdcmi);
HAL_DCMI_ConfigCrop(&hdcmi, X0, Y0, XSize, YSize);
HAL_DCMI_DisableCrop(&hdcmi);
Och man kan stoppa kameran. Denna stoppar även DMA. För att starta igen så börjar man att anropa HAL_DCMI_Start_DMA.

Kod: Markera allt

HAL_DCMI_Stop(&hdcmi);
Så om vi tittar lite i databladet.
screenshot_3.jpg
screenshot_5.jpg
Så måste jag ha denna konfiguering. Jag ändrade från 8-bit till 10-bit.
screenshot_6.jpg
Så nu är det bara ställa in inställningen för CMOS cameran igenom I2C, t.ex. gamma, färg osv.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
DanielM
Inlägg: 2433
Blev medlem: 5 september 2019, 14:19:58

Re: STM32 har allt - Utom trådlöshet

Inlägg av DanielM »

JimmyAndersson skrev: 28 januari 2021, 20:54:09 FSMC har jag tänkt sätta mig in i, men har inte blivit av än.
DCMI har jag gjort flera projekt med. Men i C#, Python och assembler. (Språkval beroende på typ av projekt.)
I Python använde jag färdig library. Till de andra gjorde jag allt från grunden, mest för att jag inte hade lust att sätta mig in i färdig kod. (Att använda någon annans kod tar ibland längre tid och är mer förvirrande än att göra från grunden, tycker jag. Beror nog mycket på dokumentationen.)

En pdf som verkar bra:
https://www.st.com/resource/en/applicat ... ronics.pdf
Jag har valt att välja en OV7670 för att jag litar inte på vad Banggood säljer angående OV2640. Dessutom ger OV7670 en mindre data-array tillbaka. Lite sämre kamera, men den ger en bild iallfall.
Tittar jag på denna bild
Bild

och sedan tittar jag på denna bild.
screenshot_8.jpg
Då ser vi att DCMI_HSYNC inte finns med i första bilden och att HREF har dykt upp men finns inte med i andra bilden. Hur löser jag detta? Ska den ens vara med?
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Klas-Kenny
Inlägg: 11830
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: STM32 har allt - Utom trådlöshet

Inlägg av Klas-Kenny »

Kollar du i databladet för kameran ser du att det finns en inställning i ett register, för att göra om HREF till HSYNC.

HREF och HSYNC verkar bara vara lite olika sätt att göra samma sak.
DanielM
Inlägg: 2433
Blev medlem: 5 september 2019, 14:19:58

Re: STM32 har allt - Utom trådlöshet

Inlägg av DanielM »

Okej. Jag ska leta upp detta register!

En annan fråga som bygger på erfarenhet. Är det bättre att ha en kristall eller en PWM utgång om man vill driva en extern enhet som kräver XCLK in?
Rick81
Inlägg: 755
Blev medlem: 30 december 2005, 13:07:09

Re: STM32 har allt - Utom trådlöshet

Inlägg av Rick81 »

PWM och kristall är olika saker.

Kristall används till en oscillator för att få bra noggranhet.

Du kan använda PWM istället för en extern oscillator.

Så frågan är om du har en klockingång eller om du har inbyggd oscillator?
Skriv svar