Dobrý den,
Řekl jsem si, že zkusím nové STM32G0, proto jsem nasadil nový procesor STM32G030F6 (TSSOP20) do jednoho z mých projektů. V projektu potřebuji komunikovat po SPI s dvěma SPI-Slave čipy - procesor je v režimu Master. I když to nebylo nutno, využil jsem obě SPI, které čip STM32G0 nabízí.
Jedno SPI používám pro komunikaci s 16 bitovým slovem a komunikace funguje tak jak má - přenos, přerušení, prostě vše v pořádku.
Problém nastává při použití druhého SPI, které používám pouze s 8 bitovým slovem (1 byte). Data odešlu v pořádku, do Slave také dorazí v pořádku, hodiny odpovídají skutečnosti - vše měřeno osciloskopem. Data ovšem nepřijmu - tedy přijmu, ale v DR registru jsou nějak podivně rozsypaný - první byte ignorován, druhý byte je kombinace prvního a druhého a třetí je v pořádku. RXNE vlajka se nenahazuje a negeneruje se ani přerušení navázané na RXNE. Slave čip data posílá v pořádku - opět kontrolováno osciloskopem.
Zde je funkce, kterou používám pro příjem :
while(LL_SPI_IsActiveFlag_TXE(SPI1) == 0); // pockej na prázdný TX registr
LL_SPI_TransmitData8(SPI1, 0xff); // odesli tmp data (jen pro ctení)
while(LL_SPI_IsActiveFlag_RXNE(SPI1) == 0); // pockej na príjem dat
return LL_SPI_ReceiveData8(SPI1); // vycti data a vrat
Program se ovšem zasekne na čekání na RXNE vlajku - ta nepřijde.
Funkce inicializace SPI je zde :
spi.BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV256;
spi.BitOrder = LL_SPI_MSB_FIRST;
spi.ClockPhase = LL_SPI_PHASE_1EDGE;
spi.ClockPolarity = LL_SPI_POLARITY_LOW;
spi.CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE;
spi.CRCPoly = 0;
spi.DataWidth = LL_SPI_DATAWIDTH_8BIT;
spi.Mode = LL_SPI_MODE_MASTER;
spi.NSS = LL_SPI_NSS_SOFT;
spi.TransferDirection = LL_SPI_FULL_DUPLEX;
if(LL_SPI_Init(SPI1, &spi) == ERROR)
return ERR_INIT_SPI1;
//LL_SPI_EnableDMAReq_RX(SPI1);
//LL_SPI_SetDMAParity_RX(SPI1, LL_SPI_DMA_PARITY_ODD);
LL_SPI_SetRxFIFOThreshold(SPI1, LL_SPI_RX_FIFO_QUARTER_FULL_FULL);
LL_SPI_Enable(SPI1); // zapnutí SPI 1
Hodiny do SPI zapínám a před inicializací SPI ještě zresetuji. DMA se nyní nevyužívá, proto je zakomentované.
Chtěl bych Vás poprosit o radu, co dělám špatně, neboť se s tím peru už cca týden a na nic moc jsem nepřišel
Děkuji za každou radu.