Hallo
Ich will oben genanntes LCD mit einem STM32 über SPI ansteuern, allerdings will das Ganze nicht wie ich.
Datenblatt:
http://cdn-reichelt.de/documents/dat...500/dog-me.pdf
Das LCD wird mit 3,3V versorgt, die Beschaltung erfolgte nach Datenblatt. Die Initialisierung ebenso. Die SPI wird mit 2MHz getaktet, das macht mit dem verwendeten Taktteiler irgendwas knapp unter 8kHz.
Init:
SPI-Init:void SPI2_IntHandler(DMA_HandleTypeDef *hdma_spi2_tx){
HAL_Delay(1);
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_2);
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_2);
}
void testLCD(){
unsigned short pl; //pl - Pufferlänge
unsigned long to; //to - Time Out
char t=0;
//Chip-Select-Pin
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_RESET);
//RS_Pin
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_RESET);
//Init-Befehle für LCD
char lcdpuffer[] = {0b00111001, 0b00010101, 0b01010101, 0b01101110, 0b01110010, 0b00001111, 0b00000001, 0b00000110};
pl = 8;
to = 50;
char s[]= "Test OK";
//Init senden
HAL_SPI_Transmit(&hspi2, lcdpuffer, pl, to);
HAL_Delay(100);
printf("LCD initialisiert\n");
//RS_Pin
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_SET);
//String in s an LCD senden
pl = 6;
HAL_SPI_Transmit(&hspi2, s, pl, to);
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_2);
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_2);
Hat irgendjemand eine Ahnung, warum das Scheißteil nicht kooperieren will? Die SPI jedenfalls scheint auszugeben was sie soll...sagt zumindest das Oszilloskop von einem Freund./* SPI2 init function */
static void MX_SPI2_Init(void)
{
hspi2.Instance = SPI2;
hspi2.Init.Mode = SPI_MODE_MASTER;
hspi2.Init.Direction = SPI_DIRECTION_2LINES;
hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
hspi2.Init.CLKPolarity = SPI_POLARITY_HIGH;
hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi2.Init.NSS = SPI_NSS_SOFT;
hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi2.Init.CRCPolynomial = 10;
if (HAL_SPI_Init(&hspi2) != HAL_OK)
{
Error_Handler();
}
}
PS: Langsam glaube ich an Voodoo...
Während ich das hier schreibe und zwischendurch mal rumprobiere, habe ich die Spannung versehentlich kurz kurzgeschlossen. Ist Mist (das Netzteil liefert kontinuierlich 40A, wenn es muß), aber das LCD hat endlich mal das angezeigt was es anzeigen soll.
Auch heute Nachmittag waren einmal kurz etwas Blödsinn drauf...
Hat irgendjemand ne Ahnung was da los sein könnte?
Ach...und nach Neustart funktioniert es wieder nicht.
Lesezeichen